独立 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

Made with Macintosh