等分散じゃないからKruskal-Wallis検定ってダメだから

Kruskal-Wallis検定は万能薬か?

卒論原稿の添削で見かけるのが、本来なら分散分析などをするところで、

2つの分布が等分散ではなかったため、Kruskal-Wallis検定(以下、KW)を用いた。

というものです。平均値と同様の検定をしているつもりなんでしょう。長年のことで嫌になってきたので、ここではっきり言っておきます。KWは等分散じゃないときの万能薬ではありません。この点に関してはいくつかの文献があるので参照してください(e.g., Kasuya 2001)。なお、Mann-WhitneyのU検定についても実質的に同じことです。

まず、KWはノンパラメトリック検定で、帰無仮説は「平均値」に関するものではないし、よく間違われるように中央値でもありません(注釈1)。データを順位に置き換えたときの平均値の同等性です(つまり、順位に対する分散分析のようなものです)。

The null hypothesis of the Kruskal-Wallis test is that the mean ranks of the groups are the same. (KWの帰無仮説は、順位の平均値がグループ間で等しいことである)
https://www.sciencedirect.com/topics/medicine-and-dentistry/kruskal-wallis-test

あなたは本当にそれが検定したいのでしょうか。

 この仮説の妥当性を検証するのは私には難しいので、今回は正規母集団から得た2標本の平均値に対してKWを適用したときの問題点について、$${P}$$値の分布から検討してみます。正規母集団の平均値と中央値は等しいことに注意してください。

まず次の統計学的な事実を押さえておきます。検定手法の評価によく使われる方法です。

「帰無仮説が正しい(差がない)とき、$${P}$$値は0から1まで一様に分布する」*

つまり検定を何回も繰り返していけば、得られる$${P}$$値のヒストグラムは高さが同じ、平らな形に近づいてきます(注釈1)。
 また、経験累積分布関数(ECDF、注釈2)は原点から右上へ伸びる45度の直線になります。もし実際のデータに関して、この直線から大きくずれるようなら、検定の前提やデータの性質と手法が合っていない可能性があります。

Rコード:t検定とKW検定のECDF

  • 17行目あたりにある3つ並んだ "pt[i] <-" の式で、実行したい行の頭の「#」を抜いてください(2個以上を抜いた場合は後の式が優先されます)。

  •  1番目の式はt検定(等分散を仮定しない; Welch's test)、2番目はt検定(等分散を仮定)、3番目はKW検定です。

  •  各グループのサンプル数は {100, 50}。いずれも正規分布に従い、母平均は0。標準偏差(SD)は50倍という極端な条件で$${P}$$値の分布を調べました(1,000反復)。

# P値の累積分布関数のシミュレーション
# 2026-01-25

rep <- 1000		# シミュレーションの反復数
n1 <- 100	# グループ1のデータ数
n2 <- 50 	# グループ2のデータ数

pt <- numeric(rep) # 反復ごとの P-value を格納する変数

x <- factor(rep(c("A","B"), c(n1, n2))) # カテゴリー変数(2グループ x それぞれのデータ数)

for (i in 1:rep){

	y1 <- rnorm(n1, sd = 1) # 正規分布(平均0, SD = 1)
	y2 <- rnorm(n2, sd = 50) # 正規分布(平均0, SD = 50)

	pt[i] <- t.test(c(y1, y2) ~ x, var.equal = FALSE)$p.value   # t検定
#	pt[i] <- t.test(c(y1, y2) ~ x, var.equal = TRUE)$p.value    # t検定(等分散)
#	pt[i] <- kruskal.test(c(y1, y2) ~ x)$p.value                # KW検定

}

mean (pt < 0.05) # 危険率 alpha

# CDFのプロット

plot(ecdf(pt), 
main="CDF of P-value", 
		 xlab="P-value", 
		 ylab="Cumulative Probability",
		 col="blue",
		 cex= 0.2
)
abline(0, 1, col="red", lty=2) # 理論上の一一様分布(赤線)

結果は以下のとおりです。

等分散を仮定しないt検定(Welch test)

等分散を仮定しないt検定(Rのデフォルト)は直線に乗っており、うまく調整できているようです。

等分散を仮定したt検定

等分散を仮定した場合には直線から大きく外れます(赤線より上のカーブは$${P}$$値が小さく出やすいということ)。SDが50倍も違うのだから、等分散を仮定した立式がそぐわないのは当然でしょうね。

さて、KW検定はどうかというと:

KW検定

これも全然よくないですね(少なくともこの前提条件では)。ヒストグラムにしてみると、

P値のヒストグラム(KW)

$${P}$$値は明らかに一様分布ではなく、0.1以下のところが飛び出ています。つまり、値が不当に小さく出やすい傾向にありそうです。
 念のため、シミュレーションで P < 0.05 となった反復数(つまり、有意水準)を調べてみると

このように、望ましい5%から大きく逸脱していることがわかりました。母集団が正規分布の場合、母平均(あるいは母中央値)が等しくても有意になりやすいわけです。

まとめ

KW検定は分布の位置の違いだけでなく分布の形にも反応します。今回は「SDが50倍」という極端なシミュレーションでした。厳密な点は私もまだ学ばなくてはなりませんが、少なくともグループ間の差を調べるにあたり、「分散が違う。だめだ。クラスカル検定だ!」というナイーブな態度は危険であることがわかります。

ほとんどの場合、興味があるのは集団や処理の平均値なのではないでしょうか。多くの場合、「平均値の差」を知りたいのであれば、検定(Welch's test)や分散分析で十分だと私は考えています。

注釈

  1. ただし、分布の形が同じであれば中央値の比較と解釈できるようです。

  2. $${P}$$値が一様分布になる証明は、分布関数を使って「$${P < x}$$となる確率は$${x}$$である」ことを示します(たとえば $${P < 0.5}$$となるケースは全ての反復の50%で生じる)。いつかRで実験してみたいと思います。

  3. ECDF: 観測された標本に基づいて、確率変数$${X}$$がある値$${x}$$以下になる確率を表した関数。標本数が大きくなると真の分布の累積分布関数CDFに近づく。CDFを数式で書くと$${F(X) = P(X \leq x)}$$

引用リスト

Kasuya E (2001) ANIMAL BEHAVIOUR, 61, 1247–1249

更新履歴

2026-03-18 いくつかの誤りを修正しました。

いいなと思ったら応援しよう!