基于mice包的合并统计量计算与假设检验技术咨询
多重插补(mice包)常见操作问题解答
前置操作说明
已导入示例数据集并完成多重插补,代码如下:
data(mtcars) library(mice) imp <- mice(mtcars, seed=123, m=5, maxit=10)
1. 计算合并均值(pooled means)与合并频数(pooled frequencies)
合并均值(针对连续变量如disp、hp)
用with()在每个插补数据集上计算均值,再通过pool()合并结果:
# 在各插补数据集上计算disp、hp的均值 fit_mean <- with(imp, data.frame(disp_mean = mean(disp), hp_mean = mean(hp))) # 合并结果并查看 pooled_mean <- pool(fit_mean) summary(pooled_mean)
输出结果里的estimate列就是对应变量的合并均值。
合并频数(针对分类变量如vs、am)
同样通过with()生成各插补数据集的频数表,再合并:
# 计算vs的频数 fit_freq <- with(imp, table(vs)) pooled_freq <- pool(fit_freq) summary(pooled_freq) # 若需要合并比例,先转成比例再合并 fit_prop <- with(imp, prop.table(table(vs))) pooled_prop <- pool(fit_prop) summary(pooled_prop)
2. 执行合并t检验或卡方检验(必须使用with())
with()是mice包处理多重插补数据的核心工具——它会把指定的统计操作逐一应用到每个插补好的数据集,生成包含m个分析结果的对象,再用pool()合并得到最终的合并统计量。
合并t检验(示例:检验am分组下disp的均值差异)
# 在各插补数据集上执行t检验 fit_t <- with(imp, t.test(disp ~ am)) # 合并检验结果 pooled_t <- pool(fit_t) summary(pooled_t)
输出中的p.value即为合并后的检验p值,可用于判断组间均值差异是否显著。
合并卡方检验(示例:检验vs与am的关联性)
# 在各插补数据集上执行卡方检验 fit_chisq <- with(imp, chisq.test(table(vs, am))) # 合并检验结果 pooled_chisq <- pool(fit_chisq) summary(pooled_chisq) # 若单元格期望频数较小,改用Fisher精确检验 fit_fisher <- with(imp, fisher.test(table(vs, am))) pooled_fisher <- pool(fit_fisher) summary(pooled_fisher)
内容的提问来源于stack exchange,提问作者user19745561
相关产品推荐
相关产品推荐

