R中wilcox.test的替代方案

时间:2014-09-18 17:26:57

标签: r

我在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}},但我无法让它根据发行版测试价值。

是否有替代此测试可以做同样的事情并且知道如何处理关系?

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))

enter image description here

exactRankTests已按要求添加,但鉴于它已不再维护并推荐coin个套餐,我不确定它的可靠性。您&#39 ;依靠自己来确定这些程序之间的差异以及哪些程序最好使用......)

结果在这里有意义 - 问题在于你的力量很低。如果您的值完全超出数据的范围,则对于n = 15,这将是2 *(1/16)= 0.125的概率[即您的样本最终成为排列中的第一个或最后一个元素的概率],这与此处的最小值不完全相同(wilcox.test:p = 0.105,wilcox_test:p = 0.08) ,但这可能是一个近似问题,或者我可能有一些细节错误。尽管如此,它还是在正确的球场。