如何在R中合并rlmer稳健混合模型的多重插补结果与置信区间
解决方案
1. 解决自由度为NaN的问题
mice::pool()出现自由度NaN的核心原因是无法自动从rlmerMod类对象中提取到完整数据的残差自由度,你只需要在调用pool()时手动传入dfcom参数即可。dfcom的计算规则为:有效样本量 - 固定效应项的数量,你的示例数据中有效样本量为30,固定效应共5项,因此取dfcom=25,如果是你的真实数据,按照实际样本量调整即可。
示例代码:
library(broom.mixed) # 手动指定完整数据自由度 pool.fit <- pool(m, dfcom = 25) # 此时可以正常输出置信区间、p值等结果 summary(pool.fit, conf.int = TRUE)
运行后就不会再出现NaN的情况。
2. 解决tbl_regression()报错的问题
gtsummary目前对mira类(mice运行模型后的返回类)+rlmerMod的组合适配性较差,不要直接将m传入tbl_regression(),改为传入已经pool好的结果即可:
library(gtsummary) # 先处理好pool结果,再传入tbl_regression pool.fit %>% tidy(conf.int = TRUE) %>% tbl_regression()
如果需要自定义展示内容,也可以自己构造结果数据框传入tbl_regression()的estimate、pvalue等对应参数。
额外优化建议
- 多重插补的插补次数
m建议设置为至少等于缺失数据的比例,你示例中m=2太小,会增大结果的误差,真实数据建议调整m到5以上。 - 如果需要更严谨的自由度计算,也可以用
mitml包替代mice自带的pool流程,对稳健混合模型的适配性更好:
library(mitml) # 转换mice插补结果为mitml格式 imp_list <- mitml::mids2mitml.list(imp) # 运行模型 fit <- with(imp_list, rlmer(y ~ 1 + time * group + sex + (1 | id), REML=F)) # 合并结果,自动计算自由度 pool.fit2 <- testModels(fit, method = "D1")
内容的提问来源于stack exchange,提问作者MDSF
相关产品推荐
相关产品推荐

