【问题标题】:AICc(): Error with logLik, cannot apply to object of class 'logical'AICc():logLik 出错,不能应用于“逻辑”类的对象
【发布时间】:2020-05-15 16:00:15
【问题描述】:

我正在尝试为我的一些模型获取 AICc 表,这些模型是使用包 glmmTMB 构建的。该模型给出了一个 logLik 值,但没有给出 AICc。当我将模型放入 AICc() 时:

a <- print(AICc(model, trace = TRUE, 
                rank = "AICc", REML = FALSE))

我收到此错误:

Error in UseMethod("logLik") : 
  no applicable method for 'logLik' applied to an object of class "logical"

我使用了 AICtab() 等其他函数并得到了同样的错误,所以我相信它在模型本身中。如果有人能够在这里解释此错误,请告诉我,谢谢。

编辑:

使用的最小数据集和模型:

ID <- c("A","B","C","A","B","C","A","B","C","A","B","C") 
#random effect
Sesh <- c("A1","B1","C1","A2","B2","C2","A3","B3","C3","A4","B4","C4") 
#nested random effect
Stim <- c("Old","New","Old","New","Old","New","Old","New","Old","New","Old","New")
Temp <- c(75, 76, 72, 80, 71, 65, 69, 60, 76, 80, 81, 60)
Total <- c(0,1,5,6,3,10,2,1,0,0,4,6)
z <- data.frame(ID, Sesh, Stim, Temp, Total)

m <- glmmTMB(
  Total ~ Stim + Temp + (1|ID/Sesh),
  ziformula = ~1,
  data = z,
  family = nbinom2)

【问题讨论】:

  • 这可能很难调试。您能否添加一个您希望获得其AIC 的示例模型。也许使用非常小的数据集来实现可重复性?
  • 非常感谢您的回复。我刚刚添加了一个示例模型和数据集,希望对您有所帮助。
  • 在阅读文档时,这似乎是一个数据问题。似乎 AICc 仅适用于较大的样本。然而,这是我第一次达到这个指标,所以我在统计上没有资格回答。我已经提供了相同的方法来提取它。
  • 你确定这个(1|ID/Sesh)。查看上面的示例,Sesh 嵌入在 ID 中。你只需要身份证。 Sesh 被过度指定(没有重复)

标签: r glmmtmb


【解决方案1】:

您的模型没有可能性(logLik(m)NA),因此无法从中计算任何基于可能性的标准。这可能是由于零通胀模型的样本量较小(没有ziformula 的同一模型给出logLik)。

还要注意AICc(我假设它是MuMIn::AICc)没有参数tracerankREML,因此会出现错误。我相信您将命令与dredge 混淆了。

【讨论】:

  • 非常感谢 - 这就是答案。我的数据集实际上比这大得多并返回一个 logLik,所以当我使用挖泥机运行它时,我得到了所需的 AICc 表。有趣的是,它非常接近我的 AIC 值,这是我没想到的。再次,非常感谢。
【解决方案2】:

我们可以手动提取(见注意):

summary(m)$AICtab
     AIC      BIC   logLik deviance df.resid 
      NA       NA       NA       NA        5 

直接获取AIC:

summary(m)$AICtab[[1]]
[1] NA

要获得 AICc(在撰写本文时,我在学习中还没有遇到此标准):

MuMIn::AICc(m)
[1] NA

然而,它与上面的输出相同。

注意

  • 似乎开发人员没有为glmmTMB 模型实现AIC 方法,因此使用AIC 失败。

  • 上述 AIC 为 NA 可能是由于数据不足。这个答案只是为了展示如何手动提取 AIC。 来自AICc的文档:

计算一个或多个拟合模型对象的二阶 Akaike 信息准则(小样本的 AICc、AIC)。

【讨论】:

  • 您好 Nelson,谢谢 - 当我获得模型的摘要时,我确实收到了 AICtab 的所有值。当我像您在此处建议的那样使用 MuMin::AICc() 函数时,我收到 AIC 值而不是 AICc 值,我相信您必须指定它。我确实相信 AICc 适用于较小的样本模型,这就是我在 AIC 上使用它的原因。
  • 从该函数的文档中,建议AICc 用于更大的样本,请参阅我的“答案”中的最后一个引号。有趣的讨论herehere。尽管注释另有说明,但该函数的文档似乎是错误的,或者至少使用了不同的方法。我的结论是,您应该咨询 Cross Validated
  • 我在这组数据上使用 AICc,因为它在较小的一侧 - 在您链接的第二页上,它说 AIC 和 AICc 随着样本量变大开始收敛,但是作为我的样本量很小,AICc 是要走的路。感谢您的帮助。
  • 这可能是模型嵌套部分的错误。请参阅this 来修复它。我没有统计资格(还)知道如何重新定义这个模型。无法获取 AICc,因为 LogLik 是 NA
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
相关资源
最近更新 更多