0

I have two vectors:

y: 
 [1] 1889 1528 1213 1009  912  777  783  708  644  716  707  644  634  624  625
 [16]  574  616  569  573  577  565  585  528  572  511  494  555  491  520  518
 [31]  476  454  470  440  450  465  436  403  448  473  429  427  434  429  448
 [46]  407  425  386  414  399  415  385  381  404  430  385  418  407  390  375
 [61]  393  410  386  359  410  367  378  367  362  382  392  378  403  353  376
 [76]  357  439  378  395  357  398  379  337  348  342  387  362  365  361  363
 [91]  359  363  379  392  330  376  366  376  363  350  319  332  328  400  369
[106]  343  401  359  365  357  398  367  344  383  377  362  405  407  384  362
[121]  361  355  358  380  371  364  410  355  370  341  373  386  339  388  365
[136]  368  351  360  379  349  358  333  359  334  369  326  373  370  335  382
[151]  381  339  344  378  367  361  312  348  356  362  357  386  337  378  386
[166]  358  376  350  354  374  383  339  352  387  351  383  354  386  388  351
[181]  355  348  400  379  389  366  370  352  353  369  359  366  357  386  346
[196]  325  362  378  344

and x:
x<-seq(150e-9,19950e-9,100e-9)

I know that there is an exponential relationship between them and that it is of the form: y=a*exp(b*x)+c

I am trying to use the non-linear least squares function to fit the data but I keep getting the error: 'Error in nlsModel(formula, mf, start, wts) : singular gradient matrix at initial parameter estimates'

My code is:

plot(x,y)
mod <- nls(y ~ a*exp( b * x) + c, start = list( a=3000, b = 500000, c=200 ))
lines(x, predict(mod, list(x = x)))

The parameters I have entered are parameters that I know are close to the expected values. Does anyone know what am I doing wrong here?

I have tried various initial values for the parameters a,b, and c, but I always get some kind of error.

Any help appreciated.

cohara
  • 111
  • 3
  • 19
  • 1
    try changing `b=500000` to `b=-500000`, **or** change `a*exp(b*x)+c` to `a*exp(-b*x)+c` (i.e., just change the sign)! Works great (although the fit definitely leaves something to be desired). – Ben Bolker Sep 30 '14 at 21:54
  • Wow, thanks! I've been at that for hours! – cohara Sep 30 '14 at 22:00
  • 1
    you can either post as an answer, or we can close/delete as "due to a typo/narrow". I figured this out by trying to plot the curve with the original parameters over the data, and seeing that it didn't even fall within the range of the data anywhere ... – Ben Bolker Sep 30 '14 at 23:29

0 Answers0