Qué tan cerca de cero debería estar la suma de los efectos aleatorios en GLMM (con lme4)


8

Estoy usando el lme4paquete en R para hacer algunos modelos logísticos de efectos mixtos.
Entiendo que la suma de cada efecto aleatorio debe ser cero.

Cuando hago modelos mixtos lineales de juguete usando lmer, los efectos aleatorios generalmente son < confirmando mi creencia de que el But en los modelos binomiales de juguete (y en los modelos de mis datos binomiales reales) algunos de los efectos aleatorios suman ~ 0.9.1010colSums(ranef(model)$groups) ~ 0

¿Debería Preocuparme? ¿Cómo interpreto esto?

Aquí hay un ejemplo de juguete lineal

toylin<-function(n=30,gn=10,doplot=FALSE){
 require(lme4)
 x=runif(n,0,1000)
 y1=matrix(0,gn,n)
 y2=y1
 for (gx in 1:gn)
 {
   y1[gx,]=2*x*(1+(gx-5.5)/10) + gx-5.5  + rnorm(n,sd=10)
   y2[gx,]=3*x*(1+(gx-5.5)/10) * runif(1,1,10)  + rnorm(n,sd=20)
 }
 c1=y1*0;
 c2=y2*0+1;
 y=c(t(y1[c(1:gn),]),t(y2[c(1:gn),]))
 g=rep(1:gn,each=n,times=2)
 x=rep(x,times=gn*2)
 c=c(c1,c2)
 df=data.frame(list(x=x,y=y,c=factor(c),g=factor(g)))
 (m=lmer(y~x*c + (x*c|g),data=df))
 if (doplot==TRUE)
  {require(lattice)
   df$fit=fitted(m)
   plot1=xyplot(fit ~ x|g,data=df,group=c,pch=19,cex=.1)
   plot2=xyplot(y ~ x|g,data=df,group=c)
   print(plot1+plot2)
  }
 print(colMeans(ranef(m)$g))
 m
}

En este caso, los colMeans siempre salen<106

Aquí hay un ejemplo de juguete binomial (compartiría mis datos reales, pero se está enviando para su publicación y no estoy seguro de cuál es la política de la publicación sobre la publicación de antemano):


toybin<-function(n=100,gn=4,doplot=FALSE){
  require(lme4)
x=runif(n,-16,16) y1=matrix(0,gn,n) y2=y1 for (gx in 1:gn) { com=runif(1,1,5) ucom=runif(1,1,5) y1[gx,]=tanh(x/(com+ucom) + rnorm(1)) > runif(x,-1,1) y2[gx,]=tanh(2*(x+2)/com + rnorm(1)) > runif(x,-1,1) } c1=y1*0; c2=y2*0+1; y=c(t(y1[c(1:gn),]),t(y2[c(1:gn),])) g=rep(1:gn,each=n,times=2) x=rep(x,times=gn*2) c=c(c1,c2) df=data.frame(list(x=x,y=y,c=factor(c),g=factor(g))) (m=lmer(y~x*c + (x*c|g),data=df,family=binomial)) if (doplot==TRUE) {require(lattice) df$fit=fitted(m) print(xyplot(fit ~ x|g,data=df,group=c,pch=19,cex=.1)) } print(colMeans(ranef(m)$g)) m }

Ahora los colMeans a veces salen por encima de 0.3, y definitivamente más altos, en promedio que el ejemplo lineal.


3
¿Puedes incluir código para reproducir esos ejemplos de juguetes aquí? Ayudaría a explorar este comportamiento interesante.
Aaron dejó Stack Overflow

También he visto este mismo comportamiento con mis experimentos. En el caso gaussiano hay una restricción de suma a cero, pero en los casos no gausianos no. No estoy seguro de si la suma a cero es una condición necesaria, siempre que el valor esperado de los efectos aleatorios sea cero. Puede ser útil en algunos casos, y aparentemente es fácil de codificar en el caso gaussiano, así que está ahí ... Esperemos que alguien con una mejor comprensión intervenga.
Jouni

Respuestas:


3

Dado que el código de @ Hemmo quedó ligeramente destrozado en el cuadro "Bounty", agrego esta versión reformateada como "wiki de la comunidad". Si este no es un uso apropiado de la wiki, me disculpo de antemano. Siéntase libre de eliminarlo.

library(mvabund)
library(lme4) 
data(spider) 
Y <- as.matrix(spider$abund)
X <- spider$x 
X <- X[ ,c(1, 4, 5, 6)] 
X <- rbind(X, X, X, X, X, X, X, X, X, X, X, X) 
site <- rep(seq(1, 28), 12) 
dataspider <- data.frame(c(Y), X, site) 
names(dataspider) <- c("Y","soil.dry", "moss", "herb.layer", "reflection", "site") 
fit <- glmer(
  Y ~ soil.dry + moss + herb.layer + reflection + (1|site), 
  family = poisson(link = log), 
  data = dataspider,
  control = glmerControl(optimizer = "bobyqa")
) 

1
Bueno, parece que esa pregunta aún no recibió suficiente atención. Mi propia conclusión es que realmente no hay nada malo aquí, realmente no hay una condición de suma a cero, pero solo sucede en casos gaussianos donde todo es lineal. La expectativa de efectos aleatorios debe ser 0 es la suposición real, no que las sumas reales de los efectos estimados sean cero. Tendré que premiar a alguien, así que de nada. :)
Jouni

2
@Hemmo Yikes, ahora siento que realmente debería contribuir con algo. Tienes razón en que nada está realmente mal. La respuesta corta (que esperaba escribir pero no encontré el tiempo para hacerlo) es que la media será cero si la superficie de probabilidad es gaussiana. Informalmente, podemos "probar" esto notando que los errores gaussianos * Los efectos aleatorios gaussianos conducen a otro gaussiano. Cuando tiene un glmm con una función de error no gaussiana (por ejemplo, Poisson en su caso), la superficie de probabilidad puede volverse no gaussiana y todas las apuestas están desactivadas. Espero que esto ayude.
David J. Harris
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.