predict() 错误,R 不会从 MuMIn 调用 predict.averaging()

Error in predict(), R will not call predict.averaging() from MuMIn

非常感谢任何帮助,在此先感谢。

我使用 MuMIn 包中的 model.avg() 函数对三个 GLMM 模型进行了平均。我现在想根据这个平均模型进行预测。但是,当我调用 predict() 时,R 似乎认为我想要 predict.merMod() 并因此抛出一条警告消息,因为我已经请求标准错误,而 predict.merMod() 没有提供。相反,我想调用 predict.averaging(),这是对 class averaging 模型的适当调用,并将为模型预测提供标准误差。如果我试图通过指定 MuMIn::predict()MuMIn::predict.averaging() 来强制 R 使用 predict.averaging(),我会收到一条错误消息,指出函数不是从 MuMIn.

导出的

如果能帮助解决这个问题,我们将不胜感激?我想根据 class averaging 的平均模型进行预测,并希望获得估计值和标准误差。

下面的可重现示例。

# Load packages
> library(MuMIn); library(lme4)

# Create test data set
> test <- rbind(mtcars, mtcars)
> test <- rbind(mtcars, test)

# Create test models
> t1 <- glmer(am ~  hp + (1 | carb), data = test, family = binomial)
> t2 <- glmer(am ~  hp + vs + (1 | carb), data = test, family = binomial)

# Create model list and average models
> list <- list(t1, t2)
> p1 <- model.avg(list)

# Create new data set for predictions
> nd <- mtcars[1:2,]
> nd <- select(nd, hp, vs)

# Model predictions demonstrating errors and warnings
> predict(p1, backtransform = TRUE, newdata = nd, re.form = NA, se.fit = TRUE)
    Mazda RX4 Mazda RX4 Wag 
    0.8938837     0.8938837 
Warning messages:
1: In predict.merMod(object = new("glmerMod", resp = new("glmResp",  :
  unused arguments ignored
2: In predict.merMod(object = new("glmerMod", resp = new("glmResp",  :
  unused arguments ignored

> MuMIn::predict(p1, backtransform = TRUE, newdata = nd, re.form = NA, se.fit = TRUE)
Error: 'predict' is not an exported object from 'namespace:MuMIn'

> predict.averaging(p1, backtransform = TRUE, newdata = nd, re.form = NA, se.fit = TRUE)
Error in predict.averaging(p1, backtransform = TRUE, newdata = nd, re.form = NA,  : 
  could not find function "predict.averaging"

> MuMIn::predict.averaging(p1, backtransform = TRUE, newdata = nd, re.form = NA, se.fit = TRUE)
Error: 'predict.averaging' is not an exported object from 'namespace:MuMIn'

> MuMIn:::predict.averaging(p1, backtransform = TRUE, newdata = nd, re.form = NA, se.fit = TRUE)
    Mazda RX4 Mazda RX4 Wag 
    0.8938837     0.8938837 
Warning messages:
1: In predict.merMod(object = new("glmerMod", resp = new("glmResp",  :
  unused arguments ignored
2: In predict.merMod(object = new("glmerMod", resp = new("glmResp",  :
  unused arguments ignored

导致警告的是 se.fit=TRUE 选项。似乎没有计算 glmerMod 的标准误差的选项。 MuMIn:::predict.averaging 有一个选项 se.fit=,但它在内部应用 lme4:::predict.merMod 而没有(这就是我们收到警告的原因),并且帮助页面指出:

?lme4:::predict.merMod There is no option for computing standard errors of predictions because it is difficult to define an efficient method that incorporates uncertainty in the variance parameters; we recommend bootMer for this task.

换句话说,您可以尝试使用 lme4::bootMer 来 bootstrap 预测错误。用于计算预测区间的包 merTools discussed alternatives 的作者(不过,他们的函数 merTools::predictInterval 不适用于像您这样的平均模型)。

从头开始编写 bootstrap 方法可能并不难,参见例如this post on Cross Validated。不幸的是,我对那个模型太不熟悉了,无法进一步帮助你,而且对于 Stack Overflow,事情变得太统计了,但你可以在 Cross Validated[ 上问一个相关的问题=31=] 关于如何 calculate/bootstrap 预测平均广义线性混合效应模型的标准误差。

使用 glmmTMB 而不是 lmer - 语法是相同的,它产生相似的结果,同时允许 predict 中的 se.fit,并且通常更有效。

"merMod" 的内部 predict 替换,计算 se.fit,已从 MuMIn 1.43.9 中删除,因为 R 抱怨包覆盖注册方法。