如果兩個樣本來自同一分佈,則進行非參數檢驗
我想檢驗兩個樣本來自同一個總體的假設,而不對樣本或總體的分佈做出任何假設。我該怎麼做?
從 Wikipedia 來看,我的印像是 Mann Whitney U 測試應該是合適的,但在實踐中它似乎對我不起作用。
具體而言,我創建了一個數據集,其中包含兩個大樣本(a,b)(n = 10000)並從兩個非正態(雙峰)、相似(均值相同)但不同(標準差)的總體中抽取圍繞“駝峰”。)我正在尋找一種能夠識別這些樣本不是來自同一人群的測試。
直方圖視圖:
代碼:
a <- tibble(group = "a", n = c(rnorm(1e4, mean=50, sd=10), rnorm(1e4, mean=100, sd=10))) b <- tibble(group = "b", n = c(rnorm(1e4, mean=50, sd=3), rnorm(1e4, mean=100, sd=3))) ggplot(rbind(a,b), aes(x=n, fill=group)) + geom_histogram(position='dodge', bins=100)
這是令人驚訝的 Mann Whitney 檢驗(?)未能拒絕樣本來自同一總體的原假設:
> wilcox.test(n ~ group, rbind(a,b)) Wilcoxon rank sum test with continuity correction data: n by group W = 199990000, p-value = 0.9932 alternative hypothesis: true location shift is not equal to 0
幫助!我應該如何更新代碼以檢測不同的分佈?(如果有的話,我特別想要一種基於通用隨機化/重採樣的方法。)
編輯:
謝謝大家的回答!我很興奮地了解更多關於 Kolmogorov-Smirnov 似乎非常適合我的目的的信息。
我了解 KS 測試正在比較兩個樣本的這些 ECDF:
在這裡,我可以直觀地看到三個有趣的功能。(1) 樣本來自不同的分佈。(2) A 在某些點明顯高於 B。(3) 在某些其他點上,A 明顯低於 B。
KS 檢驗似乎能夠對這些特徵中的每一個進行假設檢查:
> ks.test(a$n, b$n) Two-sample Kolmogorov-Smirnov test data: a$n and b$n D = 0.1364, p-value < 2.2e-16 alternative hypothesis: two-sided > ks.test(a$n, b$n, alternative="greater") Two-sample Kolmogorov-Smirnov test data: a$n and b$n D^+ = 0.1364, p-value < 2.2e-16 alternative hypothesis: the CDF of x lies above that of y > ks.test(a$n, b$n, alternative="less") Two-sample Kolmogorov-Smirnov test data: a$n and b$n D^- = 0.1322, p-value < 2.2e-16 alternative hypothesis: the CDF of x lies below that of y
這真的很整潔!我對這些特性中的每一個都有實際的興趣,因此 KS 測試可以檢查它們中的每一個是很棒的。
Kolmogorov-Smirnov 檢驗是最常用的方法,但也有一些其他選擇。
測試基於經驗累積分佈函數。基本程序是:
- 選擇一種方法來測量 ECDF 之間的距離。由於 ECDF 是函數,因此顯而易見的候選者是範數,用於測量函數空間中的距離。這個距離就是我們的檢驗統計量。
- 在樣本來自相同分佈的零假設下找出檢驗統計量的分佈(幸運的是,人們已經為最常見的距離做到了這一點!)
- 選擇一個門檻,, 對於您的假設,如果計算的檢驗統計量在點 2 的分佈尾部。
對於 Kolmogorov-Smirnov 檢驗,檢驗統計量是兩個經驗 CDF 之間的最大距離(或者如果您想更專業一點規範)。這在 R 中非常容易實現:
ks.test(a,b)
如果-值小於您選擇的閾值,我們拒絕樣本來自同一分佈的原假設。
另一種選擇是 Cramer-von Mises 檢驗,它使用平方norm 作為測試統計量,並在
dgof
包中實現為cvm.test()
. CVM 測試“更好”,因為距離度量考慮了兩個 ECDF 的整體,而不是僅僅挑選出最大的距離。編輯:
假設我們有大小樣本和,我們想要應用我們的假設檢驗。
要將其轉換為採樣類型的過程,我們可以執行以下操作:
- 生成大小樣本和來自相同的分佈。對於 KS 測試(值得注意的是,IMO),只要分佈在每次迭代中發生變化,只要和保持原樣。
- 計算樣本的距離度量。對於 KS 測試,這只是最大值。經驗 CDF 之間的差異。
- 存儲結果並返回步驟 1。
最終,您將從零假設下的檢驗統計量分佈中建立大量樣本,您可以使用其分位數以您想要的任何顯著性水平進行假設檢驗。對於 KS 檢驗統計量,此分佈稱為 Kolmogorov 分佈。
請注意,對於 KS 檢驗,這只是浪費計算量,因為理論上分位數的特徵非常簡單,但該過程通常適用於任何假設檢驗。