使用MuMIn对模型平均对象计算置信区间时出现'format.perc'未找到错误的排查求助
MuMIn对模型平均对象计算置信区间时出现'format.perc'未找到错误的排查求助
问题背景
我最近在使用MuMIn包处理模型平均结果时遇到了一个棘手的错误:当我对MuMIn::model.avg()生成的模型平均对象调用confint()函数时,会抛出以下错误:
Error en get(name, envir = asNamespace(pkg), inherits = FALSE): objeto 'format.perc' no encontrado
(中文翻译:找不到对象'format.perc')
我的常规工作流是这样的:用glmmTMB::glmmTMB()拟合二项式GLM,为了提速使用并行化跑MuMIn::dredge(),把dredge结果存为.Rds文件后续加载,再基于这些结果做模型平均,最后计算系数、置信区间和边际均值。今年早些时候我用完全相同的方法做过分析,当时完全没有问题,这次的报错让我很困惑。
目前我有一个临时替代方案——把标准误乘以1.96来近似95%置信区间,但我更希望找到问题的根源并彻底解决它。
问题重现
我制作了一个可复现的例子,发现这个错误不仅出现在我自己的工作流里,甚至在不使用并行化、不加载.Rds文件的情况下,不管是线性模型还是广义线性模型都会触发这个错误,说明问题具有普遍性:
library(glmmTMB) library(MuMIn) library(parallel) library(tidyverse) # 初始化并行集群(核心数-1) cl <- parallel::makeCluster((parallel::detectCores() - 1)) # 设置dredge的选项 options(na.action = "na.fail") # 加载示例数据集 data(mtcars) # 拟合全模型 m <- glmmTMB::glmmTMB( gear ~ mpg + cyl + hp, family = poisson(link = "log"), data = mtcars, control = glmmTMBControl(parallel = length(cl)) ) # 遍历所有变量组合的模型 dredge md <- MuMIn::dredge(m, rank = "AICc") # 控制台会输出:Fixed terms are "cond((Int))" and "disp((Int))" # 基于delta <=6的最优子集做模型平均 ma <- md %>% subset(delta <= 6) %>% MuMIn::model.avg(revised.var = TRUE, fit = TRUE) # 手动指定模型列表做模型平均(GLM场景) ma2 <- list( glmmTMB::glmmTMB(gear ~ cyl + hp, family = poisson(link = "log"), data = mtcars, control = glmmTMBControl(parallel = length(cl))), glmmTMB::glmmTMB(gear ~ mpg + hp, family = poisson(link = "log"), data = mtcars, control = glmmTMBControl(parallel = length(cl))), glmmTMB::glmmTMB(gear ~ mpg + cyl, family = poisson(link = "log"), data = mtcars, control = glmmTMBControl(parallel = length(cl))) ) %>% MuMIn::model.avg(revised.var = TRUE, fit = TRUE) # 手动指定模型列表做模型平均(线性模型场景) ma3 <- list( lm(gear ~ cyl + hp, data = mtcars), lm(gear ~ cyl, data = mtcars), lm(gear ~ hp, data = mtcars) ) %>% MuMIn::model.avg(revised.var = TRUE, fit = TRUE) # 注意:summary()可以正常运行,但以下调用会触发报错 confint(ma) confint(ma2) confint(ma3)
我的疑问
format.perc这个对象到底是什么?它属于哪个包?为什么会突然出现找不到的情况?- 为什么今年早些时候用完全相同的方法没有问题,现在却触发了这个错误?(我猜测可能是包版本更新导致的兼容性冲突?)
- 除了用标准误乘以1.96的临时方案,有没有更规范的修复方法?




