如何使用lme4将没有随机效应的模型与具有随机效应的模型进行比较?

时间:2014-06-03 16:04:12

标签: r lme4 mixed-models nlme

我可以使用nlme包中的gls()来构建没有随机效果的mod1。 然后我可以将使用AIC的mod1与使用lme()构建的mod2进行比较,其中包含随机效果。

mod1 = gls(response ~ fixed1 + fixed2, method="REML", data)
mod2 = lme(response ~ fixed1 + fixed2, random = ~1 | random1, method="REML",data)
AIC(mod1,mod2)

对于lme4包有没有类似于gls()的东西,它允许我构建没有随机效果的mod3,并将它与使用lmer()构建的mod4进行比较,其中包含随机效果?

mod3 = ???(response ~ fixed1 + fixed2, REML=T, data)
mod4 = lmer(response ~ fixed1 + fixed2 + (1|random1), REML=T, data)
AIC(mod3,mod4)

1 个答案:

答案 0 :(得分:28)

使用现代(> 1.0)版本的lme4,您可以直接比较lmer适合与相应的lm模型,使用ML ---很难为没有随机效应的模型提出“REML标准”的合理模拟(因为它涉及将所有固定效应设置为零的数据的线性变换... )

您应该知道,有和没有方差分量的模型之间存在信息理论比较的理论问题:有关详细信息,请参阅GLMM FAQ

library(lme4)
fm1 <- lmer(Reaction~Days+(1|Subject),sleepstudy, REML=FALSE)
fm0 <- lm(Reaction~Days,sleepstudy)
AIC(fm1,fm0)
##     df      AIC
## fm1  4 1802.079
## fm0  3 1906.293

我更喜欢这种格式的输出(delta-AIC而不是原始AIC值):

bbmle::AICtab(fm1,fm0)
##     dAIC  df
## fm1   0.0 4 
## fm0 104.2 3 

为了测试,让我们模拟没有随机效应的数据(我必须尝试几个随机数种子才能得到一个例子,其中主题间std dev实际上估计为零):

rr <- simulate(~Days+(1|Subject),
               newparams=list(theta=0,beta=fixef(fm1),
                         sigma=sigma(fm1)),
               newdata=sleepstudy,
               family="gaussian",
               seed=103)[[1]]
ss <- transform(sleepstudy,Reaction=rr)
fm1Z <- update(fm1,data=ss)
VarCorr(fm1Z)
##  Groups   Name        Std.Dev.
##  Subject  (Intercept)  0.000  
##  Residual             29.241
fm0Z <- update(fm0,data=ss)
all.equal(c(logLik(fm0Z)),c(logLik(fm1Z)))  ## TRUE