使用missRanger、glht、pool及tidy函数时出现新错误求助
问题根源
这个错误是由于broom.mixed、mice或multcomp包的版本更新导致的——2024年10月之后的版本中,pool()处理glht对象生成的结果结构发生了变化,当调用tidy(conf.int = TRUE)时,函数尝试合并的不同数据成分(比如系数估计值、置信区间)行数不匹配(一个是3行,一个是0行),触发了数据框合并的行数错误。该问题同时影响glm()和glmmTMB()模型,属于跨模型类型的工具链兼容性问题。
解决办法
1. 回滚到兼容版本
回滚到2024年10月之前的broom.mixed版本(比如v0.2.9.4),这个版本可以正确处理pool()后的glht对象:
# 检查当前版本 packageVersion("broom.mixed") # 安装旧版(需先安装devtools包) install.packages("devtools") devtools::install_version("broom.mixed", version = "0.2.9.4", repos = "http://cran.us.r-project.org")
如果回滚后仍有问题,可同时检查并回滚mice或multcomp到2024年10月之前的版本。
2. 手动构建整洁表格(绕过broom.mixed)
直接从pool()后的glht对象中提取数据,手动组装整洁表格:
# 假设已完成插补、建模、glht和pool步骤,得到pooled_glht对象 # 提取核心统计量 pooled_coef <- coef(pooled_glht) pooled_se <- sqrt(diag(vcov(pooled_glht))) pooled_ci <- confint(pooled_glht) pooled_p <- summary(pooled_glht)$test$pvalues # 构建整洁表格 tidy_result <- data.frame( term = names(pooled_coef), estimate = round(pooled_coef, 3), std.error = round(pooled_se, 3), conf.low = round(pooled_ci[, 1], 3), conf.high = round(pooled_ci[, 2], 3), p.value = round(pooled_p, 3) ) print(tidy_result)
3. 提交bug报告(针对最新版本)
如果需要使用包的最新功能,可前往broom.mixed的GitHub仓库提交bug报告,附上你的mtcars复现代码、包版本信息及错误日志,帮助开发者修复兼容性问题。
内容的提问来源于stack exchange,提问作者Tyler Lane
相关产品推荐
相关产品推荐

