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]]

