Seberapa dekat dengan nol seharusnya jumlah efek acak berada di GLMM (dengan lme4)


8

Saya menggunakan lme4paket dalam R untuk melakukan beberapa pemodelan efek campuran logistik.
Pemahaman saya adalah bahwa jumlah setiap efek acak harus nol.

Ketika saya membuat mainan model linier campuran menggunakan lmer, efek acak biasanya <1010mengkonfirmasikan keyakinan saya bahwa colSums(ranef(model)$groups) ~ 0 But in toy model binomial (dan dalam model data binomial saya yang sebenarnya) beberapa jumlah efek acak berjumlah ~ 0,9.

Haruskah saya khawatir? Bagaimana saya menafsirkan ini?

Berikut adalah contoh mainan linier

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
}

Dalam hal ini colMeans selalu keluar <106

Ini adalah contoh mainan binomial (saya akan membagikan data aktual saya, tetapi sedang dikirim untuk publikasi dan saya tidak yakin apa kebijakan jurnal yang diposkan sebelumnya):


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 }

Sekarang colMeans kadang-kadang keluar di atas 0,3, dan jelas lebih tinggi, rata-rata daripada contoh linier.


3
Bisakah Anda memasukkan kode untuk mereproduksi contoh mainan itu di sini? Ini akan membantu dalam mengeksplorasi perilaku yang menarik ini.
Aaron meninggalkan Stack Overflow

Saya telah melihat perilaku yang sama dengan eksperimen saya juga. Dalam kasus gaussian ada jumlah hingga nol kendala, tetapi dalam kasus non-gaus tidak. Saya tidak yakin apakah jumlah-ke-nol adalah kondisi yang diperlukan, asalkan nilai efek acak yang diharapkan adalah nol. Mungkin dalam beberapa kasus mungkin membantu, dan tampaknya mudah untuk membuat kode dalam kasus gaussian sehingga ada di sana ... Semoga seseorang dengan pemahaman yang lebih baik masuk.
Jouni

Jawaban:


3

Karena kode @ Hemmo sedikit rusak di kotak "Bounty", saya menambahkan versi yang diformat ulang ini sebagai "komunitas wiki". Jika ini bukan penggunaan yang tepat dari wiki, saya minta maaf sebelumnya. Jangan ragu untuk menghapusnya.

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
Sepertinya pertanyaan itu masih belum mendapat perhatian yang cukup. Kesimpulan saya sendiri adalah bahwa sebenarnya tidak ada yang salah di sini, tidak ada kondisi jumlah-ke-nol, tetapi itu hanya terjadi dalam kasus-kasus gaussian di mana semuanya linier. Ekspektasi efek acak harus 0 adalah asumsi sebenarnya, bukan berarti jumlah sebenarnya dari efek yang diperkirakan adalah nol. Saya harus memberi penghargaan pada seseorang, jadi Anda dipersilakan. :)
Jouni

2
@Hemmo Yikes, sekarang saya merasa harus berkontribusi. Anda benar bahwa sebenarnya tidak ada yang salah. Jawaban singkatnya (yang saya harap akan ditulis tetapi tidak menemukan waktu untuk), adalah bahwa mean akan menjadi nol jika permukaan kemungkinannya adalah Gaussian. Secara informal, kita dapat "membuktikan" ini dengan mencatat bahwa kesalahan Gaussian * Efek acak Gaussian mengarah ke Gaussian lain. Ketika Anda memiliki glmm dengan fungsi kesalahan non-Gaussian (mis. Poisson dalam kasus Anda), maka permukaan kemungkinan bisa menjadi non-Gaussian, dan semua taruhan dimatikan. Semoga ini membantu.
David J. Harris
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.