我在R中使用wilcox.test
尝试进行重要性测试。我想基本测试值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
基本上,对于我测试的大范围数字,p值是相同的。
我已经尝试wilcox_test()
个coin
包中的{{1}},但我无法让它根据发行版测试价值。
是否有替代此测试可以做同样的事情并且知道如何处理关系?
答案 0 :(得分:7)
你对这些不准确的结果有多担心?我猜这个大小的数据集的近似是合理的。 (我确实设法让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
个套餐,我不确定它的可靠性。您&#39 ;依靠自己来确定这些程序之间的差异以及哪些程序最好使用......)
结果在这里有意义 - 问题在于你的力量很低。如果您的值完全超出数据的范围,则对于n = 15,这将是2 *(1/16)= 0.125的概率[即您的样本最终成为排列中的第一个或最后一个元素的概率],这与此处的最小值不完全相同(wilcox.test
:p = 0.105,wilcox_test
:p = 0.08) ,但这可能是一个近似问题,或者我可能有一些细节错误。尽管如此,它还是在正确的球场。