クラスカル・ウォリス検定(分割表データから) Last modified: Aug 21, 2009
目的
分割表の形式にまとめられた二次データに基づいてクラスカル・ウォリス検定を行う。
実際には,分割表を原データに展開して,R が用意している kruskal.test を呼ぶ。
使用法
kw3.test(d) R の kruskal.test を呼ぶ
または
kw4.test(d) 自前で計算する
引数
d 分割表
1行目に第一群,2行目に第二群...等の順で入力する(使用例参照)
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/kw3_test.R", encoding="euc-jp")
# クラスカル・ウォリス検定(分割表データから)
kw3.test <- function(d) # 分割表
{
v <- rep(col(d), d) # 測定値を再現
g <- rep(row(d), d) # 群変数を再現
kruskal.test(v, g) # R にある関数を呼び出す
}
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/kw4_test.R", encoding="euc-jp")
# 集計表を与えて,クラスカル・ウォリス検定を行う
kw4.test <- function(tbl) # 集計表(合計欄を含まない)
{
method <- "集計表を与えてクラスカル・ウォリス検定"
data.name <- deparse(substitute(tbl))
nc <- ncol(tbl) # 表頭に来る変数(順序変数)がとるカテゴリー数
ni <- rowSums(tbl) # 表側にくる変数が表す各群のデータ数
n <- sum(tbl) # 総合計
tj <- colSums(tbl) # 各カテゴリーに該当するデータ数
rj <- c(0, cumsum(tj)[-nc])+(tj+1)/2 # 各カテゴリーに属するデータに与えられる順位
Sx <- 12*sum((tbl%*%rj)^2/ni)/(n*(n+1))-3*(n+1) # 検定統計量
S0 <- Sx/(1-sum(tj^3-tj)/(n^3-n)) # 同順位を修正した検定統計量(カイ二乗分布に従う)
df <- nrow(tbl)-1 # 自由度
P <- pchisq(S0, df, lower.tail=FALSE) # P 値
return(structure(list(statistic=c("Kruskal-Wallis chi-squared"=S0), parameter=c(df=df), p.value=P,
method=method, data.name=data.name), class="htest"))
}
使用例
カテゴリー1 カテゴリー2 カテゴリー3
第1群 10 5 1
第2群 4 7 3
第3群 2 4 9
のような分割表は以下のように表現する
d <- matrix(c(10, 5, 1, 4, 7, 3, 2, 4, 9), byrow=TRUE, ncol=3)
出力結果例
> d <- matrix(c(10, 5, 1, 4, 7, 3, 2, 4, 9), byrow=TRUE, ncol=3)
> kw3.test(d)
Kruskal-Wallis rank sum test
data: v and g
Kruskal-Wallis chi-squared = 12.4173, df = 2, p-value = 0.002012
> kw4.test(d)
集計表を与えてクラスカル・ウォリス検定
data: d
Kruskal-Wallis chi-squared = 12.4173, df = 2, p-value = 0.002012
解説ページ
直前のページへ戻る
E-mail to Shigenobu AOKI