高校生ユニット ウイルコクスン.
pages wilcoxon.
hutsday   統計er   など参考

1 はじめに

Kruskal-Wallis検定は独立多群のノンパラメトリック検定である。
パラメトリックな検定手法である分散分析ではF検定を用いるが、
  なぜ、カイ二乗検定なのか?.
数理的な根拠を考えてみたがよくわからない。
統計科学研究所様の「ノンパラメトリック検定」 が詳しいようである。

また、名取真人樣の資料 によると、各群のサイズが5以下の場合はカイ二乗分布で近似するのは難しいという。

とりあえず、Kruskal-Wallis統計量がカイ二乗分布に従うことをシミュレーションで確かめておこう。

2 独立2群.

Kruskal-Wallis統計量はカイ二乗分布に従う。
10人の順位が2クラスA,Bにランダムに散らばっているとする。
rで離散型一様分布の乱数を生成する runif() を用いて10個の乱数を作り、順位関数rankを適用する。
10個の順位をグループ x(4個),グループy(6個) に分ける。

r <- rank(runif(10) )
x <- r[1:4];y <-r[5:10]
print(x)
## [1] 3 9 5 7
print(y)
## [1]  6 10  8  4  1  2
kruskal.test(x=list(x,y))$ statistic
## Kruskal-Wallis chi-squared 
##                  0.1818182
s = c()
for (i in 1:1000) {
  r <- rank(runif(10) )#離散型一様分布の乱数
  x <- r[1:4];y <-r[5:10]
  s <-c(s,kruskal.test(x=list(x,y))$ statistic)
}
hist(s,prob=T)
mean(s)
## [1] 0.9239091
curve(dchisq(x, 1),add=T)

3 独立多群.

例5-3を帰無仮説のもとでシミュレーションする。
離散型一様乱数を 14個出力し、サンプル数 5,5,4 の標本 A1,A2,A3 にその順位を割り振る。

3.1 Kruskal-Wallis のカイ二乗統計量によるP値.

r <- rank(runif(14) )
A1 <- r[1:5];A2 <-r[6:10];A3 <-r[11:14]
boxplot(A1,A2,A3)

順位なので散らばりが大きいように見える。
rのkruskal.testを適用すると、

kruskal.test(x=list(A1,A2,A3))
## 
##  Kruskal-Wallis rank sum test
## 
## data:  list(A1, A2, A3)
## Kruskal-Wallis chi-squared = 0.27143, df = 2, p-value = 0.8731

3.2 順位に対するF統計量によるP値.

同じ順位データに対してF検定を行う。

value <- c(A1,A2,A3)
group <- c(rep("A1",5),rep("A2",5),rep("A3",4))
x <- data.frame(group=group,value=value)
res <- aov(value ~ factor(group), data = x)
summary(res)
##               Df Sum Sq Mean Sq F value Pr(>F)
## factor(group)  2   4.75   2.375   0.117   0.89
## Residuals     11 222.75  20.250

帰無仮説を満たすデータではP値に大きな差がないように見える。

3.3 Kruskal-Wallis 統計量のシミュレーション.

標本数が5以上であることが望ましいと言われているが、サンプル数「5,5,4」のままシミュレーションを実行してみる。

s = c()
for (i in 1:1000) {
  r <- rank(runif(14) )
  A1 <- r[1:5];A2 <-r[6:10];A3 <-r[11:14]
  s <-c(s,kruskal.test(x=list(A1,A2,A3))$ statistic)
}
hist(s,prob=T)
mean(s)
## [1] 1.987449
curve(dchisq(x, 2),add=T)

小標本であるが、近似はそれほど悪くない。

3.4 例5-3(p159).

3.4.1 Kruskal-Wallis.

A1 <- c(192,256,166,122,202)
A2 <-c(164,248,264,270,230)
A3 <-c(224,298,332,294)
kruskal.test(x=list(A1,A2,A3))
## 
##  Kruskal-Wallis rank sum test
## 
## data:  list(A1, A2, A3)
## Kruskal-Wallis chi-squared = 5.9629, df = 2, p-value = 0.05072

3.4.2 F検定.

value <- c(A1,A2,A3)
group <- c(rep("A1",5),rep("A2",5),rep("A3",4))
x <- data.frame(group=group,value=value)
res <- aov(value ~ factor(group), data = x)
summary(res)
##               Df Sum Sq Mean Sq F value Pr(>F)  
## factor(group)  2  21994   10997   5.228 0.0254 *
## Residuals     11  23140    2104                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

統計的有意を判断するような場面ではP 値は大きく異なり、判断に影響を与えるようである。(F検定の方が甘くなるようである)
やはり、正規性がないデータに対しては、ノンパラメトリックな手法を用いた方が検定の正確性が高いと言えそうである。