使用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
相关产品推荐
相关产品推荐

