ウィルコクソンの符号付順位和検定     Last modified: Oct 08, 2004

目的

ウィルコクソンの符号付順位和検定を行う。
R に用意されている wilcox.test(x, y, paired=TRUE, ...) では,測定値が小数付きの場合に不正な結果を返すことがある。
独自に関数を定義しても良いが,測定値を整数化することにより R が用意している機能を最大限利用する。

使用法

wilcox.paired.test(x, y, ...)

引数

x, y   対応する測定値ベクトル
...    R の wilcox.test の引数(paired=TRUE を除く)

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/wilcox_paired_test.R", encoding="euc-jp")

# ウィルコクソンの符号付順位和検定
wilcox.paired.test <- function(      x,              # 対応する測定値ベクトル
                                y,              # 対応する測定値ベクトル
                                ...)            # wilcox.test へ引き渡すその他の引数
{
        ok <- complete.cases(x, y)           # 欠損値を持つケースを除く      
        x <- x[ok]
        y <- y[ok]

        ok = FALSE                              # データが全部整数値になったかどうか
        for (i in 1:10) {                       # もとのデータを 10 倍ずつ大きくしていって,全部が整数になったら検定を行う
                if (all(c(x, y)*10^i == floor(c(x, y)*10^i))) {
                        ok = TRUE
                        break
                }
        }
        if (ok == FALSE) {
                stop("Give up!")
        }
        
        x <- x*10^i                          # 整数化
        y <- y*10^i
        wilcox.test(x, y, paired=TRUE, ...)     # R が用意している関数を利用する
}


使用例

x <- c(0.8, 0.7, 0.8, 1.1, 0.8, 1.0, 0.4, 0.6, 1.0, 0.9, 0.7, 0.7, 0.7, 0.6, 0.9, 1.0, 0.9, 0.4, 1.1, 1.0)
y <- c(0.8, 0.6, 0.9, 1.0, 1.0, 1.1, 0.5, 0.5, 0.9, 1.0, 0.5, 0.6, 0.8, 0.6, 0.8, 0.9, 0.8, 0.7, 1.1, 1.1)
wilcox.paired.test(x, y)

出力結果例

> x <- c(0.8, 0.7, 0.8, 1.1, 0.8, 1.0, 0.4, 0.6, 1.0, 0.9, 0.7, 0.7, 0.7, 0.6, 0.9, 1.0, 0.9, 0.4, 1.1, 1.0)
> y <- c(0.8, 0.6, 0.9, 1.0, 1.0, 1.1, 0.5, 0.5, 0.9, 1.0, 0.5, 0.6, 0.8, 0.6, 0.8, 0.9, 0.8, 0.7, 1.1, 1.1)
> wilcox.paired.test(x, y)

	Wilcoxon signed rank test with continuity correction

data:  x and y 
V = 75.5, p-value = 0.9798
alternative hypothesis: true mu is not equal to 0 

もとのままのデータを使った以下の結果は,誤りである。

> x <- c(0.8, 0.7, 0.8, 1.1, 0.8, 1.0, 0.4, 0.6, 1.0, 0.9, 0.7, 0.7, 0.7, 0.6, 0.9, 1.0, 0.9, 0.4, 1.1, 1.0)
> y <- c(0.8, 0.6, 0.9, 1.0, 1.0, 1.1, 0.5, 0.5, 0.9, 1.0, 0.5, 0.6, 0.8, 0.6, 0.8, 0.9, 0.8, 0.7, 1.1, 1.1)
> wilcox.test(x, y, paired=TRUE)

	Wilcoxon signed rank test with continuity correction

data:  x and y 
V = 66.5, p-value = 0.6446
alternative hypothesis: true mu is not equal to 0 


・ 解説ページ


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI ( @si.gunma-u.ac.jp )

Made with Macintosh