首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANOVA LMER Eta平方

ANOVA LMER Eta平方
EN

Stack Overflow用户
提问于 2020-03-07 19:35:12
回答 2查看 2.3K关注 0票数 2

我使用lmer包运行混合模型,当我使用anova函数检索anova结果时,一切都正常。然而,当我试图计算eta平方时,我始终会得到下面的错误。有什么想法吗?

DyestufflmerTest包中可用的数据集。我使用的软件包‘lme4’版本1.1-21。包‘lmerTest’版本3.1-0和软件包‘sjstats’版本0.17.7

代码语言:javascript
复制
fm1 <- lmer(Yield ~ 1 + (1|Batch), Dyestuff)
am <- anova(fm1, test="F")
eta_sq(am, partial = FALSE, ci.lvl = NULL, n = 1000, method = c("dist", "quantile"))

错误:结果2不是长度1的原子向量。 此外:警告消息:在tidy.anova(模型)中: ANOVA输出中的下列列名未被识别或转换: NumDF,DenDF

EN

回答 2

Stack Overflow用户

发布于 2020-03-07 22:38:55

tl;博士

  • 理论上可能很难计算混合模型的eta平方,例如这个简历问题 (它确实提出了一些计算混合模型R^2值的方法,这可能满足您对效果大小的需要)。
  • 实际上,sjstats中的eta平方计算期望anova()方法返回一个包含与剩余方差相对应的行的表。?anova.lmerModLmerTest返回一个只有与固定效果项对应的行(而不是剩余方差)的表。
  • 在任何情况下,您可能都会在计算模型的eta平方时遇到困难,该模型没有任何非平凡的固定效果(即,仅用于固定效果的拦截).

这可能更适合于sjstats问题清单,但我将使用这个空间来分享我到目前为止已经发现的信息。

  • 拟合只拦截的模型会给出类似的错误,即使它只是一个lm()拟合(如果有任何情况的话,这应该会起作用):
代码语言:javascript
复制
fm0 <- lm(Yield ~ 1 , Dyestuff)
am0 <- anova(fm0, test="F")
eta_sq(am0)

错误:结果2必须是一个双倍,而不是长度为0的双向量。 运行rlang::last_error()以查看错误发生的位置。

  • 然而:拟合一个非平凡的(比拦截更固定的效果) lmer(Test)模型也失败了:
代码语言:javascript
复制
fm2 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
am2 <- anova(fm2, test="F")
eta_sq(am2)

错误:结果2必须是一个双倍,而不是长度为0的双向量。 运行rlang::last_error()以查看错误发生的位置。 此外:警告消息:在tidy.anova(模型)中: ANOVA输出中的下列列名未被识别或转换: NumDF,DenDF

(据我所知,警告信息实际上是无害的。)

这个问题的最近原因似乎是内部sjstats:::aov_stat_summary()函数返回一个只有一行的表,因为SSQ/MSQ/等是由于Days而产生的;它还应该有一个行作为剩余的SSQ/MSQ/etc。

代码语言:javascript
复制
sjstats:::aov_stat_summary(am3)
##  term    sumsq   meansq NumDF    DenDF statistic      p.value
## 1 Days 30030.94 30030.94     1 16.99998  45.85296 3.263825e-06

问题是术语的数量在内部被计算为(nrow(aov.sum)-1),这在这里是没有意义的。

将其与使用1+Dayslm()模型进行比较

代码语言:javascript
复制
fm3 <- lm(Reaction ~ Days , sleepstudy)
am3 <- anova(fm3, test="F")
sjstats:::aov_stat_summary(am3)
##        term  df    sumsq     meansq statistic      p.value
## 1      Days   1 162702.7 162702.652  71.46442 9.894096e-15
## 2 Residuals 178 405251.6   2276.694        NA           NA

再深入一点,我们可以看到,这是混合模型的anova()结果报告方式的直接后果:

代码语言:javascript
复制
anova(fm2)
## Type III Analysis of Variance Table with Satterthwaite's method
##      Sum Sq Mean Sq NumDF DenDF F value    Pr(>F)    
## Days  30031   30031     1    17  45.853 3.264e-06 ***

注:没有“残差”行。相反:

代码语言:javascript
复制
anova(fm3)
## Analysis of Variance Table
## Response: Reaction
##            Df Sum Sq Mean Sq F value    Pr(>F)    
## Days        1 162703  162703  71.464 9.894e-15 ***
## Residuals 178 405252    2277                      
票数 4
EN

Stack Overflow用户

发布于 2020-08-27 14:29:40

我认为,如果您使用sjstats包中的函数anova_stats,它可以工作。

代码语言:javascript
复制
fm2 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
am2 <- anova_stats(fm2, test="F")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60581497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档