如何在R中对多重插补数据的线性混合模型做III型ANOVA分析?
多重插补下线性混合模型的固定效应显著性检验方案
核心思路:用mitml::TestModels的D3 LRT做模型比较
目前没有直接支持多重插补混合模型的III型ANOVA工具,嵌套模型比较是可行的替代方案——通过对比包含目标效应的全模型与去掉该效应的简化模型,用D3似然比检验(LRT)判断效应是否显著。
具体操作步骤(以lme4的lmer模型为例)
假设你已用mice生成多重插补数据集(mira对象),并转换为mitml对象(通过mitml::complete(mira_obj, "all")):
拟合全模型
示例模型代码:library(mitml) library(lme4) # 给所有插补数据集拟合全模型,必须设置REML=FALSE(LRT要求ML拟合) full_model <- with(data = mitml_obj, expr = lmer(y ~ x1 + x2 + (1|group), REML = FALSE))拟合去掉目标效应的简化模型
要检验x1的显著性,就拟合剔除x1的模型:reduced_model_x1 <- with(data = mitml_obj, expr = lmer(y ~ x2 + (1|group), REML = FALSE))执行D3 LRT检验
test_x1 <- TestModels(full_model, reduced_model_x1, method = "D3") print(test_x1)输出中的p值即为该主效应的显著性结果。
批量检验所有主效应
针对多个主效应,可通过循环批量处理:# 列出所有需检验的固定效应(排除截距项) effects <- c("x1", "x2") results <- list() for(eff in effects){ # 构造简化模型的公式 reduced_formula <- as.formula(paste0("y ~ ", paste(setdiff(effects, eff), collapse = " + "), " + (1|group)")) reduced_model <- with(data = mitml_obj, expr = lmer(reduced_formula, REML = FALSE)) test_res <- TestModels(full_model, reduced_model, method = "D3") results[[eff]] <- test_res } # 查看所有检验结果 lapply(results, print)
关键注意事项
- 必须用ML拟合模型(
REML=FALSE),REML下的LRT结果不具备统计可靠性。 - 交互效应的检验逻辑一致:全模型保留交互项,简化模型移除交互项即可。
- 若使用
nlme::lme拟合模型,仅需将lmer替换为lme,并设置method="ML",其余步骤完全相同。
内容的提问来源于stack exchange,提问作者Alexandra Chapdelaine
相关产品推荐
相关产品推荐

