使用mice插补缺失值后观测数多于原始数据集的问题排查
问题原因
- 你在调用
mice()函数时设置了参数m=5,该参数的作用是生成5个相互独立的缺失值插补数据集,这是多重插补方法的标准设置。 - 后续调用
complete()导出插补结果时使用了action="long"参数,该参数会将所有m个插补数据集按行堆叠成长格式输出,因此最终得到的数据集行数为原始行数27727 * 5 = 138635,属于符合预期的正常行为,并非代码运行出错。
修复方案
根据你的实际使用需求选择对应处理方式即可:
- 如果你只需要单个插补后的数据集开展后续分析,将
complete()的action参数修改为对应插补集的序号即可,比如要取第一个插补集,代码修改为:
此时输出的impdat <- complete(tempData, action=1)impdat行数和原始数据集完全一致。 - 如果你要遵循多重插补的标准统计流程,不建议手动提取单个插补集或长格式数据,应该使用
with()函数对每个插补集分别建模,再用pool()函数合并多个插补集的统计结果,参考代码如下(以线性回归为例):# 对每个插补数据集拟合模型 fit <- with(tempData, lm(k7 ~ k17 + d1a1x + bmgc23g)) # 合并5个插补集的模型结果 pooled_fit <- pool(fit) # 查看合并后的显著性检验结果 summary(pooled_fit) - 如果你确实需要用到长格式的插补结果,可以通过数据集中自动生成的
.imp列区分不同的插补集,该列取值1~5分别对应5个插补结果,每个分组的行数均为27727即可确认数据正常。
内容的提问来源于stack exchange,提问作者J33T
相关产品推荐
相关产品推荐

