t<-c(9 ,14, 21, 28, 42 ,57 , 63 ,70 ,79) y<-c(8.93, 10.8 ,18.59, 22.33, 39.35 ,56.11 ,61.73, 64.62, 67.08) f<-data.frame(y) f$t<-t f$lt<-log(t) attach(f) library(nls) ########## estimation prealable t1<-max(y) # car t1 est le max de la fonction t2<-max(y)-min(y) # car t2=max-min form<-y~t1-t2*exp(-exp(t3+t4*lt)) fm1 <- nls(form,start=c(t3=0,t4=.1),data=f) sol<-fm1$m$getPars() sol<-as.real(sol) # --> (-1,2.6) ########## estimee finale deb<-c(t1=t1,t2=t2,t3=sol[1],t4=sol[2]) fm1 <- nls(form,start=deb,data=f) summary(fm1) sol<-fm1$m$getPars() # --> (70,61.7,-9.2,2.4) sig1<-sqrt(deviance(fm1)/length(y)) # --> 0.96 ########## trace plot(t,fitted(fm1),type="l") points(t,y) ######## estimation de sigmaCV sigcv<-0 for (i in (1:length(y))) { ff<-f[row.names(f)!=i,] # ou encore ff<-f; ff[i,],<-NA; fmcv <- nls(form,start=sol,data=ff) pr<-predict(fmcv,list(lt=f$lt[i])) sigcv<-sigcv+(pr-f$y[i])^2 } sigcv<-sqrt(sigcv/length(y)) # on trouve 1.66. La difference avec sig1 # est grande. Ceci est du au fait qu'il y a peu d'observation # vis-a-vis du nombre de parrametres et peut remettre en cause le choix d'un # modele si complique (et difficile a estimer) avec aussi peu d'observations