Your starting values for the parameters are no even in the general ballpark. Here is what I got for the final fit:
Parameters: Estimate Std. Error t value Pr(>|t|) a 3.806e+07 1.732e+06 21.971 <2e-16 *** k -3.391e-02 6.903e-02 -0.491 0.628 b 9.000e-01 1.240e-02 72.612 <2e-16 *** As you can see only b has the same order of magnitude as your starting b and a is different by 7 orders! In general, an nls procedure needs starting values that are "close". The same is true for any general nonlinear optimization algorithm. Only in special circumstances a nonlinear algorithm will converge from any starting point - one I know of is the convexity of the objective function. I do not think there is any nls program that will find starting values automatically for an arbitrary nonlinear model. It is possible for specific models, but is very much model dependent. Your model, for example, can be easily linearized by taking logs of both sides, i.e. mm <- lm(log(y) ~ x + I(log(x))) Then doing aa <- exp(coef(mm)[1]) bb <- exp(coef(mm)[2]) kk <- coef(mm)[3] mm1 <- nls(y ~ a * x^k * b^x, start=list(a=aa,k=kk,b=bb)) results in convergence with no problems in 7 iterations. Hope this helps, Andy __________________________________ Andy Jaworski 518-1-01 Process Laboratory 3M Corporate Research Laboratory ----- E-mail: [EMAIL PROTECTED] Tel: (651) 733-6092 Fax: (651) 736-3122 |---------+--------------------------------> | | Dr Andrew Wilson | | | <[EMAIL PROTECTED]| | | .uk> | | | Sent by: | | | [EMAIL PROTECTED]| | | ath.ethz.ch | | | | | | | | | 11/25/2003 03:09 | | | | |---------+--------------------------------> >-----------------------------------------------------------------------------------------------------------------------------| | | | To: [EMAIL PROTECTED] | | cc: | | Subject: [R] Parameter estimation in nls | >-----------------------------------------------------------------------------------------------------------------------------| I am trying to fit a rank-frequency distribution with 3 unknowns (a, b and k) to a set of data. This is my data set: y <- c(37047647,27083970,23944887,22536157,20133224, 20088720,18774883,18415648,17103717,13580739,12350767, 8682289,7496355,7248810,7022120,6396495,6262477,6005496, 5065887,4594147,2853307,2745322,454572,448397,275136,268771) and this is the fit I'm trying to do: nlsfit <- nls(y ~ a * x^k * b^x, start=list(a=5,k=1,b=3)) (It's a Yule distribution.) However, I keep getting: "Error in nls(y ~ a * x^k * b^x, start = list(a = 5, k = 1, b = 3)) : singular gradient" I guess this has something to do with the parameter start values. I was wondering, is there a fully automated way of estimating parameters which doesn't need start values close to the final estimates? I know other programs do it, so is it possible in R? Thanks, Andrew Wilson ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help