2014-09-18 118 views
3

我想在R中使用wilcox.test進行顯着性測試。我想基本測試一個值x是否明顯在分佈內/外的d替代wilcox.test在R

我做了以下內容:

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包,但我無法讓它工作測試一個值對分佈。

有沒有替代這個測試,做同樣的事情,知道如何處理關係?

+0

順便說一句,我不能再現你的例子 - 當我用你的'd'使用'x = 60'時,我得到'W = 1.5','p = 0.2018'而不是你上面引用的結果。 – 2014-09-18 18:28:40

+0

@Ben Bolker,因爲他使用'coin'包中的'wilcox_test()',而不是'stats'包中的'wilcox.test()'。 – 2016-12-30 02:35:19

+0

真的嗎?這不是他們在代碼塊中顯示的內容。你可能注意到我在下面的答案中實現了'coin :: wilcox_test'。 – 2016-12-30 02:51:43

回答

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包,我不知道它有多可靠。你自己找出這些程序之間的區別是什麼以及哪個最好使用......)

結果在這裏有意義 - 問題在於你的能力低下。如果你的值是完全超出數據範圍,對於n = 15,這將是類似於2 *(1/16)= 0.125的概率。你的樣本以排列的第一個或最後一個元素結束的概率],這與此處的最小值不完全相同(wilcox.test:p = 0.105,wilcox_test:p = 0.08),但這可能是一個近似問題,或者我可能有一些細節錯誤。儘管如此,它是在正確的場地。

+0

Ben,你還可以從'exactRankTests'包中添加'wilcox.exact'程序到這個「benchmark」嗎?我做了這個,得到了稍微不同的結果(這個包會拋出警告,表明它不再被維護 - 但是最後一次更新只有2個月) – Jealie 2014-09-18 18:29:43

+0

(即''pfun3 < - function(x){wilcox.exact(x, d)$ p.value}' - 我會自己做,但爲此寫一個新的答案是沒有意義的。底線是:這個測試也給出了一個非顯着的p值,然而另一個值更高(p = 0.3125)。 – Jealie 2014-09-18 18:37:02

+0

謝謝你這個很好的答案,重點是我的數據大小差異很大。我在這裏給出的只是一個例子。問題是:分佈大小變化會影響p值計算嗎?我需要用p值來區分類別(用數字x表示)。 – ifreak 2014-09-18 19:30:01