You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:45:01