将aictab()用于lmer和glmer模型

时间:2019-03-21 23:57:56

标签: r lme4

我正在尝试使用aictab()输出进行AICc模型选择。该帖子类似(Function not defined when calling aictab),但不适用于我的问题,因为它使用了glm.nb模型,而我正在使用lmer模型以及glmer(family=binomial)aictab文档(https://www.rdocumentation.org/packages/AICcmodavg/versions/2.2-1/topics/aictab)表示该函数可以处理lmlmeglm模型:是否包含lmer和{{1 }}?

我的代码实际上在几天前就工作了,但是最近又坏了,并返回了此错误代码

  

aictab.default()中的错误:该对象类尚未定义函数

glmer

1 个答案:

答案 0 :(得分:2)

tl; dr ,您加载了lmerTest程序包,因此您的模型具有不同的类,这使aictab()感到困惑。您可以确保在拟合模型时加载了lme4 not lmerTest,或者使用了bbmle::AICctab(),它看起来更健壮。 (有关此事,可能值得联系AICcmodavg的软件包维护者...)

使用lme4进行设置:

library(lme4)
library(AICcmodavg)

ss <- transform(sleepstudy, junk1=rnorm(nrow(sleepstudy)),
                junk2=rnorm(nrow(sleepstudy)))
m1 <- lmer(Reaction ~ Days + (1|Subject), data=ss, REML=FALSE)
m2 <- update(m1, . ~ . - Days + junk1)
m3 <- update(m1, . ~ . - Days + junk2)
cand.set <- list(m1, m2, m3)
names <- c("Days", "junk1", "junk2")  ## this should be a vector, not a list ...

这很好:

aictab(cand.set, modnames=names, second.ord=TRUE, nobs=NULL, sort=TRUE)
##       K    AICc Delta_AICc AICcWt Cum.Wt      LL
## Days  4 1802.31       0.00      1      1 -897.04
## junk2 4 1918.47     116.16      0      1 -955.12
## junk1 4 1918.71     116.40      0      1 -955.24

现在加载lmerTest并重新调整模型(例如,我们可以做m1 <- as(m1, "lmerModLmerTest"),但重新调整很容易)。

library(lmerTest)
m1 <- lmer(Reaction ~ Days + (1|Subject), data=ss, REML=FALSE)
m2 <- update(m1, . ~ . - Days + junk1)
m3 <- update(m1, . ~ . - Days + junk2)
cand.set <- list(m1, m2, m3)
aictab(cand.set, modnames=names, second.ord=TRUE, nobs=NULL, sort=TRUE)
  

aictab.default中的错误(cand.set,modnames =名称,second.ord = TRUE,:   尚未为此对象类定义功能

bbmle::AICctab()函数要健壮一些,因为它仅依赖于为类定义的logLik方法(默认情况下,它仅提供具有delta-AIC和df的表)< / p>

library(bbmle)
AICctab(m1, m2, m3, mnames=names, base=TRUE, weights=TRUE, logLik=TRUE)
##       logLik AICc   dLogLik dAICc  df weight
## Days  -897.0 1802.3   58.2     0.0 4  1     
## junk2 -955.1 1918.5    0.1   116.2 4  <0.001
## junk1 -955.2 1918.7    0.0   116.4 4  <0.001