我正在尝试wilcox.test在R中使用显着性测试.我想基本上测试一个值x是否明显在分布内/外d.
我正在做以下事情:
d = c(90,99,60,80,80,90,90,54,65,100,90,90,90,90,90)
wilcox.test(60,d)
Wilcoxon rank sum test with continuity correction
data: 60 and d
W = 4.5, p-value = 0.5347
alternative hypothesis: true location shift is not equal to 0
Warning message:
In wilcox.test.default(60, d) : cannot compute exact p-value with ties
Run Code Online (Sandbox Code Playgroud)
基本上p值对于我测试的大范围数字是相同的.
我已尝试wilcox_test()从coin包中,但我不能让它工作测试分配的价值.
有没有替代这个测试做同样的事情并且知道如何处理关系?
你对这些不准确的结果有多担心?我猜这个大小的数据集的近似是合理的.(我确实设法开始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)
Run Code Online (Sandbox Code Playgroud)
图片:
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))
Run Code Online (Sandbox Code Playgroud)

(exactRankTests根据要求添加,但鉴于它不再维护并推荐coin包装,我不确定它是多么可靠.你可以自己找出这些程序之间的差异,哪些是最好的使用 ...)
结果在这里有意义 - 问题只是你的力量很低.如果你的值完全在数据范围之外,对于n = 15,这将是2*(1/16)= 0.125的概率[即你的样本最终成为第一个或最后一个元素的概率一个排列],它与这里的最小值不完全相同(wilcox.test:p = 0.105,wilcox_test:p = 0.08),但这可能是一个近似问题,或者我可能有一些细节错误.然而,它是在正确的球场.