Nathalie Yauschew-Raguenes
2010-Jan-13 14:02 UTC
[R] Problem fitting a non-linear regression model with nls
Hi, I'm trying to make a regression of the form : formula <- y ~ Asym_inf + Asym_sup * ( (1 / (1 + (n1 * (exp( (tmid1-x) / scal1) )^(1/n1) ) ) ) - (1 / (1 + (n2 * (exp( (tmid2-x) / scal2) )^(1/n2) ) ) ) ) which is a sum of the generalized logistic model proposed by richards. with data such as these: x <- c(88,113,128,143,157,172,184,198,210,226,240,249,263,284,302,340) y <- c(0.04,0.16,1.09,2.65,2.46,2.43,1.88,2.42,1.51,1.70,1.92,1.35,0.89,0.34,0.13,0.10) I use the nls function to fit my data to the model. nls(formule, data=cbind.data.frame(x,y), start=list(Asym_inf =min(y),Asym_inf =max(y)-min(y), n1=1,n2=1,tmid1=120,tmid2=250,scal1=11,scal2=30)) and it always finished by one of those answers (even if I change the initial values) : - "Error in nls(formule, data = cbind.data.frame(x, y), start = list(Asym_inf =min(y), : \n le pas 0.000488281 est devenu inf?rieur ? 'minFactor' de 0.000976562\n" - "Error in nls(formule, data = cbind.data.frame(x, y), start = list(miny = min(y), : \n gradient singulier\n" - "Error in numericDeriv(form[[3]], names(ind), env) : \n Valeur manquante ou infinie obtenue au cours du calcul du mod?le\n") - "Error in nlsModel(formula, mf, start, wts) : \n singular gradient matrix at initial parameter estimates\n" So it seems that I reach a local extremum each time. I know that most of the problem comes from the choice of the initial values of the parameters Asym_inf, Asym_inf, n1, n2, tmid1, tmid2, scal1and scal2. My question is how could I estimate those initial values so that the nls fitting works. Thanks in advance -- Nathalie YAUSCHEW-RAGUENES Ph.D Student Unit? de Recherches Ecologie Fonctionnelle et Physique de l'Environnement (EPHYSE) INRA, Centre de Bordeaux - Aquitaine 71 Av Edouard Bourlaux 33883 Villenave d'Ornon Cedex France
Gabor Grothendieck
2010-Jan-13 15:02 UTC
[R] Problem fitting a non-linear regression model with nls
You could try the brute force of nls2 package; however, note that you have 8 parameters and only 16 points so you might look for a more parsimonious model. Plotting it it seems somewhat gaussian in shape so: mod <- nls(y ~ a * dnorm(x, b, c), start = c(a = mean(y)/dnorm(0, 0, sd(x)), b = mean(x), c = sd(x))) matplot(x, cbind(y, fitted(mod)), type = c("p", "l"), pch = 20) On Wed, Jan 13, 2010 at 9:02 AM, Nathalie Yauschew-Raguenes <nathalie.yauschew-Raguenes at bordeaux.inra.fr> wrote:> Hi, > > I'm trying to make a regression of the form : > > formula <- y ~ Asym_inf ?+ Asym_sup * ( (1 / (1 + (n1 * (exp( (tmid1-x) / > scal1) )^(1/n1) ) ) ) - (1 / (1 + (n2 * (exp( (tmid2-x) / scal2) )^(1/n2) ) > ) ) ) > which is a sum of the generalized logistic model proposed by richards. > > with data such as these: > > x <- c(88,113,128,143,157,172,184,198,210,226,240,249,263,284,302,340) > y <- > c(0.04,0.16,1.09,2.65,2.46,2.43,1.88,2.42,1.51,1.70,1.92,1.35,0.89,0.34,0.13,0.10) > > I use the nls function to fit my data to the model. > > nls(formule, data=cbind.data.frame(x,y), start=list(Asym_inf > =min(y),Asym_inf =max(y)-min(y), > n1=1,n2=1,tmid1=120,tmid2=250,scal1=11,scal2=30)) > > and it always finished by one of those answers (even if I change the initial > values) : > - "Error in nls(formule, data = cbind.data.frame(x, y), start > list(Asym_inf =min(y), ?: \n ?le pas 0.000488281 est devenu inf?rieur ? > ?'minFactor' de 0.000976562\n" > - "Error in nls(formule, data = cbind.data.frame(x, y), start = list(miny > min(y), ?: \n ?gradient singulier\n" > - "Error in numericDeriv(form[[3]], names(ind), env) : \n ?Valeur manquante > ou infinie obtenue au cours du calcul du mod?le\n") > - "Error in nlsModel(formula, mf, start, wts) : \n ?singular gradient matrix > at initial parameter estimates\n" > So it seems that I reach a local extremum each time. I know that most of > ?the problem comes from the choice of the initial values of the parameters > Asym_inf, Asym_inf, n1, n2, tmid1, tmid2, scal1and scal2. > > My question is how could I estimate those initial values so that the nls > fitting works. > > Thanks in advance > > -- > Nathalie YAUSCHEW-RAGUENES > Ph.D Student > > Unit? de Recherches Ecologie Fonctionnelle et Physique de l'Environnement > (EPHYSE) > INRA, Centre de Bordeaux - Aquitaine > 71 Av Edouard Bourlaux > 33883 Villenave d'Ornon Cedex > France > > ______________________________________________ > R-help at 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. >