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

使用MICE进行多重插补得到行数为预期两倍,咨询代码错误原因

问题原因及修改方案
  • 你的代码本身就会触发两次全量插补:你设置了for (group in 0:1)的循环结构,会先后遍历0和1两个值,循环体执行2次。
  • 每次循环都会基于全量imputed_df生成10重插补的21200条结果,再通过rbind拼接到最终数据框里,两次累加就得到了42400条数据,和你的观测结果完全吻合。
  • 你在循环体内完全没有用到group变量对数据集做筛选,所以两次插补的结果是完全重复的,你截取前半部分的操作本质就是只保留了第一次循环的输出。

如果你不需要分组插补

直接删除外层for循环即可,修正后代码如下:

predictor.selection <- quickpred(imputed_df, mincor=0.1, minpuc=0.5,method='pearson',
                                   exclude=c("idme"))
imputation <- mice(imputed_df, m=10, method="pmm", visitSequence="monotone",
                     predictorMatrix = predictor.selection)
long.imputation = complete(imputation, action="long")

如果你本来计划按group字段分组分别插补

需要在循环中先筛选对应分组的子集再执行插补,避免重复计算全量数据,参考修改代码:

# 先初始化结果对象
long.imputation <- data.frame()
for (group in 0:1) {
  # 筛选当前分组的数据集
  sub_df <- imputed_df[imputed_df$group == group, ]
  predictor.selection <- quickpred(sub_df, mincor=0.1, minpuc=0.5,method='pearson',
                                   exclude=c("idme"))
  imputation <- mice(sub_df, m=10, method="pmm", visitSequence="monotone",
                     predictorMatrix = predictor.selection)
  sub_long <- complete(imputation, action="long")
  # 可选:新增group列标记数据所属分组
  sub_long$group <- group
  long.imputation = rbind(long.imputation, sub_long)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:18:03