使用 Anova 比较模型

Comparing models using Anova

我正在尝试使用 Anova 函数比较 6 个 model。 mod1:4 是使用 lm 函数生成的,mod 5 和 6 是 models 使用 lmer 函数生成的。我认为这是导致此错误消息的原因,我可以如何比较这 6 个 model?

anova(mod1, mod2, mod3, mod4, mod5, mod6)
Error: $ operator not defined for this S4 class

我建议使用 performance 包中的 compare_performance() 来比较模型,而不是 anova()

这样你就可以比较AIC,BIC,R-squared,等等。

在此处查看 material:https://easystats.github.io/performance/articles/compare.html

经过视觉比较,我建议您使用来自同一包的 test_performance()

我还建议您使用他们推荐的函数重新运行您的模型。

anova()可以使用混合lmerlm模型。但是,由于 R 类型系统的设置方式,它仅在 第一个参数是 lmer 模型 时才有效。也就是说,anova.merMod() 方法(如果第一个参数是 [g]lmer 模型,则调用该方法)知道如何处理 lm 对象,但是 anova.lm() 方法(获取如果第一个 lm 对象被调用)不知道 merMod 个对象 ...

> library(lme4)
Loading required package: Matrix
> fm1 <- lmer(Reaction ~ Days + (1|Subject), sleepstudy, REML = FALSE)
> fm2 <- lm(Reaction ~ Days, sleepstudy)
> fm3 <- lm(Reaction ~ 1, sleepstudy)
> anova(fm1, fm2, fm3)
Data: sleepstudy
Models:
fm3: Reaction ~ 1
fm2: Reaction ~ Days
fm1: Reaction ~ Days + (1 | Subject)
    npar    AIC    BIC  logLik deviance   Chisq Df Pr(>Chisq)    
fm3    2 1965.0 1971.4 -980.52   1961.0                          
fm2    3 1906.3 1915.9 -950.15   1900.3  60.756  1  6.461e-15 ***
fm1    4 1802.1 1814.8 -897.04   1794.1 106.214  1  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> anova(fm3, fm2, fm1)
Error: $ operator not defined for this S4 class