[R] Exponential fit of form y=exp(a*x) and not of form y=l*exp(a*x)

Carl Witthoft carl at witthoft.com
Sun Oct 23 21:03:05 CEST 2011


You misused nls().  Observe:


x<- 1:101
y2 <- 5*exp(x/20) + runif(101)/100 # nls will NOT converge for perfect data.

nls(y2 ~ exp(A*x), start=list(A=.1))

Nonlinear regression model
   model:  y2 ~ exp(A * x)
    data:  parent.frame()
       A
0.06709
  residual sum-of-squares: 136703

Number of iterations to convergence: 7
Achieved convergence tolerance: 2.694e-06



Which is a lousy fit.  Compare with

nls(y2~B*exp(A*x), start=list(A=.1,B=.3))

Nonlinear regression model
   model:  y2 ~ B * exp(A * x)
    data:  parent.frame()
     A     B
0.050 5.001
  residual sum-of-squares: 0.001398

Number of iterations to convergence: 13
Achieved convergence tolerance: 5.073e-08


So either form works, but only one will give you a result that fits your 
original data.





<quote>
Henri Mone <henriMone <at> gmail.com> writes:

 > I want to fit to my data an exponential function with following
 > functional form:
 > y=exp(a*x)
 >
 > I used the function "nls" but this gives me exponential fits with
 > following functional form:
 > y=l*exp(a*x)
 >
 > With "l" being an scaling factor. What do I need to change in my R code?
 >
 > t.dataFitModel=nls(t.dataForFitY ~exp(a*t.dataForFitX),
 > data=t.dataForFit, start=list(a = 0.01242922), trace=TRUE, algorithm =
 > "plinear")
   Use an algorithm other than "plinear", I think (admittedly this is 
not at all clear from ?nls -- you would really have to go to the 
references to find out).


-- 

Sent from my Cray XK6
"Pendeo-navem mei anguillae plena est."



More information about the R-help mailing list