我正在尝试使用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)表示该函数可以处理lm
,lme
和glm
模型:是否包含lmer
和{{1 }}?
我的代码实际上在几天前就工作了,但是最近又坏了,并返回了此错误代码
aictab.default()中的错误:该对象类尚未定义函数
glmer
答案 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