You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R语言的mice包中获取整合后的插补数据集而非合并估计值?

如何在R语言的mice包中获取整合后的插补数据集而非合并估计值?

我完全理解你的困惑——刚接触mice的时候,很容易被“多重插补要合并估计而非用单一数据集”的思路框住,但你需要单一插补数据集来做质量评估和方法对比的需求非常合理。下面我结合你的例子,给你几种符合mice插补逻辑的实现方式:

一、先明确核心:pooled估计无法生成插补数据集

首先要澄清你最后的疑问:pool()得到的合并估计值是模型的系数结果,没法直接反推出原始数据的插补值。插补后的原始数据都存在mice生成的mids对象里,我们需要从这个对象入手处理。

二、方法1:提取单个插补数据集(最简单直接)

如果你只是需要一个符合mice插补逻辑的单一数据集,不需要整合多个插补结果,可以直接从mids对象中提取任意一个插补好的数据集。这种方法保留了mice的插补模型逻辑,只是放弃了多重插补的不确定性处理,非常适合用来和其他插补方法做对比。

结合你的示例代码:

library(magrittr)
library(mice)

# 先生成mids插补对象
mids_obj <- nhanes %>% mice(seed = 123, print = FALSE)

# 提取第3个插补数据集(action可以取1到m的任意整数,m是你设置的插补次数,默认是5)
single_imputed <- complete(mids_obj, action = 3)

三、方法2:整合多个插补数据集(更稳健)

如果你想整合m个插补数据集的结果,生成一个综合的插补数据集,要注意不能简单对所有插补值取平均(尤其是分类变量,比如你的agehyp)。我们可以针对变量类型选择合适的整合方式:

  • 分类变量:取众数(出现次数最多的插补值)
  • 数值变量:取中位数(比均值更稳健,避免极端插补值的影响)

下面是具体的代码实现:

library(dplyr)

# 把所有m个插补数据集转成长格式(每个观测的m个插补值会按行排列)
long_imputed <- complete(mids_obj, action = "long")

# 编写函数整合每个观测的插补值
aggregate_imputations <- function(data) {
  data %>%
    group_by(.id) %>%  # 按原始观测的ID分组
    summarise(
      # 分类变量取众数
      age = names(which.max(table(age))),
      hyp = names(which.max(table(hyp))),
      # 数值变量取中位数
      bmi = median(bmi, na.rm = TRUE),
      chl = median(chl, na.rm = TRUE),
      .groups = "drop"
    ) %>%
    # 把分类变量转回原始数据类型(比如整数)
    mutate(
      age = as.integer(age),
      hyp = as.integer(hyp)
    )
}

# 得到最终的整合插补数据集
final_imputed <- aggregate_imputations(long_imputed)

四、方法3:用均值整合(适合纯数值变量场景)

如果你的数据全是数值变量,也可以直接用mice内置的action="mean"参数,对每个缺失值的m个插补值取均值:

mean_imputed <- complete(mids_obj, action = "mean")

# 但如果有分类变量,需要额外处理(比如四舍五入转成整数)
mean_imputed <- mean_imputed %>%
  mutate(
    age = as.integer(round(age)),
    hyp = as.integer(round(hyp))
  )

⚠️ 注意:这种方法对分类变量不太友好,因为均值可能不是合法的类别值,四舍五入会损失插补的合理性,所以更推荐方法2。

最后提醒

虽然mice的设计初衷是通过多重插补合并估计来处理缺失值的不确定性,但你用来评估插补质量、对比其他方法的场景下,生成单一插补数据集是完全可行的——只要你清楚这样做会丢失不确定性信息,仅用于效果对比即可。

备注:内容来源于stack exchange,提问作者user13028630

火山引擎 最新活动