毫无疑问,如您所描述的,如果在许多随机数据集上重复使用,ANOVA(以及任何其他统计测试)都可以用于 P-hacking。
在 5% 的水平上,大约 20 个测试中有 1 个的 P 值低于 0.05。
基于连续检验统计量的精确检验在H0
下面显示的是 (a) 具有正态数据的 t.tests、(b) 具有二项式计数的精确二项式检验和 (c) 具有正态数据的单样本 Wilcoxon 检验的模拟。
当为真时:只有 t.test 显示 P 值的标准均匀分布。二项式检验的 P 值尽可能接近 5%(不超过 5%),因此不存在正好处于 5% 水平的(非随机)二项式检验。Wilcoxon 检验基于等级;因此检验统计量是不连续的。但是可以进行接近 5% 水平的测试。H0

图的R代码:
set.seed(1234)
pv.t = replicate(10^5,
t.test(rnorm(25, 100, 15), mu = 100)$p.val)
mean(pv.t <= 0.05)
[1] 0.05017 # 5% within margin of sim error
set.seed(1235)
pv.b = replicate(10^5,
binom.test(rbinom(1, 10, .5), 10)$p.val)
mean(pv.b <= 0.05)
[1] 0.02173 # No test at exactly 5% available
# This test rejects for x=0,1,9, or 10
set.seed(1236)
pv.w = replicate(10^5,
wilcox.test(rnorm(25, 100, 15), mu = 100)$p.val)
mean(pv.w <= 0.05)
[1] 0.04905 # test very nearly at 5%
par(mfrow=c(1,3))
hist(pv.t, prob=T, col="skyblue2", main="T Test")
curve(dunif(x), add=T, col="brown", lwd=2)
abline(v=.05, col="red", lty="dotted", lwd=2)
hist(pv.b, prob=T, col="skyblue2", main="Exact Binomial Test")
curve(dunif(x), add=T, col="brown", lwd=2)
abline(v=.05, col="red", lty="dotted", lwd=2)
hist(pv.w, prob=T, col="skyblue2", main="Wilcoxon Test")
curve(dunif(x), add=T, col="brown", lwd=2)
abline(v=.05, col="red", lty="dotted", lwd=2)
par(mfrow=c(1,1))