You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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)

我的疑问

  1. format.perc这个对象到底是什么?它属于哪个包?为什么会突然出现找不到的情况?
  2. 为什么今年早些时候用完全相同的方法没有问题,现在却触发了这个错误?(我猜测可能是包版本更新导致的兼容性冲突?)
  3. 除了用标准误乘以1.96的临时方案,有没有更规范的修复方法?

火山引擎 最新活动