2010-03-19 77 views
11

標準統計::細節kruskal.test模塊可以計算在數據集中的秩和檢驗測試:秩和檢驗測試與兩兩比較

>>> data(diamonds) 
>>> kruskal.test(price~carat, data=diamonds) 

Kruskal-Wallis rank sum test 

data: price by carat by color 
Kruskal-Wallis chi-squared = 50570.15, df = 272, p-value < 2.2e-16 

這是正確的,這是給我一個概率數據中的所有組具有相同的均值。

但是,我想要詳細說明每對比較,就像D和E顏色的鑽石具有相同的平均價格一樣,因爲其他軟件(SPSS)在您要求進行Kruskal測試時也會這樣做。

我從包pgirmess,讓我做我想做的事發現kruskalmc

> kruskalmc(diamonds$price, diamonds$color) 
Multiple comparison test after Kruskal-Wallis 
p.value: 0.05 
Comparisons 
     obs.dif critical.dif difference 
D-E 571.7459  747.4962  FALSE 
D-F 2237.4309  751.5684  TRUE 
D-G 2643.1778  726.9854  TRUE 
D-H 4539.4392  774.4809  TRUE 
D-I 6002.6286  862.0150  TRUE 
D-J 8077.2871 1061.7451  TRUE 
E-F 2809.1767  680.4144  TRUE 
E-G 3214.9237  653.1587  TRUE 
E-H 5111.1851  705.6410  TRUE 
E-I 6574.3744  800.7362  TRUE 
E-J 8649.0330 1012.6260  TRUE 
F-G 405.7470  657.8152  FALSE 
F-H 2302.0083  709.9533  TRUE 
F-I 3765.1977  804.5390  TRUE 
F-J 5839.8562 1015.6357  TRUE 
G-H 1896.2614  683.8760  TRUE 
G-I 3359.4507  781.6237  TRUE 
G-J 5434.1093  997.5813  TRUE 
H-I 1463.1894  825.9834  TRUE 
H-J 3537.8479 1032.7058  TRUE 
I-J 2074.6585 1099.8776  TRUE 

然而,這個包只允許一個明確的變量(例如我不能學習集羣的價格通過顏色和克拉,就像我可以用kruskal.test所做的那樣),而且我對pgirmess軟件包一無所知,無論是否保留,還是經過測試。

你能推薦一個包來執行Kruskal-Wallis測試,它返回每個比較的詳細信息嗎?你將如何處理這個問題?

+0

'agricolae'包中有'kruskal'函數。你可以檢查是否符合你的需求。 – Marek 2010-03-19 15:29:49

+1

顯然你的意思是kruskal.test(沒有第二個.test)。我想你正在使用ggplot2軟件包中的菱形數據集。那麼,我無法弄清楚爲什麼,但是當我嘗試加載時,我得到一個錯誤,內部錯誤-3在R_decompress1 此外:警告消息: 重新啓動中斷承諾評估。 (我知道,這看起來像一個我應該發佈的問題,但有誰遇到同樣的問題?) – 2010-03-19 16:20:17

+0

