检验混合模型中随机效应的显着性
Testing for the significance of a random effect in a mixed model
对于“交叉验证”,这可能 post 更好,所以我也会 post 它,所以如果这超出了这个讨论区的范围,我深表歉意。
我正在使用 lme4
包,想测试随机效应的显着性。我正在使用 RLRsim
包来生成 p 值的估计值,这与 lme4
文档中的建议一致。在 RLRsim
内,我将使用 exactRLRT
来检验随机斜率的显着性。
首先,我估计了完整模型:
data(sleepstudy, package = "lme4")
x <- lme4::lmer(Reaction ~ I(Days-4.5) + (I(Days-4.5)|Subject),
data = sleepstudy)
接下来,我想测试随机效应对I(Days-4.5)
的显着性
m0 <- update(x, . ~ . -(I(Days-4.5)|Subject) + (1|Subject))
m.slope <- update(x, . ~ . - (I(Days-4.5)|Subject) + (0 + I(Days-4.5)|Subject))
#test for subject specific slopes:
exactRLRT(m.slope, x, m0)
但是,这会导致错误消息 Random effects not independent - covariance(s) set to 0 under H0. exactRLRT can only test a single variance.
显然,当随机效应不独立时,我不能使用这种方法。我可以重新指定型号:
mA <- lme4::lmer(Reaction ~ I(Days-4.5) + (1|Subject) + (0 + I(Days-4.5)|Subject),
data = sleepstudy)
m0 <- update(mA, . ~ . - (0 + I(Days-4.5)|Subject))
m.slope <- update(mA, . ~ . - (1|Subject))
#test for subject specific slopes:
exactRLRT(m.slope, mA, m0)
这可以给我一个估计。然而,我的理解是 运行 作为独立的随机效应是一个与我最初估计的模型根本不同的模型,所以我确信输出的这个 p 值是无效的。
如果随机效应不被假定为独立的,我不确定我能做些什么(如果有的话)来测试随机效应的重要性。我在这里使用 sleepstudy
数据作为示例,但是当我将随机效应估计为独立时,我的实际数据集遇到了收敛问题。
任何对此的见解将不胜感激!
更新
Here 是我 post 在“交叉验证”上编辑的问题的 link。
它要慢得多,但参数引导应该适用于此。 (虽然在这种情况下它仍然很快。)
library(pbkrtest)
system.time(pp <- PBmodcomp(largeModel = x, smallModel = m0))
## user system elapsed
## 53.718 0.283 10.967
奇怪的是,它似乎在我的机器上使用了多个内核,我不认为它应该在不询问的情况下这样做...
> pp
Bootstrap test; time: 8.50 sec; samples: 1000; extremes: 0;
large : Reaction ~ I(Days - 4.5) + (I(Days - 4.5) | Subject)
Reaction ~ I(Days - 4.5) + (1 | Subject)
stat df p.value
LRT 42.114 2 7.164e-10 ***
PBtest 42.114 0.000999 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
对于“交叉验证”,这可能 post 更好,所以我也会 post 它,所以如果这超出了这个讨论区的范围,我深表歉意。
我正在使用 lme4
包,想测试随机效应的显着性。我正在使用 RLRsim
包来生成 p 值的估计值,这与 lme4
文档中的建议一致。在 RLRsim
内,我将使用 exactRLRT
来检验随机斜率的显着性。
首先,我估计了完整模型:
data(sleepstudy, package = "lme4")
x <- lme4::lmer(Reaction ~ I(Days-4.5) + (I(Days-4.5)|Subject),
data = sleepstudy)
接下来,我想测试随机效应对I(Days-4.5)
m0 <- update(x, . ~ . -(I(Days-4.5)|Subject) + (1|Subject))
m.slope <- update(x, . ~ . - (I(Days-4.5)|Subject) + (0 + I(Days-4.5)|Subject))
#test for subject specific slopes:
exactRLRT(m.slope, x, m0)
但是,这会导致错误消息 Random effects not independent - covariance(s) set to 0 under H0. exactRLRT can only test a single variance.
显然,当随机效应不独立时,我不能使用这种方法。我可以重新指定型号:
mA <- lme4::lmer(Reaction ~ I(Days-4.5) + (1|Subject) + (0 + I(Days-4.5)|Subject),
data = sleepstudy)
m0 <- update(mA, . ~ . - (0 + I(Days-4.5)|Subject))
m.slope <- update(mA, . ~ . - (1|Subject))
#test for subject specific slopes:
exactRLRT(m.slope, mA, m0)
这可以给我一个估计。然而,我的理解是 运行 作为独立的随机效应是一个与我最初估计的模型根本不同的模型,所以我确信输出的这个 p 值是无效的。
如果随机效应不被假定为独立的,我不确定我能做些什么(如果有的话)来测试随机效应的重要性。我在这里使用 sleepstudy
数据作为示例,但是当我将随机效应估计为独立时,我的实际数据集遇到了收敛问题。
任何对此的见解将不胜感激!
更新
Here 是我 post 在“交叉验证”上编辑的问题的 link。
它要慢得多,但参数引导应该适用于此。 (虽然在这种情况下它仍然很快。)
library(pbkrtest)
system.time(pp <- PBmodcomp(largeModel = x, smallModel = m0))
## user system elapsed
## 53.718 0.283 10.967
奇怪的是,它似乎在我的机器上使用了多个内核,我不认为它应该在不询问的情况下这样做...
> pp
Bootstrap test; time: 8.50 sec; samples: 1000; extremes: 0;
large : Reaction ~ I(Days - 4.5) + (I(Days - 4.5) | Subject)
Reaction ~ I(Days - 4.5) + (1 | Subject)
stat df p.value
LRT 42.114 2 7.164e-10 ***
PBtest 42.114 0.000999 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1