尽管设置了 effect.size = 'ges'

问题描述

当我使用 rstatix::anova_test 时,我无法获得 eta 平方,只能获得部分 eta 平方。

来自鸢尾花数据集的示例:

首先使用 aov

aov <- aov(Sepal.Length ~ Sepal.Width + Species,data = iris)
summary(aov)
             Df Sum Sq Mean Sq F value  Pr(>F)    
Sepal.Width   1   1.41    1.41   7.363 0.00746 ** 
Species       2  72.75   36.38 189.651 < 2e-16 ***
Residuals   146  28.00    0.19      

然后使用 sjstats::eta_sq,如果我选择 partial = TRUEFALSE,我会得到不同的效果大小,正如我所期望的。

eta_sq(aov,partial = FALSE) 
         term etasq
1 Sepal.Width 0.014
2     Species 0.712

eta_sq(aov,partial = TRUE)
         term partial.etasq
1 Sepal.Width         0.048
2     Species         0.722

但是,当我在 anova_test 中做同样的事情时,无论效果大小是 pes 还是 ges,我都会两次得到部分 eta 平方,两次都是部分 eta 平方:

aov_pes <- iris %>% anova_test(Sepal.Length ~ Sepal.Width + Species,detailed = T,effect.size = "pes")
get_anova_table(aov_pes)

       Effect    SSn    SSd DFn DFd       F        p p<.05
1 Sepal.Width 10.953 28.004   1 146  57.102 4.19e-12     *
2     Species 72.752 28.004   2 146 189.651 2.56e-41     *
    pes
1 0.281
2 0.722

aov_ges <- iris %>% anova_test(Sepal.Length ~ Sepal.Width + Species,effect.size = "ges")
get_anova_table(aov_ges)

       Effect    SSn    SSd DFn DFd       F        p p<.05
1 Sepal.Width 10.953 28.004   1 146  57.102 4.19e-12     *
2     Species 72.752 28.004   2 146 189.651 2.56e-41     *
    ges
1 0.281
2 0.722

有谁知道这是为什么?谢谢!

解决方法

回答

rstatix::anova_test 似乎在计算中包含错误!我会非常非常小心使用这个功能。

请注意,eta_sq 已弃用,应使用 effectsize::eta_squared


正确计算

我们有三个 SS 值:1.412238、72.752431 和 28.003665。我们可以计算pes和ges:

  • pes:1.412238 / (1.412238 + 28.003665)
  • ges:1.412238 / (1.412238 + 72.752431 + 28.003665)

anova_test

在幕后,anova_test 调用两个函数进行 pes 和 ges 计算:

  • pes:rstatix:::add_partial_eta_squared
  • ges:rstatix:::add_generalized_eta_squared

pes 计算通过 anova_test

res.anova.summary$ANOVA %>% mutate(pes = .data$SSn/(.data$SSn + .data$SSd))

这确实按照我们的预期计算了 pes。


anova_test 计算的 ges

aov.table <- res.anova.summary$ANOVA
aov.table %>% mutate(ges = .data$SSn/(.data$SSn + sum(unique(.data$SSd)) + obs.SSn1 - obs.SSn2))

在这里,我们遇到了一个问题。这段代码似乎明显不正确。它只是将每个平方和值除以自身 + 剩余平方和 (28.004)。那是pes,而不是ges。

您可以联系包 (maintainer("rstatix")) 的维护者或为 rstatixhere 创建一个新问题。