資料分析基礎(2)——正態分佈檢驗

如上一篇文章所述,樣本所屬總體服從正態分佈是資料分析和資料探勘等資料處理的重要前提。如果我們採集的樣本並不能確認其總體是否服從正態分佈,那麼資料處理的結果就是不可靠的。因此,對樣本資料進行正態分佈檢驗十分必要。常用的正態分佈檢驗方法有以下幾種:

1。基於偏度和峰度的假設檢驗

基於偏度-峰度的檢驗是利用了正態分佈偏度(3階矩)和峰度(4階矩)都為0的特點。

資料分析基礎(2)——正態分佈檢驗

如果樣本資料能滿足偏度和峰度均為0的假設,則可以認為總體服從正態分佈。由於該檢驗是基於偏度檢驗和峰度檢驗的,樣本數量需要8個以上。以下normaltest函式就使用該原理進行正態分佈檢驗。

scipy。stats。normaltest(X)

該函式輸出兩個結果,第一個為檢驗統計量,第二個為p值。如果p值大於0。05(常用顯著水平)即可認定總體服從正態分佈。

使用偏度和峰度擬合優度檢驗的還有Jarque–Bera檢驗法。其統計量為

資料分析基礎(2)——正態分佈檢驗

S為偏度,K為峰度,n為樣本數或自由度

同樣,Jarque–Bera檢驗樣本數量也需要8個以上。其使用方法如下:

scipy。stats。self_JBtest(X)

該函式輸出兩個結果,第一個為檢驗統計量,第二個為p值。如果p值大於0。05(常用顯著水平)即可認定總體服從正態分佈。

2。Kolmogorov-Smirnov檢驗

Kolmogorov-Smirnov檢驗用於比較一個頻率分佈f(x)與理論分佈g(x)或者兩個觀測值分佈的檢驗方法。其原假設H0:兩個資料分佈一致或者資料符合理論分佈。D=max| f(x)- g(x)|,當實際觀測值D>D(n,α)則拒絕H0,否則則接受H0假設。D(n,α)為自由度為n,顯著水平為α時的統計量閾值。

資料分析基礎(2)——正態分佈檢驗

K-S檢驗原理

KS檢驗與其他方法不同是KS檢驗不需要知道資料的分佈情況,是一種非引數檢驗方法,理論上可以檢驗任何一種分佈情況(不限於正態分佈檢驗)。當然付出的代價就是靈敏度沒有專門針對某種分佈的檢驗方法高(比如上面的normaltest)。另外,由於大多數KS檢驗軟體在實現是都用大樣本近似公式,因此KS演算法更適合大樣本(300以上)檢驗。

以下方法就是使用KS檢驗進行正態分佈檢驗:

kstest(X,“norm”)

該函式輸出兩個結果,第一個為檢驗統計量,第二個為p值。如果p值大於0。05(常用顯著水平)即可認定總體服從正態分佈。

順便說一下,Kolmogorov大神在統計學界可是個里程碑式的人,1933年,他出版了《機率論基礎》一書,建立了機率論公理結論,這是一部具有劃時代意義的鉅著,困擾統計學界幾百年的機率論基本定義的問題得以解決。當然他的貢獻涉及到數學的所有領域,可以說是20世紀最傑出的、最有影響的數學家之一。

資料分析基礎(2)——正態分佈檢驗

柯爾莫果洛夫 (Andrey Nikolaevich Kolmogorov,1903。4。25-1987。10。20)

3。Shapiro-Wilk檢驗

Shapiro-Wilk檢驗由S。S。Shapiro與M。B。Wilk提出,常簡稱為Shapiro檢驗(偶被稱為W檢驗),專用於正態分佈檢驗(8<樣本量n<50)。

該方法將樣本順序編排,然後根據以下公式計算統計量W的值,該值越接近於1,且顯著水平大於0。05時,就可以接受樣本所屬總體服從正態分佈的假設。

資料分析基礎(2)——正態分佈檢驗

以下方法就是使用Shapiro檢驗進行正態分佈檢驗:

