logo
生物科学研究所 井口研究室
Laboratory of Biology, Okaya, Nagano, Japan
Home

Kruskal-Wallis 検定:近似検定の標本サイズ

井口豊(生物科学研究所,長野県岡谷市)
最終更新: 2022 年 10 月 23 日

1. はじめに

ノンパラメトリック検定Kruskal-Wallis 検定で,しばしば近似計算が使われるが,それに気づかないで利用しているケースがあることは,既に別ページで指摘した。

例えば, 3 群の場合,まずデータ全体の順位を計算し,その中から,各群内の順位和 R1, R2, R3 を取り出し,以下の式に基づいて,検定統計量 H を求める。ここで N は全体の標本サイズ, n1, n2, n3 は各群の標本サイズである。

\[ H=\frac{12}{N(N+1)}\biggl(\frac{R_1^2}{n_1}+\frac{R_2^2}{n_2}+\frac{R_3^2}{n_3} \biggl)-3(N+1) \]

この統計量 H が,標本サイズが大きくなるにつれて,群数 − 1 の自由度(ここでは, 3 − 1 = 2) のカイ二乗分布に近似的に従うことを利用して p 値が算出される。

当然ながら,小標本の場合は,この近似が適用できないので, Kruskal-Wallis 正確検定ということになる。しかし実際には,統計ソフト R の場合, coin パッケージ LocationTests 関数マニュアルに書かれたように, kruskal_test で, distribution に "approximate" を指定して,モンテカルロ法での計算になる。

実際に,前述のサイトで扱った医学論文の場合(学術論文で気になるケース), 4 群 22 症例の Kruskal-Wallis 検定で有意差無し,となっていた項目を,掲載データを使って Kruskal-Wallis 正確検定で再計算したところ,有意差あり,となった。

では,近似計算を使う場合,どのくらいの標本サイズが必要だろうか?シミュレーションで調べてみた。

2. Kruskal-Wallis 検定統計量 H 近似と標本サイズ

ここでは,いわゆる 5 件法, 5 段階リッカート尺度(Likert scale)を想定してみた。 1 から 5 の整数値が,母比率 2:4:2:1:1 である集団を考え,大きさ 5, 10, 20, 30, 50, 100 の標本を 10 万回繰り返し取り出し, H を計算し,自由度 2 のカイ二乗分布との適合度を Q-Q plot で調べた。検定と並び替え検定を行い, p 値の出現状況を調べるシミュレーションをしてみる。

以下が, R スクリプトである。パッケージ EnvStats の qqPlot 関数が使われている。


#############
k<- 1e+5 # 標本取り出し反復回数
n<- c(5, 10, 20, 30, 50, 100)
h<- hn<- as.numeric(NULL)

for (i in 1: length(n)) {

  h<- replicate(k, {

    grp<- factor(rep(1:3, each = n[i]))
    dat<- sample(
       1:5, 3*n[i], prob = c(2, 4, 2, 1, 1), 
       replace = TRUE)

    kruskal.test(dat ~ grp)$statistic
  })

 hn<- c(hn, h)
}

hmat<- matrix(hn, ncol = length(n))
head(hmat)

library(EnvStats)

qq<- function(x) {
  qpt<- qqPlot(
    x, dist = "chisq", 
    param.list=list(df = 2),
    add.line = TRUE,
    line.col = "red",
    line.lwd = 2,
    equal.axes = TRUE,
    ylab ="Observed quantiles",
    main = "Chi−square Q−Q Plot \n
    for K-W test with 3 groups"
   )

}

par(mfrow = c(3, 2))

qq(hmat[, 1])
text(10, 20, "Each group with n = 5")

qq(hmat[, 2])
text(10, 20, "Each group with n = 10")

qq(hmat[, 3])
text(10, 20, "Each group with n = 20")

qq(hmat[, 4])
text(10, 20, "Each group with n = 30")

qq(hmat[, 5])
text(10, 20, "Each group with n = 50")

qq(hmat[, 6])
text(10, 20, "Each group with n = 100")

################

結果は,次の図 1 のとおりである。

Kruskal-Wallis 検定統計量 H 近似と標本サイズ

図 1. Kruskal-Wallis 検定統計量 H 近似と標本サイズ

Kruskal-Wallis 検定統計量 H の近似計算を適用するためには, 1 群あたり標本サイズ n が,少なくとも 20 程度,出来れば 50 程度欲しいのである。もちろん,これ以外の条件になれば結果も変わってくる。

逆に言えば, 1 群あたり 10 個前後のデータで, Kruskal-Wallis 検定の近似計算に気づかないと問題になるかもしれない。

実際,冒頭で指摘した医学論文の場合(学術論文で気になるケース), 4 群 22 症例の Kruskal-Wallis 検定で,おそらく近似検定だったために,正確検定で再計算した結果と異なった可能性がある。

関連サイト

Home