使用 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()
可以使用混合lmer
和lm
模型。但是,由于 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
我正在尝试使用 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()
可以使用混合lmer
和lm
模型。但是,由于 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