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@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. ______________________________________________ R-help@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.