目的 分割表の形式にまとめられた二次データに基づいてクラスカル・ウォリス検定を行う。 実際には,分割表を原データに展開して,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 解説ページ