问题描述
当我使用 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 = 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,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")
) 的维护者或为 rstatix
包 here 创建一个新问题。