[R-sig-ME] simulation

Scott Raynaud scott.raynaud at yahoo.com
Fri Dec 23 14:48:06 CET 2011


Ran some more simulations and never could get lmer to converge.  I dumped
one of my simulation into SAS and received a message that the covariance 
matrix for the random effects was not positive definite.  Now this is pretty 
informative to me: it says that the variance of the random effects is zero 
(or negative).  Does that imply I can omit the random effects?  I'm still a bit 
suspicious since things run fine when I omit temperature.  Am I missing 
anything here?

----- Original Message -----
From: Scott Raynaud <scott.raynaud at yahoo.com>
To: "r-sig-mixed-models at r-project.org" <r-sig-mixed-models at r-project.org>
Cc: 
Sent: Monday, December 19, 2011 8:36 AM
Subject: Re: [R-sig-ME] simulation

I played around with this some more and did some simple simulations of 75 
level 2 units pairing temprature with each of my other predictors individually.
Still nothing converged.  Everything is fine with the full model minus temperature.

Temperature is an imprtant predictor which I want to include.  Can anyone think 
of anything else I can try besides omitting temperature?
 
----- Original Message -----
From: Scott Raynaud <scott.raynaud at yahoo.com>
To: "r-sig-mixed-models at r-project.org" <r-sig-mixed-models at r-project.org>
Cc: 
Sent: Friday, December 16, 2011 7:33 PM
Subject: simulation

I'm using an R program (which I did not write) to simulate multilevel data 
(subjects in locations) used in power calculations. It uses lmer to fit a 
mixed logistic model to the simulated data based on inputs of means, 
variances, slopes and proportions:
 
###~~~~~~~~~~~~~~~~~     Required packages  ~~~~~~~~~~~~~~~~~~~~~###
    library(MASS)
    library(lme4)
###~~~~~~~~~~~~~~~~~~~     Initial inputs    ~~~~~~~~~~~~~~~~~~~~###
set.seed(12345)
siglevel<-0.03
z1score<-abs(qnorm(siglevel))
simus<-1000
n1list<-matrix(c(800,2239,3678,5117,6557,7996,  267,746,1226,1706,2186,2665,  160,448,736,1023,1311,1599,  114,320,525,731,937,1142),nrow=6,ncol=4)
sizeclass<-matrix(c( 5, 4, 3, 3, 3, 2,  15,12, 9, 9, 9, 6,  25,20,15,15,15,10,  35,28,21,21,21,14),nrow=6,ncol=4)
n2low<-20
n2high<-140
n2step<-40
npred<-10
randsize<-1
beta<-c(-1.586,-2.469,-1.197,-2.194,-2.949,-3.628,-5.227,0.198,-0.371,0.202,1.634000)
betasize<-length(beta)
effectbeta<-abs(beta)
sgnbeta<-sign(beta)
xtype<-c(2.000000,1.000000,1.000000,1.000000,1.000000,2.000000,1.000000,1.000000,1.000000,1.000000)
xprob<-c(0,0.000000,0.102000,0.141900,0.244900,0.441600,0.000000,0.533200,0.826000,0.261400,0.280000)
meanpred<-c(0,3.590,0.000,0.000,0.000,0.000,1.032,0.000,0.000,0.000,0.000)
varpred<-c(0,.010,0.000,0.000,0.000,0.000,0.083,0.000,0.000,0.000,0.000)
varpred2<-c(0,0.000,0.000,0.000,0.000,0.000,0.021,0.000,0.000,0.000,0.000)
sigma2u<-matrix(c(0.250),randsize,randsize)
n1range<-as.vector(n1list)
n2range<-seq(n2low,n2high,n2step)
n1size<-1
n2size<-length(n2range)
totalsize<-n1size*n2size
finaloutput<-matrix(0,totalsize,6*betasize)
rowcount<-1
n1col<-1
##-------------------        Inputs for model fitting       ---------------##

fixname<-c("x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10")
 fixform<-"1+x1+x2+x3+x4+x5+x6+x7+x8+x9+x10"
