對數據進行建模處理時,常需要進行數據分布檢驗。
import numpy as np from scipy import stats a = np.random.normal(0,1,50) '''輸出結果中第一個為統計量,第二個為P值(統計量越接近1越表明數據和正態分布擬合的好, P值大於指定的顯著性水平,接受原假設,認為樣本來自服從正態分布的總體)''' print(stats.shapiro(a)) '''輸出結果中第一個為統計量,第二個為P值(注:統計量越接近0就越表明數據和標准正態分布擬合的越好, 如果P值大於顯著性水平,通常是0.05,接受原假設,則判斷樣本的總體服從正態分布)''' print(stats.kstest(a, 'norm')) '''輸出結果中第一個為統計量,第二個為P值(注:p值大於顯著性水平0.05,認為樣本數據符合正態分布)''' print(stats.normaltest(a))
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':使用檢驗統計量的漸進分布
scipy.stats.shapiro(W檢驗)
與 kstest 不同,shapiro 是專門用來做正態性檢驗的模塊
原假設:樣本數據符合正態分布
注意:shapiro是用來檢驗小樣本數據(數據量<>
scipy.stats.shapiro(x, a=None, reta=False)
一般我們只用 x 參數就行,x 即待檢驗的數據
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' 時,在計算中忽略空值。