一元配置分散分析(One-way ANOVA)は、3つ以上のグループに分けられたデータが本当は同一の母集団から得られたものかどうかを判断するために用いられます。もし一元配置分散分析でそのような帰無仮説が棄却された場合、次に興味が出てくるのは具体的にどのグループとどのグループの間に差があるのかという点です。このような疑問に答えるために、ポストホック解析としてテューキーの範囲検定(Tukey's HSD検定)が用いるという慣例があります。
このような慣例を不思議に思う人もいるかもしれません。実際に、わざわざ先に分散分析しなくても、テューキーの範囲検定だけで判断できるのではないかという質問が見つかります。つまり、
という考え方です。
これは慣例を鵜呑みにしないという意味で良い問いです。そして、この問いには検出力(power)の点から1つの答えがあります。具体的には、有意水準\(\alpha\)の分散分析をしていずれかのグループ間で差があるかを検定するアプローチと、同じ有意水準\(\alpha\)のテューキーの範囲検定をしていずれかのグループ間で差があるかを検定するアプローチでは、一般に検出力が異なります。
groups <- c('A', 'B', 'C')
mu <- c(0, 0, 0.7)
sigma <- 1
n <- 25
alpha <- 0.05
f <- function() {
df <- data.frame(g = rep(groups, n), v = rnorm(length(groups) * n, 0, sigma) + rep(mu, n))
m <- aov(v ~ g, df)
result.a <- anova(m)
result.t <- TukeyHSD(m)
c(result.a$'Pr(>F)'[1] < alpha, any(result.t$g[,4] < alpha))
}
set.seed(1)
N <- 10000
x <- replicate(N, f())
cat("power of ANOVA:", sum(x[1,])/as.double(N), "\n")
cat("power of Tukey's HSD:", sum(x[2,])/as.double(N), "\n")
cat("mismatch rate:", sum(x[1,] != x[2,])/as.double(N), "\n")
上で定義されている関数f
では、3つのグループA、B、Cのサンプルデータとして各々25個ずつ共通の標準偏差1の正規乱数を生成します。AとBについては平均が等しく\(0\)ですが、Cについては平均\(0.7\)となっているので、対立仮説が正しいことになります。f
は2つの検定(どちらも有意水準5%)の結果を返します。f
を10000回ほど繰り返すことで検出力を推定します。
set.seed()
に与えるシードによって若干出力される結果が変わりますが、ほぼ以下のような出力になります:
$ Rscript anova-tukey.r
power of ANOVA: 0.7107
power of Tukey's HSD: 0.6981
mismatch rate: 0.0338
$
これによると分散分析の方が検出力の点で1%以上勝っています。各グループの母平均(上のコードでのmu
)を変えるなどすると、逆にテューキーの範囲検定の方が勝ることもあります。もっと重要なことは、mismatch rateが3%以上であることです。これはつまり、2つの検定のどちらかだけが正しく帰無仮説を棄却するのに対し、もう一方は第二種の過誤に陥っている場合が3%以上生じるということです。