目的 ウィルコクソンの符号付順位和検定を行う。 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 解説ページ