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

使用R中mice包处理插补数据时pool()函数报错问题

解决mice插补后pool()函数报错问题

错误原因

你当前的代码错误在于:

  • complete(imp, "long")生成的是包含10个插补数据集的长格式数据(通过.imp列区分不同插补组),但直接执行with(imp_compl_all, lm(...))会把所有10组数据合并,只拟合单个线性模型。
  • pool()函数要求输入的是mira类对象(包含m个分别在不同插补数据集上拟合的模型),而你传入的是单个lm模型的内部qr对象,因此触发No tidy method for objects of class qr错误。

解决方案

方法一:直接使用mice包的标准流程(推荐)

不需要生成imp_compl_all,直接在原始imp对象上用with()函数,它会自动为每个插补数据集拟合模型,返回符合要求的mira对象:

library(mice)

# 直接在imp插补对象上拟合模型,自动遍历10个插补数据集
model1_coc_ger <- with(imp, lm(CocAmount ~ education, subset = Country == "Germany"))

# 合并多模型结果
pool.fit <- pool(model1_coc_ger)

# 查看汇总结果
summary(pool.fit)

方法二:基于long格式数据手动处理

如果必须使用imp_compl_all,需要按.imp列分组,为每个插补数据集单独拟合模型,再转换为mira对象:

library(mice)
library(dplyr)

# 按.imp分组,为每个插补数据集拟合lm模型
model_list <- imp_compl_all %>%
  group_by(.imp) %>%
  group_map(~ lm(CocAmount ~ education, data = .x, subset = Country == "Germany"))

# 将模型列表转换为mira类对象
mira_obj <- as.mira(model_list)

# 合并模型结果
pool.fit <- pool(mira_obj)

# 查看汇总结果
summary(pool.fit)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:32:05