Python怎么檢驗數據的正態分布


在對數據建模前,很多時候我們需要對數據做正態性檢驗,進而通過檢驗結果確定下一步的分析方案。下面介紹 Python 中常用的幾種正態性檢驗方法:
scipy.stats.kstest

kstest 是一個很強大的檢驗模塊,除了正態性檢驗,還能檢驗 scipy.stats 中的其他數據分布類型

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

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

rvs:待檢驗的數據
cdf:檢驗方法,這里我們設置為‘norm’,即正態性檢驗
alternative:默認為雙尾檢驗,可以設置為‘less’或‘greater’作單尾檢驗
>>> import numpy as np >>> from scipy.stats import kstest >>> x = np.linspace(-15, 15, 9) >>> kstest(x, 'norm') (0.44435602715924361, 0.038850142705171065) 

輸出結果中第一個為統計數,第二個為P值

具體見官方文檔 scipy.stats.kstest
scipy.stats.shapiro

與 kstest 不同,shapiro 是專門用來做正態性檢驗的模塊
注意:shapiro 不適合做樣本數>5000的正態性檢驗,檢驗結果的P值可能不准確

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

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

>>> from scipy import stats >>> np.random.seed(12345678) >>> x = stats.norm.rvs(loc=5, scale=3, size=100) >>> stats.shapiro(x) (0.9772805571556091, 0.08144091814756393) 

輸出結果中第一個為統計數,第二個為P值

具體見官方文檔 scipy.stats.shapiro
scipy.stats.normaltest

normaltest 也是專門做正態性檢驗的模塊

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

這里的三個參數都有必要看一下:

a:待檢驗的數據
axis:默認為0,表示在0軸上檢驗,即對數據的每一行做正態性檢驗,我們可以設置為 axis=None 來對整個數據做檢驗 nan_policy:當輸入的數據中有空值時的處理辦法。默認為 ‘propagate’,返回空值;設置為 ‘raise’ 時,拋出錯誤;設置為 ‘omit’ 時,在計算中忽略空值。 
>>> import numpy as np >>> from scipy.stats import normaltest >>> x = np.random.randn(10, 20) >>> normaltest(x, axis=None) >>> NormaltestResult(statistic=0.3582062593239369, pvalue=0.83601967652440512) 

輸出結果中第一個為統計數,第二個為P值

具體見官方文檔 scipy.stats.normaltest
scipy.stats.anderson

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

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

參數這里就不多說了,但對輸出結果說明一下:
anderson 有三個輸出值,第一個為統計數,第二個為評判值,第三個為顯著性水平, 評判值與顯著性水平對應
對於正態性檢驗,顯著性水平為:15%, 10%, 5%, 2.5%, 1%

import numpy as np
from scipy.stats import anderson
x = np.linspace(-15, 15, 9)
anderson(x)
AndersonResult(statistic=0.13676646631470213, critical_values=array([ 0.507, 0.578, 0.693, 0.808, 0.961]), significance_level=array([ 15. , 10. , 5. , 2.5, 1. ]))




轉自:https://blog.csdn.net/QimaoRyan/article/details/72861387 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM