Как вы беспокоитесь о неточных результатах? Я бы предположил, что приближение разумно для данных, задающих этот размер. (Мне удалось получить coin::wilcox_test
работу, и результаты не сильно отличаются ...)
d <- c(90,99,60,80,80,90,90,54,65,100,90,90,90,90,90)
pfun <- function(x) {
suppressWarnings(w <- wilcox.test(x,d)$p.value)
return(w)
}
testvec <- 30:120
p1 <- sapply(testvec,pfun)
library("coin")
pfun2 <- function(x) {
dd <- data.frame(y=c(x,d),f=factor(c(1,rep(2,length(d)))))
return(pvalue(wilcox_test(y~f,data=dd)))
}
p2 <- sapply(testvec,pfun2)
library("exactRankTests")
pfun3 <- function(x) {wilcox.exact(x,d)$p.value}
p3 <- sapply(testvec,pfun3)
Изображение:
par(las=1,bty="l")
matplot(testvec,cbind(p1,p2,p3),type="s",
xlab="value",ylab="p value of wilcoxon test",lty=1,
ylim=c(0,1),col=c(1,2,4))
legend("topright",c("stats::wilcox.test","coin::wilcox_test",
"exactRankTests::wilcox.exact"),
lty=1,col=c(1,2,4))
(exactRankTests
добавлен по запросу, но при условии, что он больше не поддерживается и рекомендует пакет coin
, я не уверен, насколько он надежный. Вы сами понимаете, какие различия между этими процедурами и которые лучше всего использовать ...)
Результаты имеют смысл здесь - проблема в том, что ваша мощность низкая. Если ваше значение равно полностью вне диапазона данных, для n = 15 это будет вероятность чего-то вроде 2 * (1/16) = 0,125 [т.е. вероятность того, что ваш образец окажется в качестве первого или последнего элемента в перестановке], что здесь не совсем то же самое, что и минимальное значение (wilcox.test
: p = 0.105, wilcox_test
: p = 0,08), но это может быть проблемой сближения , или у меня могут быть некоторые ошибки. Тем не менее, он находится в правильном футбольном поле.
Кстати, я не могу воспроизвести ваш пример - когда я использую 'x = 60' с вашим' d', я получаю 'W = 1.5',' p = 0.2018' вместо результатов, которые вы цитируете выше , –
@Ben Bolker, потому что он использует 'wilcox_test()' из пакета 'coin', а не' wilcox.test() 'из пакета' stats'. –
действительно ?? это не то, что они показывают в своем блоке кода. Вы можете заметить, что я выполнил «coin :: wilcox_test» в моем ответе ниже. –