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

如何在mice插补的mids数据集上适配twang包的mnps函数?

在mice插补的mids数据集上使用twang的mnps函数(多分类处理变量)

当然可以,不过mnps本身不直接支持mids对象,你需要先把插补后的多个完整数据集提取出来,逐个运行mnps,再合并结果。下面是针对你的示例数据的完整流程:

步骤1:加载所需包并准备数据

先补充加载twang包,同时确保你的多分类处理变量是因子类型(mnps需要识别分类结构):

library(mice)
library(ggplot2)
library(twang)
set.seed(123)

data(osteoarthritis)
df <- osteoarthritis

# 假设你的处理变量是多分类(示例中以某变量转因子为例,替换为你的实际处理变量)
df$treat <- as.factor(df$treat)

# 生成缺失值并完成插补
osteoarthritis_imp <- mice(df, 
                           m = 5,
                           maxit = 5, 
                           method = "pmm",
                           printFlag = FALSE)

步骤2:提取所有插补后的完整数据集

用mice的complete()函数把m个插补数据集提取为列表格式:

imputed_datasets <- complete(osteoarthritis_imp, "all")

步骤3:对每个数据集运行mnps

循环遍历每个插补数据集,拟合mnps模型(适配多分类处理变量):

# 初始化列表存储每个插补模型结果
mnps_models <- list()

for (i in 1:length(imputed_datasets)) {
  mnps_models[[i]] <- mnps(
    # 替换为你的处理变量+协变量公式
    treat = treat ~ age + sex + bmi + pain,
    data = imputed_datasets[[i]],
    estimand = "ATE", # 可选ATE/ATT等因果估计量
    verbose = FALSE # 关闭冗余输出
  )
}

步骤4:检查平衡与合并结果

检查单个模型的平衡情况

可以查看任意一个插补模型的协变量平衡表:

# 查看第一个插补模型的平衡结果
bal.table(mnps_models[[1]])

合并多插补模型的结果

如果需要计算合并后的因果效应,可以用mitools包整合多个插补模型的估计值:

install.packages("mitools")
library(mitools)

# 将每个模型的权重转为imputationList格式
weight_list <- imputationList(lapply(mnps_models, weights))

# 示例:用加权回归估计处理效应并合并结果
fit_list <- lapply(seq_along(imputed_datasets), function(i) {
  lm(outcome ~ treat, data = imputed_datasets[[i]], weights = weights(mnps_models[[i]]))
})
# 合并多插补的回归结果
fit_combine <- MIcombine(fit_list)
summary(fit_combine)

关键注意事项

  • 处理变量必须是因子类型,mnps才能正确识别多分类结构
  • 插补模型要包含处理变量和所有协变量,保证插补的合理性
  • 多插补结果合并时必须考虑插补间的变异,MIcombine会自动计算合并后的标准误

内容的提问来源于stack exchange,提问作者Clifton Pinto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:12:40