scipy。stats。shapiro(X)

該函式輸出兩個結果,第一個為檢驗統計量,第二個為p值。如果p值大於0。05(常用顯著水平)即可認定總體服從正態分佈。

4。Anderson-Darling檢驗

Anderson-Darling檢驗,簡稱Anderson檢驗。可以檢驗樣本資料是否服從‘norm’, ‘expon’, ‘gumbel’, ‘extreme1’ or ‘logistic’分佈,是KS檢驗的增強版,也是一種非引數檢驗。適合於大樣本(大於300)的總體分佈檢驗。與KS檢驗相比,Anderson檢驗度量經驗累積機率和理論累積機率之差的方法顯得更加自然,考慮了所有的差異點,而不是像K-S檢驗那樣只考慮一個最大的。下面的公式就是其方法:

資料分析基礎(2)——正態分佈檢驗

以下方法使用Anderson檢驗進行正態分佈檢驗:

scipy。stats。anderson(x, dist=‘norm’)

其輸出結果較為複雜,如:

AndersonResult(statistic=0。68097695613924714,

critical_values=array([ 0。555, 0。632,

0.759, 0.885, 1.053

]),

significance_level=array([ 15。 , 10。 ,

5. , 2.5, 1.

]))

第一個值為統計量,第三個值為顯著水平百分數,第二個值為不同顯著水平下的閾值。如果統計量小於某項閾值,則表示在對應顯著水平下可以判定總體服從正態分佈。

如上例,說明在0。05,0。025,0。01水平下,可以判定總體服從正態分佈,而0。15,0。1顯著水平下,不能確定總體是否服從正態分佈。

5。lilliefors檢驗

Lilliefors檢驗將KS檢驗改進為專門的正態分佈檢驗。它用樣本均值和標準差代替總體均值和標準差,來估計樣本的總體是否服從這兩個引數確定的正態分佈,這就是所謂的Lilliefors正態性檢驗。在很多統計軟體中通常採用這種方法。由於該檢驗方法基於KS檢驗,因此可用於較大樣本的正態性分析(樣本數量50以上300以內)。

以下方法使用Lilliefors檢驗進行正態分佈檢驗:

statsmodels。stats。diagnostic。lilliefors(X)

該函式輸出兩個結果,第一個為檢驗統計量,第二個為p值。如果p值大於0。05(常用顯著水平)即可認定總體服從正態分佈。

6。Ryan-Joiner 檢驗

Ryan-Joiner檢驗透過計算資料與資料的正態分值之間的相關性來評估正態性。如果相關係數接近 1,則總體就很有可能呈正態分佈。Ryan-Joiner 統計量可以評估這種相關性的強度;如果它未達到適當的臨界值,您將否定總體呈正態分佈的原假設。此檢驗類似於 Shapiro-Wilk 正態性檢驗。

資料分析基礎(2)——正態分佈檢驗

Ryan-Joiner檢驗統計量

該檢驗目前筆者還沒有找到python版的軟體包,日後找到再介紹給大家。

7。QQ圖視覺化檢驗

QQ圖透過把測試樣本資料的分位數與已知分佈相比較,從而來檢驗資料的分佈情況。利用QQ圖鑑別樣本資料是否近似於正態分佈,只需看QQ圖上的點

是否近似地聚集在一條斜率為正的直線附近

。如果是則說明是正態分佈,該直線的

斜率為標準差,截距為均值

。繪圖原理參看下圖。

資料分析基礎(2)——正態分佈檢驗

QQ圖繪製過程

以下方法可以根據樣本資料繪製qq圖。

import statsmodels。api as sm import pylab sm。qqplot(X, line=‘s’) pylab。show()

資料分析基礎(2)——正態分佈檢驗

散點集中在對角線附近,可接受樣本整體服從正態分佈

用以下方法同樣可以繪製QQ圖。

import matplotlib。pyplot as pltimport scipy。stats as statsstats。probplot(X, dist=“norm”, plot=plt)plt。show()