0

当我使用rstatix::anova_test.

来自 iris 数据集的示例:

首先使用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 = TRUE或者FALSE我得到不同的效果大小,正如我所期望的那样。

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,
                               detailed = T,
                               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

有人知道为什么吗?谢谢!

4

1 回答 1

0

回答

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调用 pes 和 ges 计算的两个函数:

  • 佩斯:rstatix:::add_partial_eta_squared
  • 格斯:rstatix:::add_generalized_eta_squared

pes计算方式anova_test

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

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


ges计算由anova_test

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")创建新问题。rstatix

于 2021-06-10T09:06:22.927 回答