方差分析LMER Eta平方

时间:2020-03-07 19:35:12

标签: r lme4 anova

我使用lmer软件包运行混合模型,当我使用anova函数检索anova结果时,一切正常。但是,当我尝试计算eta平方时,始终出现以下错误。有什么想法吗?

DyestufflmerTest包中可用的数据集。一世 使用1.1-21版的“ lme4”软件包。软件包“ lmerTest” 3.1-0版和软件包“ sjstats” 0.17.7版

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(model)中: 无法识别或转换ANOVA输出中的以下列名称:NumDF,DenDF

2 个答案:

答案 0 :(得分:3)

tl; dr

    对于混合模型,
  • 从理论上来说可能难以计算出平方均方根,例如this CV question(它确实建议了一些为混合模型计算R ^ 2值的方法,可能会满足您对效果大小的需求)
  • 实际上,最接近的问题似乎是sjstats中的eta方计算在内部期望anova()方法将返回一个表,该表包含对应于残差的行。 ?anova.lmerModLmerTest返回一个表,其中仅包含与固定效应项相对应的行(而不是剩余方差)。
  • 在任何情况下,对于没有非平凡固定效应(即仅固定效应截距)的模型,您可能都希望在计算其平方平方时遇到麻烦...

这可能更适合sjstats issues list,但我将使用此空间来分享到目前为止我所发现的内容。

  • 拟合仅截获模型会产生类似的错误,即使它只是lm()拟合(如果有的话应该可以工作):
fm0 <- lm(Yield ~ 1 , Dyestuff)
am0 <- anova(fm0, test="F")
eta_sq(am0)

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

  • 但是:拟合非平凡(不仅仅是截距的固定效果)lmer(Test)模型也会失败:
fm2 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
am2 <- anova(fm2, test="F")
eta_sq(am2)

错误:结果2必须是单个double,而不是长度为0的double向量。
运行rlang::last_error()以查看错误发生的位置。
另外:警告消息: 在tidy.anova(model)中: 无法识别或转换ANOVA输出中的以下列名称:NumDF,DenDF

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

此问题的最接近原因似乎是内部sjstats:::aov_stat_summary()函数针对SSQ / MSQ / etc返回仅包含一行的表。由于Days;对于剩余的SSQ / MSQ / etc,还应该有一行。

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+Days的{​​{1}}模型得到的结果进行比较:

lm()

深入研究,我们可以看到,这是混合模型报告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()

请注意,没有“剩余”行。相反:

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 ***

答案 1 :(得分:0)

我认为,如果您使用sjstats软件包中的anova_stats函数,那么它将起作用。

fm2 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
am2 <- anova_stats(fm2, test="F")