如何利用MICE获取单个变量var_1的合并估计值?
获取MICE插补后var_1的合并估计值
下面两种方法可以帮你直接得到var_1的合并估计值,不用通过线性模型:
方法1:直接从插补对象提取值并合并
MICE的插补结果give_imp里,$imp列表存储了所有缺失值的插补结果。你可以直接提取var_1的所有插补值,再计算合并后的估计:
library(mice) library(tidyverse) # 提取所有插补数据集中的var_1插补值 var_1_imps <- give_imp$imp$var_1 # 方式一:简单合并——直接取所有插补值的均值 simple_mean <- mean(unlist(var_1_imps)) # 方式二:用Rubin规则严谨合并(适合需要统计推断的场景) # 先算每个插补数据集的var_1均值 imp_means <- apply(var_1_imps, 2, mean) # 插补内方差:各数据集var_1方差的均值 within_var <- mean(apply(var_1_imps, 2, var)) # 插补间方差:各插补均值的方差 between_var <- var(imp_means) # Rubin规则的合并方差 total_var <- within_var + between_var + between_var / ncol(var_1_imps) # 合并均值就是各插补均值的平均 rubin_mean <- mean(imp_means) # 输出结果 cat("简单合并均值:", round(simple_mean, 3), "\n") cat("Rubin规则合并均值:", round(rubin_mean, 3), "\n") cat("合并方差:", round(total_var, 3), "\n")
方法2:从完整数据集提取计算
用complete()函数生成所有插补后的完整数据集,再提取var_1计算合并值:
# 生成所有插补后的完整数据集 all_complete_dfs <- complete(give_imp, "all") # 提取每个数据集的var_1均值,再算整体均值 var_1_means <- map_dbl(all_complete_dfs, ~mean(.x$var_1, na.rm = TRUE)) combined_mean <- mean(var_1_means) # 同样用Rubin规则算方差 within_var <- mean(map_dbl(all_complete_dfs, ~var(.x$var_1, na.rm = TRUE))) between_var <- var(var_1_means) total_var <- within_var + between_var + between_var / length(var_1_means) cat("合并后的var_1均值:", round(combined_mean, 3), "\n") cat("合并方差:", round(total_var, 3), "\n")
如果只是需要一个单一的估计值(比如均值),简单取平均就够用;如果需要做统计推断(比如置信区间),推荐用Rubin规则计算合并方差,这样结果更严谨。
内容的提问来源于stack exchange,提问作者Seafra Barrett
相关产品推荐
相关产品推荐

