目的 独立 2 標本データに対する並べ替え検定(permutation test)を行う。 使用法 permutation.test(x, y, FUNC, ...) 引数 x 第 1 群のデータ y 第 2 群のデータ FUNC 検定関数(t.test, wilcox.test, var.test, ansari.test, mood.test など) 自作関数でもよい。その場合には,*$statistic で検定統計量を返すように作る ... 検定関数に渡す引数 ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/permutation_test.R", encoding="euc-jp") # 独立2標本の並べ替え検定 permutation.test <- function( x, # 第 1 群のデータ y, # 第 2 群のデータ FUNC, ...) # 検定関数および,その引数 { x <- x[!is.na(x)] # 欠損値を除く y <- y[!is.na(y)] # 欠損値を除く s <- c( FUNC(x, y, ...)$statistic, # 観察値の場合の統計量1 FUNC(y, x, ...)$statistic) # 観察値の場合の統計量2 s1 <- min(s) s2 <- max(s) z <- c(x, y) # データをプールする perm <- combn(length(z), length(x), # 全ての組み合わせについて function(g) { # 検定を行い, r <- FUNC(z[g], z[-g], ...)$statistic # 検定統計量が r <= s1 || r >= s2} # 観察値の場合より極端なら TRUE を返す ) return(mean(perm)) # P 値(= 全ての組み合わせ中での TRUE の数の割合) } 使用例 x <- c(2, 1, 3, 2, 5) y <- c(4, 3, 2, 5, 4) permutation.test(x, y, t.test) # t 検定(ウェルチの方法) permutation.test(x, y, t.test, var.equal=TRUE) # t 検定(等分散を仮定) permutation.test(x, y, wilcox.test, exact=FALSE) # マン・ホイットニーの U 検定 permutation.test(x, y, var.test) # 等分散の検定 permutation.test(x, y, ansari.test, exact=FALSE) # アンサリ検定 permutation.test(x, y, mood.test) # ムード検定 # 上の使用例における exact=FALSE は,エラーメッセージ抑制のため 出力結果例 > x <- c(2, 1, 3, 2, 5) > y <- c(4, 3, 2, 5, 4) > permutation.test(x, y, t.test) # t 検定(ウェルチの方法) [1] 0.3730159 > permutation.test(x, y, t.test, var.equal=TRUE) # t 検定(等分散を仮定) [1] 0.3492063 > permutation.test(x, y, wilcox.test, exact=FALSE) # マン・ホイットニーの U 検定 [1] 0.3253968 > permutation.test(x, y, var.test) # 等分散の検定 [1] 0.5 > permutation.test(x, y, ansari.test, exact=FALSE) # アンサリ検定 [1] 0.5634921 > permutation.test(x, y, mood.test) # ムード検定 [1] 0.4761905 ファン・デル・ワーデン検定で並べ替え検定を行うときには, 以下のようにvdw2.test 関数を用意して,permutation.test(x, y, vdw2.test) とすればよい。 インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/vdw2_test.R", encoding="euc-jp") # ファン・デル・ワーデン検定(permutation.test 関数用) vdw2.test <- function( x, # 第一群のデータベクトル y) # 第二群のデータベクトル { x <- x[!is.na(x)] # 欠損値を持つケースを除く y <- y[!is.na(y)] # 欠損値を持つケースを除く n1 <- length(x) # 第一群のサンプルサイズ z <- c(x, y) # データベクトルを一つにまとめる n <- length(z) # 合計したサンプルサイズ S <- sum(qnorm((rank(z)[1:n1])/(n+1))) # 第一群のデータに対する正規化得点の合計 return(list(statistic=S)) } > permutation.test(x, y, vdw2.test) [1] 0.3412698