1.描述性統(tǒng)計方法(直觀)
1.直方圖
由于正態(tài)分布具有非常典型的中間高,兩邊低的圖形特征,如果樣本數(shù)據(jù)并不服從正態(tài)分布,我們可以通過直方圖很快地分辨出來。更進一步地,Python可以輔助生成基于樣本數(shù)據(jù)估計的正態(tài)曲線,這樣就容易輔助我們進行判斷。
圖形觀察雖然直觀,但是部分研究者認為單純觀察圖形過于主觀,因此我們也可以選擇使用統(tǒng)計檢驗的方法去研究數(shù)據(jù)是否服從正態(tài)分布。
操作步驟:
導入相關的包及數(shù)據(jù)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#用來顯示中文標簽
plt.rcParams['font.sans-serif']=['SimHei']
#用來正常顯示負號
plt.rcParams['axes.unicode_minus']=False
#導入數(shù)據(jù)
data = pd.read_excel('年齡_收入.xlsx')
#繪制年齡的頻率直方圖,20個箱體
plt.hist(data.年齡,bins = 20)
#繪制年齡帶正態(tài)曲線的頻率直方圖
sns.distplot(data.年齡)
2 P-P圖及Q-Q圖
直方圖是最長用于觀察數(shù)據(jù)分布的常用圖形選項,尤其是帶正態(tài)曲線的直方圖,可以非常直觀地看到實際數(shù)據(jù)分布和正態(tài)曲線的對比,而P-P圖及Q-Q圖則是另一種選擇,它可以直觀給出實際數(shù)據(jù)分布和理論的差距。
值得注意的是,雖然P-P圖及Q-Q圖常用用于判斷數(shù)據(jù)樣本是否服從正態(tài)分布,但實際上它們也能判斷數(shù)據(jù)樣本是否服從其他的分布
P-P圖:反映的是數(shù)據(jù)的實際累積概率與假定所服從分布的理論累積概率的符合程度。在此處,我們所假定的分布就是正態(tài)分布,如果數(shù)據(jù)樣本是服從正態(tài)分布的話,那么實際的累積概率與理論的累積概率應該是相對一致的,放映在圖形中就是數(shù)據(jù)點應該沿著圖形的對角線分布。
Q-Q圖的原理與P-P圖幾乎一致。P-P圖考察的是實際分布與理論分布的累積概率分布差異,而Q-Q圖考察的是實際百分位數(shù)與理論百分位數(shù)的差異。同理在此處,我們所假定的分布就是正態(tài)分布,如果數(shù)據(jù)樣本是服從正態(tài)分布的話,那么實際的分布應該是相對一致的,反映在圖形中就是數(shù)據(jù)點應該沿著圖形的對角線分布。
在Python中,statsmodels包中目前主要提供的是Q-Q圖的繪制
import statsmodels.api as sm
import pylab
sm.qqplot(data.年齡, line='s')
pylab.show()
sm.qqplot(data.收入, line='s')
pylab.show()
2.K-S檢驗
柯爾莫戈洛夫-斯米諾夫檢驗(Kolmogorov-Smirnov test),一般又稱K-S檢驗,是一種基于累計分布函數(shù)的非參數(shù)檢驗,用以檢驗兩個經驗分布是否不同或一個經驗分布與另一個理想分布是否不同。
K-S檢驗的原假設是“樣本數(shù)據(jù)來自的分布與正態(tài)分布無顯著差異”,因此一般來說,KS檢驗最終返回兩個結果,分別是檢驗統(tǒng)計量及P值,檢驗結果P>0.05才是我們的目標。
from scipy.stats import kstest
#cdf中可以指定要檢驗的分布,norm表示我們需要檢驗的是正態(tài)分布
#常見的分布包括norm,logistic,expon,gumbel等
kstest(data.年齡,cdf = "norm")
實際上,GraphPad不推薦使用單純的Kolmogorov-Smirnov test方法
3. W檢驗
夏皮洛-威爾克檢驗(Shapiro—Wilk test),一般又稱W檢驗。W檢驗是一種類似于利用秩進行相關性檢驗的方法。同樣需要注意的是,W檢驗與K-S檢驗一樣,原假設是“樣本數(shù)據(jù)來自的分布與正態(tài)分布無顯著差異”,因此一般來說,W檢驗最終返回兩個結果,分別是檢驗統(tǒng)計量及P值。,檢驗結果P>0.05才是我們的目標。
當數(shù)據(jù)集中的數(shù)據(jù)無重復值時,該方法的檢驗效果比較好,但是當數(shù)據(jù)集中有些數(shù)據(jù)不是獨一無二的,即有些數(shù)據(jù)的數(shù)值是相同的,那么該方法的檢驗效果就不是很好
from scipy.stats import shapiro
shapiro(data.年齡)
4.D'Agostino and Pearson omnibus normality test
GraphPad官方推薦使用該方法。
首先計算 偏度和峰度以便在不對稱和形狀方面量化分布離高斯分布的距離。然后,其計算這些值中的每一個與高斯分布的預期值之間的差異,并基于這些差異的總和,計算各P值。這是一種通用和強大的正態(tài)性檢驗,推薦使用。請注意,D'Agostino開發(fā)了幾種正態(tài)性檢驗。Prism使用的其中一個是“綜合K2”檢驗。
import scipy.stats
from scipy import stats
stats.normaltest(data)#normaltest中pvalue>0.05符合正態(tài)分布
5.安德森-達令檢驗(Anderson-Darling test)
安德森-達令檢驗樣本數(shù)據(jù)是否來自特定分布,包括分布:'norm', 'expon', 'gumbel', 'extreme1' or 'logistic'.
原假設 H0:樣本服從特定分布; 備擇假設 H1:樣本不服從特定分布
##用Anderson-Darling檢驗生成的數(shù)組是否服從正態(tài)分布
import scipy.stats as stats
stats.anderson(data_norm, dist='norm')
'''輸出AndersonResult(statistic=0.18097695613924714,
critical_values=array([ 0.555, 0.632, 0.759, 0.885, 1.053]),
significance_level=array([ 15. , 10. , 5. , 2.5, 1. ]))
如果輸出的統(tǒng)計量值statistic < critical_values,則表示在相應的significance_level下,
接受原假設,認為樣本數(shù)據(jù)來自給定的正態(tài)分布。'''
實際上,從已有的文獻表明,對于數(shù)據(jù)分布的正態(tài)性研究,首選方法是圖形觀察,即利用直方圖、P-P圖或Q-Q圖進行觀察,如果分布嚴重偏態(tài)和尖峰分布則建議進行進一步的假設檢驗。如果圖形分布結果不好判斷,則再進行正態(tài)性檢驗。
實際上,從已有的文獻表明,對于數(shù)據(jù)分布的正態(tài)性研究,首選方法是圖形觀察,即利用直方圖、P-P圖或Q-Q圖進行觀察,如果分布嚴重偏態(tài)和尖峰分布則建議進行進一步的假設檢驗。如果圖形分布結果不好判斷,則再進行正態(tài)性檢驗。
其次,對于檢驗方法來說,對于K-S檢驗及W檢驗結果來說,有文獻采用蒙特卡羅模擬方法進行多次驗證,結果表明W檢驗結果相比于大部分方法都有較大的檢驗功效,而K-S方法的檢驗結果相對不佳。并且部分學者認為,K-S檢驗的實用性遠不如圖形工具,因為在樣本量少時,該檢驗不太敏感,但是在樣本量大時,該檢驗卻過于敏感。因此正常情況下,我們更常采用W檢驗的結果。
值得注意的是,雖然說K-S檢驗結果相對不佳,但是不同檢驗方法對于樣本量的敏感度是不一樣的。在樣本量較小的情況下(小于50個樣本的情況下),請優(yōu)先選擇W檢驗;在樣本量50-5000的情況下,可以酌情使用W檢驗及K—S檢驗;在樣本量大于5000的情況下,請使用K-S檢驗結果,尤其是在SPSS中,當樣本量大于5000的情況下,將只顯示K-S檢驗結果,而不顯示W(wǎng)檢驗結果。