[英]Do I need to set refit=FALSE when testing for random effects in lmer() models with anova()?
我目前正在测试是否应该在我的lmer模型中包含某些随机效果。 我使用anova函数。 到目前为止,我的程序是使用REML=TRUE
(默认选项)调用lmer()
函数的模型。 然后我在两个模型上调用anova()
,其中一个确实包含要测试的随机效果而另一个没有。 然而,众所周知, anova()
函数使用ML重新修改模型,但在新版本的anova()
您可以通过设置选项refit=FALSE
来阻止anova()
这样做。 为了测试随机效果,我应该在调用anova() or not?
设置refit=FALSE
anova() or not?
(如果我设置refit=FALSE
,p值往往更低。当我设置refit=FALSE
时,p值是反保守的吗?)
方法1:
mod0_reml <- lmer(x ~ y + z + (1 | w), data=dat)
mod1_reml <- lmer(x ~ y + z + (y | w), data=dat)
anova(mod0_reml, mod1_reml)
这将导致anova()
用ML
而不是REML
重新模型化。 (更新版本的anova()
函数也会输出有关此信息。)
方法2:
mod0_reml <- lmer(x ~ y + z + (1 | w), data=dat)
mod1_reml <- lmer(x ~ y + z + (y | w), data=dat)
anova(mod0_reml, mod1_reml, refit=FALSE)
这将导致anova()
在原始模型上执行计算,即REML=TRUE
。
为了测试我是否应该包含随机效应,这两种方法中的哪一种是正确的?
谢谢你的帮助
一般来说,我会说在这种情况下使用refit=FALSE
是合适的,但让我们继续尝试模拟实验。
首先将没有随机斜率的模型拟合到sleepstudy
数据集,然后模拟此模型中的数据:
library(lme4)
mod0 <- lmer(Reaction ~ Days + (1|Subject), data=sleepstudy)
## also fit the full model for later use
mod1 <- lmer(Reaction ~ Days + (Days|Subject), data=sleepstudy)
set.seed(101)
simdat <- simulate(mod0,1000)
现在使用完整模型和简化模型重新调整null数据,并使用和不使用refit=FALSE
保存anova()
生成的p值的分布。 这基本上是零假设的参数自举测试; 我们想看看它是否具有适当的特征(即p值的均匀分布)。
sumfun <- function(x) {
m0 <- refit(mod0,x)
m1 <- refit(mod1,x)
a_refit <- suppressMessages(anova(m0,m1)["m1","Pr(>Chisq)"])
a_no_refit <- anova(m0,m1,refit=FALSE)["m1","Pr(>Chisq)"]
c(refit=a_refit,no_refit=a_no_refit)
}
我喜欢plyr::laply
以方便使用,尽管你可以很容易地使用for
循环或其他*apply
方法之一。
library(plyr)
pdist <- laply(simdat,sumfun,.progress="text")
library(ggplot2); theme_set(theme_bw())
library(reshape2)
ggplot(melt(pdist),aes(x=value,fill=Var2))+
geom_histogram(aes(y=..density..),
alpha=0.5,position="identity",binwidth=0.02)+
geom_hline(yintercept=1,lty=2)
ggsave("nullhist.png",height=4,width=5)
alpha = 0.05的I类错误率:
colMeans(pdist<0.05)
## refit no_refit
## 0.021 0.026
你可以看到,在这种情况下,这两个程序给出了几乎相同的答案,并且这两个程序都是非常保守的,因为众所周知的原因与假设检验的空值在其可行空间的边界上有关。 对于测试单个简单随机效应的特定情况,将p值减半给出了合适的答案(参见Pinheiro和Bates 2000等); 这实际上似乎在这里给出了合理的答案,虽然它没有真正合理,因为在这里我们放弃了两个随机效应参数(斜率的随机效应以及斜率和截距随机效应之间的相关性):
colMeans(pdist/2<0.05)
## refit no_refit
## 0.051 0.055
其他要点:
pbkrtest
包中的PBmodcomp
函数进行类似的练习。 RLRsim
软件包精确地设计用于关于随机效应项的零假设的快速随机化(参数引导)测试,但在这种稍微复杂的情况下似乎不起作用 chi^2_0
(点质量为0)和a之间的混合chi^2_n
分布(其中n
可能是 2,但我不确定这个几何)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.