R

如果兩個樣本來自同一分佈,則進行非參數檢驗

  • July 2, 2017

我想檢驗兩個樣本來自同一個總​​體的假設,而不對樣本或總體的分佈做出任何假設。我該怎麼做?

從 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:

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 的整體,而不是僅僅挑選出最大的距離。

編輯:

假設我們有大小樣本和,我們想要應用我們的假設檢驗。

要將其轉換為採樣類型的過程,我們可以執行以下操作:

  1. 生成大小樣本和來自相同的分佈。對於 KS 測試(值得注意的是,IMO),只要分佈在每次迭代中發生變化,只要和保持原樣。
  2. 計算樣本的距離度量。對於 KS 測試,這只是最大值。經驗 CDF 之間的差異。
  3. 存儲結果並返回步驟 1。

最終,您將從零假設下的檢驗統計量分佈中建立大量樣本,您可以使用其分位數以您想要的任何顯著性水平進行假設檢驗。對於 KS 檢驗統計量,此分佈稱為 Kolmogorov 分佈。

請注意,對於 KS 檢驗,這只是浪費計算量,因為理論上分位數的特徵非常簡單,但該過程通常適用於任何假設檢驗。

引用自:https://stats.stackexchange.com/questions/288416

comments powered by Disqus