正態分布檢驗的那些方法

在對數據建模前需要做數據探索,比如做特徵相關性的時候,經常會用到假設檢驗,很多時候我們需要對數據做正態性檢驗,進而通過檢驗結果確定下一步的分析方案。下面介紹 Python 中常用的幾種正態性檢驗方法:

scipy.stats.kstest(K-S檢驗)

kstest 是一個很強大的檢驗模塊,除了正態性檢驗,還能檢驗 scipy.stats 中的其他數據分佈類型,僅適用於連續分佈的檢驗,

原假設:數據符合正態分佈

kstest(rvs, cdf, args=(), N=20, alternative='two_sided', mode='approx', **kwds)

對於正態性檢驗,我們只需要手動設置三個參數即可:

rvs:待檢驗的一組一維數據

cdf:檢驗方法,例如'norm','expon','rayleigh','gamma',這裡我們設置為'norm',即正態性檢驗

alternative:默認為雙尾檢驗,可以設置為'less'或'greater'作單尾檢驗

model:'approx'(默認),使用檢驗統計量的精確分佈的近視值,

'asymp':使用檢驗統計量的漸進分佈

正態分佈檢驗的那些方法

輸出結果中第一個為統計量,第二個為P值(注:統計量越接近0就越表明數據和標準正態分佈擬合的越好,如果P值大於顯著性水平,通常是0.05,接受原假設,則判斷樣本的總體服從正態分佈)

scipy.stats.shapiro(W檢驗)

與 kstest 不同,shapiro 是專門用來做正態性檢驗的模塊

原假設:樣本數據符合正態分佈

注意:shapiro是用來檢驗小樣本數據(數據量<50),不適合做(樣本數>5000)的正態性檢驗,檢驗結果的P值可能不準確

scipy.stats.shapiro(x, a=None, reta=False)

一般我們只用 x 參數就行,x 即待檢驗的數據

正態分佈檢驗的那些方法

輸出結果中第一個為統計量,第二個為P值(統計量越接近1越表明數據和正態分佈擬合的好,P值大於指定的顯著性水平,接受原假設,認為樣本來自服從正態分佈的總體)

scipy.stats.normaltest

normaltest 也是專門做正態性檢驗的模塊,原理是基於數據的skewness和kurtosis

scipy.stats.normaltest(a, axis=0, nan_policy='propagate')

a:待檢驗的數據

axis:默認為0,表示在0軸上檢驗,即對數據的每一行做正態性檢驗,我們可以設置為 axis=None 來對整個數據做檢驗

nan_policy:當輸入的數據中有空值時的處理辦法。默認為 'propagate',返回空值;設置為 'raise' 時,拋出錯誤;設置為 'omit' 時,在計算中忽略空值。

正態分佈檢驗的那些方法

輸出結果中第一個為統計量,第二個為P值(注:p值大於顯著性水平0.05,認為樣本數據符合正態分佈)

scipy.stats.anderson

anderson 是修改版的 kstest,說是增強版也不為過。也可以做多種分佈的檢驗,默認的檢驗時正態性檢驗。

scipy.stats.anderson(x, dist='norm')

參數x表示輸入數據,輸出結果:

正態分佈檢驗的那些方法

anderson 有三個輸出值,第一個為統計數,第二個為評判值,第三個為顯著性水平, 評判值與顯著性水平對應

對於正態性檢驗,顯著性水平為:15%, 10%, 5%, 2.5%, 1%

基於偏度和峰度的檢驗,可用於檢驗樣本數據是否來自正態分佈,易受異常值影響,不能用於小樣本。(雅克-貝拉檢驗Jarque-Bera test:正態性檢驗)

正態分佈檢驗的那些方法

偏度檢驗:H0 : 樣本數據的偏度=0 H1 :樣本數據的偏度≠0

拒絕原假設則認為樣本數據不是來自正態總體,但不拒絕原假設不能說明樣本數據來自正態總體,只能說明數據對稱,只有在確定對稱性是影響分佈的形態的唯一因素時,偏度檢驗才適用。

峰度檢驗:H0 : 樣本數據的峰度=3 H1 :樣本數據的峰度≠3

拒絕原假設則認為樣本數據不是來自正態總體,但不拒絕原假設不能說明樣本數據來自正態總體,容易出錯不推薦使用。

(二)SPSS中正態性檢驗的方法

1、計算偏度(Skewness)和峰度(Kurtosis) ,當它們接近0時,為正態。

正態分佈檢驗的那些方法

正態分佈檢驗的那些方法


分享到:


相關文章: