Dear R users, I want to conduct a small simulation study and I have to use the lme function in a loop to save the restricted log likelihood. However, for one simulated data set the lme function gives this error
Error en lme.formula(yboot ~ X[, -1], data = data.fr, random = Z.block) : nlminb problem, convergence error code = 1 message = singular convergence (7) and then, the simulation stops. I would like to skip this simulated data, and then continue with the loop, but I cannot find the way of doing this. I am using R2.6.2. Can anybody tell me if I can write a condition to avoid the "problematic" data? I Have also obtained similar errors Error en lme.formula(yboot ~ X[, -1], data = data.fr, random = Z.block) : nlminb problem, convergence error code = 1 message = false convergence (8) My data can be reproduced as follows library(splines) library(nlme) x<-c(rep(1993:2007,9)) barrio<-factor(c(rep(1:9,rep(15,9)))) xl<-min(x)-0.00001 xr<-max(x)+0.00001 ndx<-4 bdeg<-3 pord<-2 dx <- (xr-xl)/ndx knots <- seq(xl-bdeg*dx, xr+bdeg*dx, by=dx) B<-spline.des(knots,x,bdeg+1,0*x)$design m=ncol(B) D=diff(diag(m),differences=pord) P=t(D)%*%D P.svd=svd(t(D)%*%D) U=(P.svd$u)[,1:(m-pord)] d=(P.svd$d)[1:(m-pord)] Delta=diag(1/sqrt(d)) Z=B%*%U%*%Delta X=NULL for(i in 0:(pord-1)){X=cbind(X,x^i)} ### This X and Z matrix are the matrices in the mixed model representation of a spline n<-nrow(X) Id<- factor(rep(1,n)) Z.block<-list(list(Id=pdIdent(~Z-1)),list(barrio=pdIdent(~1))) Z.block<-unlist(Z.block,recursive=FALSE) fijos2<-c(-326.9178203,0.1645375 ) ef.spline<-c(-0.2214524, -0.1649163, -0.1649163, 0.8878776, -0.2214524) set.seed(48) ef.error<-rnorm(135,0,sqrt(0.03073974)) where ef.spline are standardized random effects, and errores are the residuals. My loop looks like this B<-1000 y.boot<-array(0,c(nrow(Z),B)) log.comp<-array(0,B) while(i<B){ i<-i+1 spline<-sample(ef.spline,size=ncol(Z),replace=T) errores<-sample(ef.error,size=nrow(Z),replace=T) y.boot[,i]<-X%*%fijos2+Z%*%spline+errores yboot<-y.boot[,i] data.fr <- groupedData( yboot ~ X[,-1] |Id ,data = data.frame(yboot,X,Z,barrio)) log.comp[i]<-lme(yboot~X[,-1],data=data.fr,random=Z.block)$logLik } The idea is to add a condition in the loop such that if(condition......) {i<-i-1} and then substitute the "problematic" data by a new one, Many thanks, Tomas Goicoa [[alternative HTML version deleted]] ______________________________________________ R-help@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.