Hi I would like to fit a non-linear regression to the follwoing data: quantiles<-c(seq(.05,.95,0.05)) slopes<-c( 0.000000e+00, 1.622074e-04 , 3.103918e-03 , 2.169135e-03 , 9.585523e-04 ,1.412327e-03 , 4.288103e-05, -1.351171e-04 , 2.885810e-04 ,-4.574773e-04 , -2.368968e-03, -3.104634e-03, -5.833970e-03, -6.011945e-03, -7.737697e-03 , -8.203058e-03, -7.809603e-03, -6.623985e-03, -9.414477e-03) plot(slopes~quantiles) I want to fit two models: asymptotic decay and logistic decay(s-shaped). I tried self-starting functions (SSlogis and SSasymp) like this: dframe<-data.frame(cbind(slopes,quantiles)) names(dframe)<-c("slopes","quantiles") summary(mod1<-nls(slopes ~ SSlogis( quantiles, Asym, xmid, scal),data=dframe)) summary(mod1<-nls(slopes ~ SSasymp( quantiles, Asym, resp0, lrc),data=dframe)) and I tried to specify the starting values myself. But I usually don't even get the nls started. It's always some singular gradient error or some other related error message (stopped after 50 iterations,etc.). When I leave out some values from the middle quantiles I manage to fit a 3-parameter logistic model, but if I use all the values it doesn't work any longer. Then I simulated perfect asymptotic decay data and tried to to fit an nls() with the correct parameter values, but it won't work either. What am I doing wrong? Any help would be most appreciated Best benedikt -- Benedikt Gehr Ph.D. Student Institute of Evolutionary Biology and Environmental Studies University of Zurich Winterthurerstrasse 190 CH-8057 Zurich Office 13 J 36b Phone: +41 (0)44 635 49 72 http://www.ieu.uzh.ch/staff/phd/gehr.html
My guess: You probably are overfitting your data. A straight line does about as well as anything except for the 3 high leverage points, which the minimization is probably having trouble with. -- Bert On Thu, Sep 27, 2012 at 10:43 AM, Benedikt Gehr <benedikt.gehr at ieu.uzh.ch> wrote:> quantiles<-c(seq(.05,.95,0.05)) > slopes<-c( 0.000000e+00, 1.622074e-04 , 3.103918e-03 , 2.169135e-03 , > 9.585523e-04 > ,1.412327e-03 , 4.288103e-05, -1.351171e-04 , 2.885810e-04 ,-4.574773e-04 > , -2.368968e-03, -3.104634e-03, -5.833970e-03, -6.011945e-03, -7.737697e-03 > , -8.203058e-03, -7.809603e-03, -6.623985e-03, -9.414477e-03) > plot(slopes~quantiles)-- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
thanks for your reply I agree that an lm model would fit just as well, however the expectation from a mechanistic point of view would be a non-linear relationship. Also when I "simulate" data as in y_val<-115-118*exp(-0.12*(seq(1,100)+rnorm(100,0,0.8))) x_val<-seq(1:100) plot(y_val~x_val) summary(mod1<-nls(y_val~a-b*exp(-c*x_val),start=list(a=115,b=118,c=0.12))) I do not get a convergence. I obviously must be doing something wrong. Thanks for the help Benedikt Am 27.09.2012 20:00, schrieb Bert Gunter:> My guess: > > You probably are overfitting your data. A straight line does about as > well as anything except for the 3 high leverage points, which the > minimization is probably having trouble with. > > -- Bert > > > > On Thu, Sep 27, 2012 at 10:43 AM, Benedikt Gehr > <benedikt.gehr at ieu.uzh.ch> wrote: >> quantiles<-c(seq(.05,.95,0.05)) >> slopes<-c( 0.000000e+00, 1.622074e-04 , 3.103918e-03 , 2.169135e-03 , >> 9.585523e-04 >> ,1.412327e-03 , 4.288103e-05, -1.351171e-04 , 2.885810e-04 ,-4.574773e-04 >> , -2.368968e-03, -3.104634e-03, -5.833970e-03, -6.011945e-03, -7.737697e-03 >> , -8.203058e-03, -7.809603e-03, -6.623985e-03, -9.414477e-03) >> plot(slopes~quantiles) > >-- Benedikt Gehr Ph.D. Student Institute of Evolutionary Biology and Environmental Studies University of Zurich Winterthurerstrasse 190 CH-8057 Zurich Office 13 J 36b Phone: +41 (0)44 635 49 72 http://www.ieu.uzh.ch/staff/phd/gehr.html
On 27-09-2012, at 21:15, Benedikt Gehr <benedikt.gehr at ieu.uzh.ch> wrote:> thanks for your reply > > I agree that an lm model would fit just as well, however the expectation from a mechanistic point of view would be a non-linear relationship. > > Also when I "simulate" data as in > > y_val<-115-118*exp(-0.12*(seq(1,100)+rnorm(100,0,0.8))) > x_val<-seq(1:100) > plot(y_val~x_val) > summary(mod1<-nls(y_val~a-b*exp(-c*x_val),start=list(a=115,b=118,c=0.12))) > > I do not get a convergence. I obviously must be doing something wrong.I do get convergence:> nls(y_val~a-b*exp(-c*x_val),start=list(a=115,b=118,c=0.12))Nonlinear regression model model: y_val ~ a - b * exp(-c * x_val) data: parent.frame() a b c 115.0420 117.0529 0.1192 residual sum-of-squares: 181.6 Number of iterations to convergence: 3 Achieved convergence tolerance: 1.436e-07> sessionInfo()R version 2.15.1 Patched (2012-09-11 r60679) Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) locale: [1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base Berend