非參數檢驗(non-parametric test):對總體分布形式沒有要求,不比較總體參數,只比較總體分布的位置是否相同,也被稱為無分布方法(distribution-free method)。相對於參數檢驗基本只能用於數值型數據的情況,非參數檢驗還可以用於類別型數據。
由於很多參數檢驗要求總體服從正態分布,因此對於不服從正態分布的情況,統計學家想到用排序的方法來規避,用樣本的排序情況來推斷總體的分布情況。
將數據從小到大排序后確定的次序號稱為“秩”,而這些次序號的和稱為“秩和”。秩和檢驗就是用秩和作為統計量進行假設檢驗的方法。
非參數檢驗大多借助秩和或符號技術對原始序列進行轉化,然后再用類似參數檢驗的手段來進行檢驗。
下面按用途分類,介紹幾種非參數檢驗類型:
1,比較樣本和總體的中位數是否相同,以此來檢驗樣本和總體之間的差異性(用於此種用途的非參數檢驗方法即是單樣本t檢驗的替代方法)
符號檢驗(Sign Test):略
例子:https://www.statisticshowto.datasciencecentral.com/one-sample-median-test/
可以用statsmodels來進行檢驗:
statsmodels.stats.descriptivestats.
sign_test
(samp, mu0=0)
威爾科克森符號秩檢驗 或 威爾科克森符號秩和檢驗 (Wilcoxon Signed Rank Test / Wilcoxon Signed Rank Sum Test) ):略
符號檢驗只利用了數據大於0或小於0的信息,即數據是正號或負號,但是對數據之間差異大小這個信息沒有利用。而Wilcoxon符號秩檢驗既考慮正負符號,也利用差值大小,因此比符號檢驗更有效。
可以用scipy來進行檢驗:
scipy.stats.
wilcoxon
(x, y=None, zero_method='wilcox', correction=False, alternative='two-sided')
2,比較兩個樣本中成對觀測值的差值中位數是否和假設的中位數相同(配對樣本),以此來檢驗同一個總體經過不同處理后的差異或接受處理前后的差異(用於此種用途的非參數檢驗方法即是配對t檢驗的替代方法)
符號檢驗(Sign Test):將樣本的成對觀測值相減,然后求取差值的符號,如果正負符號的個數相差不大,那就說明兩總體分布情況相同。舉個例子,比如說差值的正負符號一共有10個,其中2個是正號,其余8個是負號,那就可以用二項分布來檢驗,相當於試驗了10次,有2次成功,因為我們比較的是中位數,因此成功的概率就是0.5,那么試驗10次里面成功2次的概率就是,算出來差不多是0.044(小於α=0.05),因此我們可以說兩樣本分布情況不同。符號檢驗適用於總體偏斜分布的情況。
例子:https://www.statisticshowto.datasciencecentral.com/sign-test/
可以用statsmodels來進行檢驗:
statsmodels.stats.descriptivestats.
sign_test
(samp, mu0=0)
威爾科克森符號秩檢驗 或 威爾科克森符號秩和檢驗 (Wilcoxon Signed Rank Test / Wilcoxon Signed Rank Sum Test) ):將樣本的成對觀測值相減,然后求取差值的符號和絕對值,並基於絕對值的排序等級(升序)求秩和,比較正秩和或負秩和的大小,如果正負秩和相差不大,那就說明兩樣本分布情況相同。當n(n+1)/2>20時,正秩和或負秩和的抽樣分布近似服從正態分布,可以使用z檢驗來查看正秩和或負秩和的抽樣均值是否和總體均值相同,其總體均值為,總體標准差為
,以此計算出z值和p值來進行判斷。威爾科克森符號秩檢驗適用於總體對稱分布的情況。
例子:https://www.statisticshowto.datasciencecentral.com/wilcoxon-signed-rank-test/
可以用scipy來進行檢驗:
scipy.stats.
wilcoxon
(x, y=None, zero_method='wilcox', correction=False, alternative='two-sided')
3,比較兩個樣本的中位數是否相同(獨立樣本),以此來檢驗兩個總體之間的差異性(用於此種用途的非參數檢驗方法即是獨立樣本t檢驗的替代方法)
曼-惠特尼U檢驗(Mann-Whitney U Test):也稱為威爾科克森秩和檢驗(Wilcoxon rank-sum test),Mann-Whitney-Wilcoxon Test(MWW)或Wilcoxon-Mann-Whitney test。把兩組樣本混和在一起,然后基於值的排序等級(升序)分別求出兩組樣本的秩和,比較兩組樣本秩和的大小,如果相差不大,那就說明兩樣本分布情況相同。當n1>=7並且n2>=7時,兩組樣本秩和的抽樣分布近似服從正態分布,可以使用z檢驗來查看兩組秩和的抽樣均值是否和總體均值相同,其總體均值為,總體標准差為
,以此計算出z值和p值來進行判斷。曼-惠特尼U檢驗可以用於數值型數據和類別型數據。
例子:https://www.statisticshowto.datasciencecentral.com/mann-whitney-u-test/
可以用scipy來進行檢驗:
scipy.stats.
mannwhitneyu
(x, y, use_continuity=True, alternative=None)
4,比較三個及以上樣本的中位數是否相同(獨立樣本),以此來檢驗多個總體之間的差異性(用於此種用途的非參數檢驗方法即是單因素方差分析的替代方法)
Kruskal-Wailis檢驗(Kruskal-Wailis H Test):把全部樣本混和在一起,然后基於值的排序等級(升序)分別求出各組樣本的秩均值,如果各組樣本的秩均值相差不大,那就說明這些樣本分布情況相同。當每組樣本的觀測值數量都大於5時,檢驗統計量(H)的抽樣分布近似服從自由度為k-1的卡方分布(k為總體個數),可以用卡方檢驗來查看各組樣本秩和均值是否相同。H檢驗統計量的計算公式:,其中k:樣本組數,ni:樣本i中觀測值的個數,n:觀測值的總數,Ri:樣本i的秩和。
例子:https://www.statisticshowto.datasciencecentral.com/kruskal-wallis/
可以用scipy來進行檢驗:
scipy.stats.
kruskal
(*args, **kwargs)
5,比較樣本和總體的比率是否相同,以此來檢驗樣本和總體之間的差異性(用於此種用途的非參數檢驗方法即是單樣本比率檢驗的替代方法)
二項分布檢驗(Binomial Test):在大樣本的情況下(np≥5,n(1-p)≥5),比率p的抽樣分布近似服從正態分布,因此,可以用z檢驗來查看。如果不滿足大樣本的情況,那么就要用二項分布來檢驗,用和α進行比較來判斷。
注:如果不是雙尾檢驗,則需用累積分布函數。
例子:https://www.statisticshowto.datasciencecentral.com/binomial-test/
可以用scipy來進行檢驗:
scipy.stats.
binom_test
(x, n=None, p=0.5, alternative='two-sided')
此外,還有其他很多非參數檢驗方法,請見下圖:(下圖摘自:https://zhuanlan.zhihu.com/p/49472487)