Tổng các hiệu ứng ngẫu nhiên gần bằng 0 như thế nào trong GLMM (với lme4)


8

Tôi đang sử dụng lme4gói trong R để thực hiện một số mô hình hiệu ứng hỗn hợp logistic.
Sự hiểu biết của tôi là tổng của mỗi hiệu ứng ngẫu nhiên nên bằng không.

Khi tôi tạo mô hình hỗn hợp tuyến tính đồ chơi bằng cách sử dụng lmer, các hiệu ứng ngẫu nhiên thường < xác nhận niềm tin của tôi rằng mô hình nhị thức đồ chơi (và trong các mô hình dữ liệu nhị thức thực của tôi) một số tổng hiệu ứng ngẫu nhiên là ~ 0,9.1010colSums(ranef(model)$groups) ~ 0

Tôi có nên quan tâm không? Làm thế nào để tôi giải thích điều này?

Dưới đây là một ví dụ đồ chơi tuyến tính

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
}

Trong trường hợp này, colMeans luôn xuất hiện<106

Dưới đây là một ví dụ về đồ chơi nhị thức (tôi sẽ chia sẻ dữ liệu thực tế của mình, nhưng nó đang được gửi để xuất bản và tôi không chắc chính sách tạp chí nào được đăng trước đó):


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 }

Bây giờ, colMeans đôi khi xuất hiện trên 0,3 và trung bình cao hơn so với ví dụ tuyến tính.


3
Bạn có thể bao gồm mã để tái tạo các ví dụ đồ chơi ở đây? Nó sẽ giúp trong việc khám phá hành vi thú vị này.
Aaron rời Stack Overflow

Tôi đã thấy hành vi tương tự với các thí nghiệm của tôi là tốt. Trong trường hợp gaussian có một ràng buộc tổng bằng không, nhưng trong trường hợp không phải là gausian thì không. Tôi không chắc liệu tổng bằng không là điều kiện cần thiết, miễn là giá trị mong đợi của các hiệu ứng ngẫu nhiên bằng không. Nó có thể hữu ích trong một số trường hợp và dường như rất dễ viết mã trong trường hợp gaussian vì vậy nó ở đó ... Hy vọng ai đó hiểu rõ hơn về chuông.
Jouni

Câu trả lời:


3

Vì mã của @ Hemmo bị xáo trộn đôi chút trong hộp "Bounty", nên tôi thêm phiên bản được định dạng lại này thành "wiki cộng đồng". Nếu đây không phải là cách sử dụng wiki phù hợp, tôi xin lỗi trước. Hãy loại bỏ nó.

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
Chà, có vẻ như câu hỏi vẫn chưa nhận được đủ sự quan tâm. Kết luận của riêng tôi là thực sự không có gì sai ở đây, thực sự không có điều kiện tổng bằng không, nhưng nó chỉ xảy ra trong các trường hợp gaussian trong đó mọi thứ đều tuyến tính. Kỳ vọng của các hiệu ứng ngẫu nhiên phải là 0 là giả định thực sự, không phải là tổng các hiệu ứng ước tính thực tế bằng không. Tôi sẽ phải trao giải cho ai đó, vì vậy bạn được chào đón. :)
Jouni

2
@Hemmo Yike, bây giờ tôi cảm thấy mình thực sự nên đóng góp một cái gì đó. Bạn đúng rằng không có gì là thực sự sai. Câu trả lời ngắn gọn (mà tôi đã hy vọng viết lên nhưng không tìm thấy thời gian), đó là giá trị trung bình sẽ bằng không nếu bề mặt khả năng là Gaussian. Một cách không chính thức, chúng ta có thể "chứng minh" điều này bằng cách lưu ý rằng các lỗi Gaussian * Hiệu ứng ngẫu nhiên Gaussian dẫn đến một Gaussian khác. Khi bạn có glmm với chức năng lỗi không phải Gaussian (ví dụ Poisson trong trường hợp của bạn), thì bề mặt khả năng có thể trở thành không phải Gaussian và tất cả các cược đã tắt. Hi vọng điêu nay co ich.
David J. Harris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.