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

MICE中分类变量的插补诊断方法咨询

解决mice包分类变量插补后分布对比的问题

mice包本身确实没有像miceRanger的plotDistributions()那样,直接一键对比原始数据与插补后分类变量分布的内置函数,需要自定义实现,但有几种简单高效的方式:

方法1:用ggplot2手动绘制对比条形图

先通过mice::complete()提取所有插补后的数据集,将原始数据和插补数据合并,标记来源后用ggplot2绘制分组条形图:

library(mice)
library(ggplot2)
library(dplyr)

# 示例数据
data(nhanes)
imp <- mice(nhanes, m = 5, printFlag = FALSE)

# 提取原始数据并标记来源
raw_data <- nhanes %>%
  mutate(data_source = "原始数据", .before = everything())

# 提取所有插补数据集并合并
imputed_datasets <- lapply(1:imp$m, function(i) {
  complete(imp, action = i) %>%
    mutate(data_source = paste0("插补集", i), .before = everything())
}) %>% bind_rows()

# 合并原始与插补数据
combined_data <- bind_rows(raw_data, imputed_datasets)

# 绘制分类变量(比如hyp)的分布对比
ggplot(combined_data, aes(x = hyp, fill = data_source)) +
  geom_bar(position = "dodge") +
  labs(title = "原始数据与插补数据的hyp变量分布对比",
       x = "高血压状态", y = "频数") +
  theme_minimal()

方法2:用基础绘图+比例计算对比

如果不想依赖ggplot2,也可以用R基础绘图,先计算原始数据和插补数据中分类变量的比例,再绘制对比图:

# 计算原始数据比例
raw_prop <- prop.table(table(nhanes$hyp))

# 计算各插补集的比例
imp_props <- lapply(1:imp$m, function(i) {
  prop.table(table(complete(imp, i)$hyp))
})

# 整理绘图数据
plot_data <- cbind(
  data.frame(prop = raw_prop, source = "原始数据", category = names(raw_prop)),
  do.call(rbind, lapply(1:length(imp_props), function(i) {
    data.frame(prop = imp_props[[i]], source = paste0("插补集", i), category = names(imp_props[[i]]))
  }))
)

# 绘制分组条形图
barplot(
  t(matrix(plot_data$prop, nrow = length(unique(plot_data$category)))),
  beside = TRUE,
  names.arg = unique(plot_data$category),
  col = c("blue", rep("gray", imp$m)),
  legend.text = c("原始数据", paste0("插补集", 1:imp$m)),
  main = "hyp变量原始与插补分布比例对比",
  xlab = "高血压状态", ylab = "比例"
)

方法3:封装成自定义函数复用

如果需要多次对比不同分类变量,可以把逻辑封装成函数,方便调用:

plot_cat_dist_mice <- function(imp_obj, var_name) {
  library(dplyr)
  library(ggplot2)
  
  raw_data <- imp_obj$data %>%
    mutate(data_source = "原始数据", .before = everything())
  
  imputed_datasets <- lapply(1:imp_obj$m, function(i) {
    complete(imp_obj, action = i) %>%
      mutate(data_source = paste0("插补集", i), .before = everything())
  }) %>% bind_rows()
  
  combined_data <- bind_rows(raw_data, imputed_datasets)
  
  ggplot(combined_data, aes(x = .data[[var_name]], fill = data_source)) +
    geom_bar(position = "dodge") +
    labs(title = paste(var_name, "原始与插补数据分布对比"),
         x = var_name, y = "频数") +
    theme_minimal()
}

# 使用示例
plot_cat_dist_mice(imp, "hyp")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:40:33