@ Marek:非常感謝。我看到了agricolae,但它似乎與pgirmess有相同的問題:-( @ gd047:我不知道你的錯誤可能是什麼,也許你應該嘗試重新安裝ggp​​lot2。你是否有與其他數據集相同的錯誤或包? – dalloliogm 2010-03-19 17:43:25

回答

16

除Marek提及的kruskal :: agricolae外,另一種方法是在使用multcomp的硬幣包中oneway_test的幫助頁面中實施的Nemenyi-Damico-Wolfe-Dunn測試。使用哈德利的設置,降低了B =值的近似()函數,以便它在有限時間內完成:

#updated translation of help page implementation of NDWD 
NDWD <- 
    independence_test(dv ~ iv, data = sum_codings1, distribution = approximate(B = 10000), 
          ytrafo = function(data) trafo(data, numeric_trafo = rank_trafo), 
          xtrafo = mcp_trafo(iv = "Tukey")) 


    ### global p-value 
    print(pvalue(NDWD)) 

    ### sites (I = II) != (III = IV) at alpha = 0.01 (page 244) 
    print(pvalue(NDWD, method = "single-step")) 

上,較大的數據集更穩定的結果,可能需要增加B值和增加了用戶的耐性。

2012年1月:最近有一個關於R-help的帖子,聲稱這個方法有意想不到的結果,所以我把這封電子郵件轉發給維護者。馬克Difford說,他已經確認了問題,並與nparcomp包提供了一個替代的測試:https://stat.ethz.ch/pipermail/r-help/2012-January/300100.html

也有在同一個星期幾上rhelp換事後其他建議對比,以KW測試: kruskalmc suggested by Mario Garrido Escuderorms::polr其次rms::contrasts弗蘭克·哈勒爾https://stat.ethz.ch/pipermail/r-help/2012-January/300329.html

2015年11月建議:與toto_tico,幫助硬幣包的頁面代碼已經在幾年間被改變同意。 ?independence_test幫助頁面現在提供多變量KW測試,?oneway_test幫助頁面將其早期實現替換爲independence_test函數上面的代碼。

+0

非常感謝,但我找不到Nemenyi-Damico-Wolfe-Dunn測試的任何參考。你能指點我一些資源嗎?感謝 – dalloliogm 2010-03-25 11:22:16

+0

的oneway_test(在pkg =硬幣)幫助頁面引用此代碼: 「Nemenyi - 達米科 - 沃爾夫 - 鄧恩測試(聯合排名) 霍蘭德&沃爾夫(1999),第244頁 (其中鋼Dwass結果被給出)「 而這在參考文獻: Myles Hollander \&Douglas A. Wolfe(1999)。非參數統計方法,第2版。紐約:John Wiley&Sons。 – 2010-04-04 15:34:40

+0

@ 42-不Tukey測試也假設正態性和方差齊性?但是在這裏,你是在非參數檢驗後提出的(Kruskal-Wallis)。此外,'oneway_test'(與Monte Carlo aproximation,即'分佈=近似(B = 1000)')也是非參數的。 Tukey怎麼樣對這種情況是好的? – 2015-11-13 06:03:30

1

不幸的是我不知道這樣的功能。如果沒有一個,那麼構造一個返回矩陣和所有成對處理比較的函數將是一個有趣的任務。如果滿足下列不等式滿足

alt text http://www.statsdirect.com/help/image/stat0199_wmf.gif

其中T是對於k個樣本的Kruskal-Wallis檢驗統計量,S^2是T統計的分母的對比被認爲是顯著,N是總數(所有的ni)和Ri是第i個樣本的排名總和(來自所有樣本的彙總),t是Nk自由度上學生t分佈的分位數。

我知道我並沒有太大的幫助:)
我也在等待一個更好的答案

+1

非常感謝你,任何答案是wellcome :-) – dalloliogm 2010-03-19 17:44:03

1

我還以爲你能做到以下幾點:

data(diamonds, package = "ggplot2") 

library(coin) 
library(multcomp) 

kt <- kruskal_test(price ~ clarity, data = diamonds) 
glht(kt, mcp(clarity = "Tukey")) 

但好像multcomp不支持coin對象(還?)。

+0

? glht說「**參數**模型的一般線性假設和多重比較...」,但Kruskal Wallis檢驗是一個非**參數檢驗。 – Martin 2014-07-20 17:23:31

+0

@Martin,但檢查出這兩個軟件包的作者... – hadley 2014-07-21 16:06:58

+0

感謝您的答覆,即使原來的帖子很久以前 - 我自己也在處理類似的問題。大概我是一個完全無知的人 - 但我可以請你更具體一些,我感謝任何幫助。 – Martin 2014-07-21 21:21:01

2

您可以使用PMCMR軟件包。 There是關於它的更多信息。

Spelling_Grades <- c(90,87,89,90,75,88,97,99,78,85,72,76,77,79,70) 
Methods <- c("A","A","A","A","B","B","B","B","B","B","C","C","C","C","C") 
kruskalmc(Spelling_Grades~Methods) 

#This method doesn't accept characters that's why I've changed the methods to integer 
Methods <- c(1,1,1,1,2,2,2,2,2,2,3,3,3,3,3) 
posthoc.kruskal.nemenyi.test(Spelling_Grades~Methods) 

上述兩種方法給出了相同的結果。