[R] Problems with nls

Daniel Malter daniel at umd.edu
Thu Jun 16 00:05:37 CEST 2011


There may be two issues here. The first might be that, if I understand the
Bass model correctly, the formula you are trying to estimate is the adoption
in a given time period. What you supply as data, however, is the cumulative
adoption by that time period.

The second issue might be that the linear algorithm may fail and that it may
be preferable to use Newton-Raphson (the standard) as this may provide
better values in the iterations.

If you do both, i.e., you do NLS on period adoption and use Newton-Raphson,
you get an estimate. Though, I am of course not sure whether that is
"correct" in the sense that it is what you would expect to find.


adoption <- 
c(167000,273000,531000,938000,2056452,3894103,5932090,7963742,9314687,10469060,11393302,11976340) 
time <- seq(from = 1,to = 12, by = 1)

adoption2<-c(0,adoption[1:(length(adoption)-1)])
S<-(adoption-adoption2)/max(adoption)

## Models 
Bass.Model <- S ~ M*((p + q)^2/p) * (exp(-(p + q) * time)/((q / p) * 
exp(-(p + q) * time) + 1)^2) 
## Starting Parameters 
Bass.Params <- list(p = 0.1, q = 0.1, M=1) 
## Model fitting 
Bass.Fit <- nls(formula = Bass.Model, start = Bass.Params)
summary(Bass.Fit)


c.hulmelowe wrote:
> 
> I'm trying to fit the Bass Diffusion Model using the nls function in R but
> I'm running into a strange problem. The model has either two or three
> parameters, depending on how it's parameterized, p (coefficient of
> innovation), q (coefficient of immitation), and sometimes m (maximum
> market
> share). Regardless of how I parameterize the model I get an error saying
> that the step factor has decreased below it's minimum. I have tried
> re-setting the minimum in nls.controls but that doesn't seem to fix the
> problem. Likewise, I have run through a variety of start values in the
> past
> few days, all to no avail. Looking at the trace output it appears that R
> believes I always have one more parameter than I actually have (i.e. when
> the model is parameterized with p and q R seems to be seeing three
> parameters, when m is also included R seems to be seeing four). My
> experience with nls is limited, can someone explain to me why it's doing
> this? I've included the data set I'm working with (published in
> Michalakelis
> et al. 2008) and some example code.
> 
> ## Assign relevant variables
> adoption <-
> c(167000,273000,531000,938000,2056452,3894103,5932090,7963742,9314687,10469060,11393302,11976340)
> time <- seq(from = 1,to = 12, by = 1)
> ## Models
> Bass.Model <- adoption ~ ((p + q)^2/p) * (exp(-(p + q) * time)/((q / p) *
> exp(-(p + q) * time) + 1)^2)
> ## Starting Parameters
> Bass.Params <- list(p = 0.1, q = 0.1)
> ## Model fitting
> Bass.Fit <- nls(formula = Bass.Model, start = Bass.Params, algorithm =
> "plinear", trace = TRUE)
> 
> Chris Hulme-Lowe
> University of Minnesota
> Department of Psychology
> Quant. Methods and Psychometrics
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
> 

--
View this message in context: http://r.789695.n4.nabble.com/Problems-with-nls-tp3600409p3600697.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list