randform<-"(1|l2id)"
expression<-paste(c(fixform,randform),collapse="+")
modelformula<-formula(paste("y ~",expression))
data<-vector("list",2+length(fixname))
names(data)<-c("l2id","y",fixname)
...
## +++++++++++++++++++       Set up X matrix       +++++++++++++++++++  ##
            micpred<-rnorm(length,meanpred[2],sqrt(varpred[2]))
             macpred<-rnorm(n2,0,sqrt(varpred2[2]))
              x[,2]<-micpred+macpred[l2id]
               micpred<-rmultinom(length,1,c(.102,.1419,.2449,.4416,.0696)) 
               x[,3]<-micpred[1,]
               x[,4]<-micpred[2,]
               x[,5]<-micpred[3,]
               x[,6]<-micpred[4,]
            micpred<-rnorm(length,meanpred[7],sqrt(varpred[7]))
             macpred<-rnorm(n2,0,sqrt(varpred2[7]))
              x[,7]<-micpred+macpred[l2id]
               x[,8]<-rbinom(length,1,xprob[8])
               x[,9]<-rbinom(length,1,xprob[9])
               x[,10]<-rbinom(length,1,xprob[10])
               x[,11]<-rbinom(length,1,xprob[11])
##--------------------------------------------------------------## 
                   u<-mvrnorm(n2,rep(0,randsize),sigma2u)
                    fixpart<-x%*%beta
                     randpart<-rowSums(z*u[l2id,])
                      binomprob<-exp(fixpart+randpart)/(1+exp(fixpart+randpart))
                       y<-rbinom(length,1,binomprob)
##-------------------        Inputs for model fitting       ---------------##
                 data$l2id<-as.factor(l2id)
                 data$y<-y
                 data$x0<-x[,1]
                 data$x1<-x[,2]
                 data$x2<-x[,3]
                 data$x3<-x[,4]
                 data$x4<-x[,5]
                 data$x5<-x[,6]
                 data$x6<-x[,7]
                 data$x7<-x[,8]
                 data$x8<-x[,9]
                 data$x9<-x[,10]
                 data$x10<-x[,11]
###~~~~~~~~~~      Fitting the model using lmer funtion    ~~~~~~~~~~###
(fitmodel <- lmer(modelformula,data,family=binomial(link=logit),nAGQ=1))
...

where l2id is the level 2 sample size and the ellipses indicate loop code.  
Locations are treated as random and the model is random intercept only.  
The program is set to run 1000 simulations.
 
I have temperature, five levels of gestational age (GA), birth wieght (BW) and four 
other categorical pedictors, all binary.  I scaled everything so that all my slopes are in the 
range of -5.2 to 1.6 and variances from .01 to .08.  I have a couple of categories 
of GA that have small probabilities (<.10).  I'm using a structured sampling approach
looking at 20, 60, 100, and 140 locations with a total n=75k.  The first looks like this:
 
            # groups   n
            5             800
            4             2239
            3             3678
            3             5117
            3             6557
            2             7996
Total     20           75000
 
As the level 2 sizes increase, the cell sizes decrease.  When I run this model in 
the simulation I get:
 
Warning: glm.fit: algorithm did not converge
 
every time the model is fit (I killed this long before it ran 1000 times).
 
I tried increasing the number of iterations to no avail.  I suspected linear 
dependencies among the predictors, so I took out GA (same result), put
GA back and took out BW (same result) and then took out both GA and
BW.  This ran about half the time with th other half passing warnings 
such as:
 
Warning: glm.fit: algorithm did not converge
Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
 
or
 
Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
 
in addition to some like the original warning.
 
If I leave everything in but temperature, then it runs fine.  I also tested the full 
model separately at 50 and 75 level 2 units each with total n=75k.  Nothing converged.
 
I want to include temperature, but I'm not sure what else to try.  I realize 20 level 2
units is probably too small.  I think the threshold would be crossed by 60,
however.  Any suggestions?


_______________________________________________
R-sig-mixed-models at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models





More information about the R-sig-mixed-models mailing list