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

如何将已多重插补数据集转为mice可识别格式以分插补项运行回归?

解决方法:分插补项运行回归并适配mice工作流

方法一:直接分组跑回归并转换为mira对象(推荐)

无需将数据集转换成mids格式,直接按impID分组拟合回归,再转为mice可识别的mira对象,就能用mice工具处理结果:

library(dplyr)
library(mice)

# 按插补ID分组,为每个插补数据集单独拟合回归模型
model_list <- data %>%
  group_by(impID) %>%
  do(model = lm(x ~ y + z, data = .)) %>%
  pull(model)

# 转换为mice兼容的mira对象
mira_result <- as.mira(model_list)

# 查看每个插补的回归结果
summary(mira_result)

# 合并5次插补的回归结果(遵循mice标准合并逻辑)
pooled_result <- pool(mira_result)
summary(pooled_result)

方法二:将现有数据集转换为mids对象

如果需要完全适配mice的原生mids格式,可按以下步骤操作:

  1. 构建原始缺失数据集:识别每个clientID中未被插补的变量(值无变化的变量),将被插补的变量设为NA:
original_data <- data %>%
  group_by(clientID) %>%
  summarize(
    x = if(n_distinct(x) > 1) NA else first(x),
    y = if(n_distinct(y) > 1) NA else first(y),
    z = if(n_distinct(z) > 1) NA else first(z)
  )
  1. 整理插补值矩阵:为每个有缺失的变量,整理出5次插补的结果矩阵:
# 整理x变量的插补值矩阵
imp_x <- data %>%
  filter(clientID %in% original_data$clientID[is.na(original_data$x)]) %>%
  arrange(clientID, impID) %>%
  tidyr::pivot_wider(names_from = impID, values_from = x) %>%
  select(-clientID) %>%
  as.matrix()

# 整理y变量的插补值矩阵
imp_y <- data %>%
  filter(clientID %in% original_data$clientID[is.na(original_data$y)]) %>%
  arrange(clientID, impID) %>%
  tidyr::pivot_wider(names_from = impID, values_from = y) %>%
  select(-clientID) %>%
  as.matrix()

# 组合成mice要求的imp列表结构
imp_list <- list(x = imp_x, y = imp_y)
  1. 创建mids对象:
mids_obj <- mice::make.mids(data = original_data, imp = imp_list, m = 5)

# 现在可使用mice的with函数运行回归
regs <- with(mids_obj, lm(x ~ y + z))
summary(regs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:07:43