高校生ユニット ウイルコクスン.
pages wilcoxon.
hutsday 統計er など参考
Kruskal-Wallis検定は独立多群のノンパラメトリック検定である。
パラメトリックな検定手法である分散分析ではF検定を用いるが、
なぜ、カイ二乗検定なのか?.
数理的な根拠を考えてみたがよくわからない。
統計科学研究所様の「ノンパラメトリック検定」
が詳しいようである。
また、名取真人樣の資料 によると、各群のサイズが5以下の場合はカイ二乗分布で近似するのは難しいという。
とりあえず、Kruskal-Wallis統計量がカイ二乗分布に従うことをシミュレーションで確かめておこう。
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)
例5-3を帰無仮説のもとでシミュレーションする。
離散型一様乱数を 14個出力し、サンプル数 5,5,4 の標本 A1,A2,A3
にその順位を割り振る。
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
同じ順位データに対して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値に大きな差がないように見える。
標本数が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)
小標本であるが、近似はそれほど悪くない。
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
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検定の方が甘くなるようである)
やはり、正規性がないデータに対しては、ノンパラメトリックな手法を用いた方が検定の正確性が高いと言えそうである。