独立 2 標本の並べ替え検定 Last modified: Mar 19, 2007
目的
独立 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
直前のページへ戻る
E-mail to Shigenobu AOKI