如何在R中同时检验多层模型中多个随机斜率的显著性?
同时检验两个随机斜率显著性的方法
在R中要同时检验sl.c和es.c的随机斜率是否显著(即它们的班级间变异及协方差是否整体不为0),可以用以下两种可靠的方法,结果能和MPlus的同时检验对齐:
1. 似然比检验(LRT)
似然比检验通过比较包含两个随机斜率的原模型和仅含随机截距的嵌套模型的拟合差异来判断显著性。注意必须用ML(最大似然)拟合模型,不能用REML,否则检验结果不可靠:
# 用ML重新拟合原模型 mod3_ml <- lmer( social_t1 ~ 1 + sex + mig + sl.c + es.c + attitude + (1 + sl.c + es.c|class), data = kommschreib_ak, na.action = na.exclude, REML = FALSE ) # 拟合仅含随机截距的嵌套模型(去掉sl.c和es.c的随机斜率) mod_null_ml <- lmer( social_t1 ~ 1 + sex + mig + sl.c + es.c + attitude + (1|class), data = kommschreib_ak, na.action = na.exclude, REML = FALSE ) # 执行似然比检验 anova(mod_null_ml, mod3_ml)
输出结果里的卡方统计量对应的p值,就是同时检验两个随机斜率(含它们的协方差)是否显著的结果。这里自由度为3,因为原模型比嵌套模型多了3个参数:sl.c的随机斜率方差、es.c的随机斜率方差,以及二者的协方差。
2. 参数Bootstrap检验(更准确)
当样本量较小或随机效应方差接近0时,似然比检验的卡方分布假设可能不成立,这时候用参数Bootstrap能得到更准确的p值,需要用到pbkrtest包:
# 先安装并加载包(如果没装过) # install.packages("pbkrtest") library(pbkrtest) # 执行Bootstrap检验,nsim是模拟次数,次数越多结果越稳定 pb_result <- PBmodcomp(mod3_ml, mod_null_ml, nsim = 1000) # 查看结果 summary(pb_result)
输出中的Pr(>PB)就是Bootstrap得到的p值,这个结果比似然比检验更稳健,尤其适合小样本场景。
为什么单独检验和同时检验结果有差异?因为单独检验时只考虑单个随机斜率的变异,忽略了两个随机斜率之间的协方差;而同时检验是判断这两个随机效应的整体变异结构是否显著,和MPlus的检验逻辑一致,所以结果会更匹配。
内容的提问来源于stack exchange,提问作者sunny
相关产品推荐
相关产品推荐

