[R] Nonlinear fitting - reparametrization help
Suresh Krishna
ssk2031 at columbia.edu
Thu Sep 28 06:02:02 CEST 2006
Hi,
I am trying to fit a function of the form:
y = A0 + A1 * exp( -0.5* ( (X - Mu1) / Sigma1 )^2 ) - A2 * exp ( -0.5*
( (X-Mu2)/Sigma2 )^2 )
i.e. a mean term (A0) + a difference between two gaussians.
The constraints are A1,A2 >0, Sigma1,Sigma2>0, and usually Sigma2>Sigma1.
The plot looks like a "Mexican Hat".
I had trouble (poor fits) fitting this function to toy data in Matlab and
now I am playing with R's nls and optim functions. I keep running into
singular gradient errors with nls, even with very different starting
values, and have not yet figured out how to interpret the trace results
usefully.
Can someone help ? Is there a correct parameterization for this problem ?
I have appended some R code with sample data to fit.
Thank you !!!
Suresh; please cc ssk2031 at columbia.edu if possible.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
x=seq(-10,10,length=1000)
a0=0;
ae=1;
me=0;
se=1;
ai=0.5;
mi=0;
si=3;
dogy <- function(x,a0,ae,me,se,ai,mi,si){
y=a0+ae*exp(-0.5*(((x-me)/se)^2))-ai*exp(-0.5*(((x-mi)/si)^2))
y}
y=dogy(x,a0,ae,me,se,ai,mi,si)
erval=rnorm(length(y),sd=0.02)
y=y+erval
#plot(x,y+erval)
#fit=nls(y~ae*exp((x/se)^2)-ai*exp((x/si)^2),start=c(ae=.8,se=1.1,ai=.2,si=1),trace=TRUE)
#here I tried to unsuccesfully reduce the model by eliminating A0, Mu1,
and Mu2
More information about the R-help
mailing list