ウイルコクソン検定 wilcox.test *機能 [#k5b20e85] (1) ウイルコクソンの符号付順位和検定を行う。~ (2) ウイルコクソンの符号順位検定を行う。これは,マン・ホイットニー検定と等価な結果を与える。~ 注意:名前が似ているので紛らわしい。(1) は一標本または対応のある二標本の場合の検定である。対応のあるデータの差または一標本データから分布の中心の値を引いた値に順位を付け,符号ごとに和を取る。(2)は,二標本の場合の検定であり,データをまとめて(プールして)順位を付け標本ごとに順位の和をとる。 *使用法 [#e31896d0] wilcox.test(x, y = NULL, alternative = c("two.sided", "less", "greater"), mu = 0, paired = FALSE, exact = NULL, correct = TRUE, conf.int = FALSE, conf.level = 0.95, ...) wilcox.test(formula, data, subset, na.action, ...) exactRankTests ライブラリ wilcox.exact(x, y = NULL, alternative = c("two.sided", "less", "greater"), mu = 0, paired = FALSE, exact = NULL, conf.int = FALSE, conf.level = 0.95, ...) wilcox.exact(formula, data, subset, na.action, ...) *引数 [#s1a838ab] x データベクトル y データベクトル(二標本データの場合) x だけが与えられた場合,または x, y が与えられて paired=TRUE が指定された場合は, ウイルコクソンの符号付順位和検定をおこなう(mu を中心にして左右対称であることの検定) x, y が与えられたときは,その差を取って利用するわけだ。だから,差だけを与えてもよいわけだ。 alternarive 対立仮説の種類 "two.sided", "less", "greater" のいずれか 最初の1文字だけでもよい 両側検定なら "two.sided"(デフォルト) 片側検定なら "less" または "greater" mu 一標本の場合は位置パラメータ 二標本の場合は検定する位置の差 デフォルトでは 0 paired 対応のある二標本データの場合に TRUE を指定する デフォルトでは FALSE exact 正確な P 値を計算する場合に TRUE を指定する デフォルトでは NULL であるが,データ数が 50 未満で,同順位がない場合には 内部処理により TRUE を指定したのと同じになる(正確な P 値が計算される) wilcox.exact では,同順位があっても正確な P 値が計算される correct 連続性の補正をしない場合に FALSE を指定する デフォルトでは TRUE conf.int 一標本データの場合の疑似中央値,二標本データの場合の位置の差の信頼限界を計算する場合に TRUE を指定する デフォルトでは FALSE conf.level 信頼率 デフォルトは 0.95 formula 「左辺値 ~ 右辺値」の形をしたモデル式 左辺値は位置母数を検定する数値変数 右辺値は群を表す2つの水準を持つ factor 変数 formula で指定する使用法では,二標本データのみをサポートする data モデル式に出てくる変数がデータフレームに含まれる場合は,それを含むデータフレーム名 subset 観察データのサブセット na.action データに NA が含まれるときに適用される関数(注) デフォルトは getOption("na.action") により示されるもの(通常は na.omit 関数) ... その他の引数 注:[[超訳:NAの扱い]] *戻り値 [#tf431c42] **関数への入力 [#p5ff75a4] $ alternarive: 対立仮説の種類 $ null.value : 引数で指定した mu **関数からの出力 [#j6285424] $ statistic : 検定統計量 $ parameter : 検定統計量のパラメータ $ p.value : P 値 $ conf.int : 位置母数の信頼区間 $ estimate : 位置母数の推定値 $ method : 検定の種別 $ data.name : データの記述 *例1 一標本データ mu=5 で対称か [#lc94f570] > x <- c(5, 3.9, 6.1, 5.6, 7, 4.9, 4.5, 6.6, 4.7, 4.6) > wilcox.test(x, mu=5, conf.int=TRUE) Wilcoxon signed rank test with continuity correction # データから mu を引いて,符号付順位和検定 data: x V = 28, p-value = 0.5536 alternative hypothesis: true mu is not equal to 5 95 percent confidence interval: 4.499986 6.100022 sample estimates: (pseudo)median # 疑似中央値 5.292418 Warning messages: 1: ゼロ値のため、正確な p 値を計算することができません in: wilcox.test.default(x, mu = 5, conf.int = TRUE) 2: ゼロ値のため、正確な信頼区間を計算することができません in: wilcox.test.default(x, mu = 5, conf.int = TRUE) 注:「ゼロ値」というのは,差を取って 0 になるデータがあると,そのデータは有効な情報を与えないため検定から外すが,標本サイズをどのように調整したらよいかわからないというような感じかもしれない。しかし,上のデータから,事前に mu と等しいデータを除いてから検定すると > x <- c(3.9, 6.1, 5.6, 7, 4.9, 4.5, 6.6, 4.7, 4.6) > wilcox.test(x, mu=5, conf.int=TRUE) Wilcoxon signed rank test data: x V = 28, p-value = 0.5703 alternative hypothesis: true mu is not equal to 5 95 percent confidence interval: 4.5 6.3 sample estimates: (pseudo)median 5.3 となるのだから,前もって 0 のデータを除いてから検定すればいいだけなのじゃないかなぁ? *例2 対応のある二標本データ(差は mu=0 か) [#a9c1151b] > x <- c(1,2,3,2,3,4,3,3,2,2,1,2,3) > y <- c(2,1,3,4,3,2,2,3,4,5,3,1,2) > wilcox.test(x, y, paired=TRUE) # 2 つのデータベクトルを与え,paired=TRUE を指定する Wilcoxon signed rank test with continuity correction data: x and y V = 19.5, p-value = 0.4355 alternative hypothesis: true mu is not equal to 0 Warning messages: 1: タイがあるため、正確な p 値を計算することができません in: wilcox.test.default(x, y, paired = TRUE) 2: ゼロ値のため、正確な p 値を計算することができません in: wilcox.test.default(x, y, paired = TRUE) > library(exactRankTests) > wilcox.exact(x, y, paired=TRUE) # 正確な P 値を求めたいなら exactRankTest ライブラリを Exact Wilcoxon signed rank test data: x and y V = 19.5, p-value = 0.4336 alternative hypothesis: true mu is not equal to 0 > wilcox.test(x-y) # 引き算をした結果が入っている 1 つのデータベクトルを与える Wilcoxon signed rank test with continuity correction data: x - y V = 19.5, p-value = 0.4355 # 当然であるが,同じ結果になる alternative hypothesis: true mu is not equal to 0 Warning messages: 1: タイがあるため、正確な p 値を計算することができません in: wilcox.test.default(x - y) 2: ゼロ値のため、正確な p 値を計算することができません in: wilcox.test.default(x - y) > wilcox.exact(x-y) Exact Wilcoxon signed rank test data: x - y V = 19.5, p-value = 0.4336 alternative hypothesis: true mu is not equal to 0 *例3 対応のない二標本データ(差は mu=0 か) [#h8d05024] wilcox.test という名前でありながら,統計量の名前も W でありながら, 計算される検定統計量の数値は マン・ホイットニー検定で定義する統計量である > x <- c(1,2,3,2,3,4,3,3,2,2,1,2,3) > y <- c(2,1,3,4,3,2,2,3,4,5,3,1,2) > wilcox.test(x, y) # 対応のない二標本データとして検定 Wilcoxon rank sum test with continuity correction data: x and y W = 73, p-value = 0.555 alternative hypothesis: true mu is not equal to 0 Warning message: タイがあるため、正確な p 値を計算することができません in: wilcox.test.default(x, y) > wilcox.exact(x, y) # 正確な P 値が欲しいとき Exact Wilcoxon rank sum test data: x and y W = 73, p-value = 0.5863 alternative hypothesis: true mu is not equal to 0 > x <- c(1,2,3,2,3,4,3,3,2,2,1,2,3) > y <- c(2,1,3,4,3,2,2,3,4,5,3,1,2) > df <- data.frame(data=c(x, y), group=rep(1:2, each=13)) > wilcox.test(data ~ group, df) # formula を使って,対応のない二標本データとして検定 Wilcoxon rank sum test with continuity correction data: data by group W = 73, p-value = 0.555 alternative hypothesis: true mu is not equal to 0 Warning message: タイがあるため、正確な p 値を計算することができません in: wilcox.test.default(x = c(1, 2, 3, 2, 3, 4, 3, 3, 2, 2, 1, 2, *例4 データ数が多いときに exact=FALSE を指定してみる [#i0b30831] > set.seed(11111) # これは,追試のときに同じ結果が出るようにとのおまじない > x <- rnorm(50) > y <- rnorm(50, mean=1) > wilcox.test(x, y) Wilcoxon rank sum test with continuity correction data: x and y W = 661, p-value = 4.97e-05 alternative hypothesis: true mu is not equal to 0 > wilcox.test(x, y, exact=TRUE) Wilcoxon rank sum test data: x and y W = 661, p-value = 3.355e-05 # 確かに違う(差は問題にならないが) alternative hypothesis: true mu is not equal to 0