【问题标题】:Error in predict(), R will not call predict.averaging() from MuMInpredict() 出错,R 不会从 MuMIn 调用 predict.averaging()
【发布时间】:2020-05-12 07:12:48
【问题描述】:

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

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

任何帮助解决这个问题将不胜感激?我想从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

【问题讨论】:

  • 试试MuMIn:::predict.averaging()
  • 感谢您的快速回复。我收到相同的错误消息:In predict.merMod(object = new("glmerMod", resp = new("glmResp", :unused arguments ignored
  • 这看起来像上面的警告,而不是错误。无论如何,我们需要您提供注释的、最小的、独立的、可重现的代码,请考虑:stackoverflow.com/questions/5963269/…
  • 再次感谢。我现在已经编辑以包含一个可重现的示例。
  • 干得好!但是,似乎根本没有计算标准错误的选项,请参阅下面的答案。

标签: r predict mumin


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    ?lme4:::predict.merMod 没有计算预测标准误差的选项 因为很难定义一种有效的方法 在方差参数中包含不确定性;我们推荐 bootMer 这个任务。

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

    从头开始编写引导方法可能并不难,例如this post on Cross Validated。不幸的是,我对该模型太不熟悉,无法进一步帮助您,而且对于 Stack Overflow 而言,事情变得过于统计了,但您可以在 Cross Validated 上询问相关问题,了解如何计算/引导平均广义线性混合效应模型的预测标准误差。

    【讨论】:

    • 谢谢 jay.sf,我真的很感激。我还怀疑是 se.fit 组件导致了警告,但由于 MuMIn:::predict.averaging 暗示它提供了一个 CI,我感到很困惑。我怀疑底层代码最近可能发生了一些变化。这与我在大约两个月没有接触后打开的脚本有关,并且在我上次运行它时它起作用了,很奇怪。我只是再次打开脚本来编辑以前创建的图形,现在无法重新创建。
    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2013-11-27
    • 2014-10-22
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多