の続き(おまけ)。
Rでウィルコクソンの順位和検定を行うときに、Rに標準でインストールされるstatsのwilcox.test()を使いますが、タイがあると正確な計算ができないことからexactRankTestsのwilcox.exact()を使用したほうがいいといわれます。
ではデータにタイがなければ両者は同じ値がでるのかランダムなデータを作って、p値をみてみました。
検証用自作関数
wilcox.stats.exact2 <- function(n = 10, times = 100, paired = C(F,T)){ p.wilcox.test <- NULL p.exact.wilcox.test <- NULL paired.wilcox <- paired for(i in 1:times){ z <- sample(1:n^2, n*2, replace = F) x <- z[c(1:n)] y <- z[-c(1:n)] p.wilcox.test[i] <- wilcox.test(x, y, paired = paired.wilcox)$p.value p.exact.wilcox.test[i] <- wilcox.exact(x, y, paired = paired.wilcox)$p.value } data.frame(p.wilcox.test, p.exact.wilcox.test) }
library(magrittr) wilcox.stats.exact2(paired = F) %>% plot() abline(0,1)
で微妙なズレは丸めの問題だと思うけど、基本的にはp値が一致。
p値が一致するというということはその他諸々も一致している(はず)。
ウィルコクソンの符号順位和検定だと2変量の差で、タイがあればデータを捨てて作り直す作業が必要になる(あるいはwilcox.test()の返す警告を見てその分計算回数を増やす)ので、自分の設計能力だと無限ループの可能性が出てきてしまう……