Anova在多层分析中无法工作 - "$ operator not defined for this S4 class"

3
我在进行多层分析相关的方差分析时,在R中运行代码时遇到了问题。我总是收到错误消息: $ operator not defined for this S4 class
## Model 0: Model without teams - grand-mean-centered
h2_0_gmc <- lm(PSS_mean ~ PCT_mean_gmc, data = dat_h1_2)

## Model 1: Model with teams - fixed intercept, random slope - grand-mean-centered
h2_1_gmc <- lmer(PSS_mean ~ PCT_mean_gmc + (1 | teamcode), data = dat_h1_2)

## Model 2: Model with teams - random intercept, random slope - grand-mean-centered
h2_2_gmc <- lmer(PSS_mean ~ PCT_mean_gmc + (PCT_mean_gmc | teamcode), data = dat_h1_2)

## Comparison of models
anova(h2_0_gmc, h2_1_gmc, h2_2_gmc)

@AkselA 这个回答相当古老。就当前的lme4版本而言,我不认为它是最新的(尽管它的观点仍然有效)。 - Roland
1个回答

4

只需反转参数的顺序即可:

library(lme4)
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
fm0 <- lm(Reaction ~ Days, sleepstudy)

anova(fm0, fm1)
#Error: $ operator not defined for this S4 class

anova(fm1, fm0)
#refitting model(s) with ML (instead of REML)
#Data: sleepstudy
#Models:
#fm0: Reaction ~ Days
#fm1: Reaction ~ Days + (Days | Subject)
#    Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)    
#fm0  3 1906.3 1915.9 -950.15   1900.3                             
#fm1  6 1763.9 1783.1 -875.97   1751.9 148.35      3  < 2.2e-16 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

技术解释:

anova 是一个S3通用方法。S3方法分派根据作为第一个参数传递的对象的类别进行。如果您首先放置lm拟合,那么会调用anova.lm,它无法处理"merMod"对象。如果您首先放置lmer拟合,那么将调用anova.merMod,并且此方法也可以处理"lm"对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接