对数据正态性进行检验,原假设H0:样本数据服从正态分布。

1.scipy.stats.shapiro

scipy.stats.shapiro是一种Shapiro-Wilk test,The Shapiro-Wilk test tests the null hypothesis(零假设) that the data was drawn from a normal distribution。

scipy.stats.shapiro适用于小样本数据,只能检查正态分布。

s,p=scipy.stats.shapiro(x)

返回值s为检验统计量,p为p值,当p值大于指定的显著性水平,则接受原假设。

2.scipy.stats.normaltest

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

参数介绍:
axis:默认为0,根据哪一维度进行检验。axis=None 表示对整个数据做检验。
nan_policy:当输入的数据中有nan时,‘propagate’,返回空值;‘raise’ ,抛出错误;‘omit’ 时,忽略空值。

返回值中,第一个是统计量,第二个是P值。

3.scipy.stats.kstest

scipy.stats.kstest是一种K-S检验。它不局限于正态检验,可以检验多种分布。

statistic,p=scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', mode='approx')

参数介绍:
rvs:待检验数据。
cdf:检验分布,例如’norm’,‘expon’,‘rayleigh’,'gamma’等分布,设置为’norm’时表示正态分布。
alternative:默认为双侧检验,可以设置为’less’或’greater’作单侧检验。
model:定义用于计算p值的分布,‘approx’(默认值),表示使用检验统计量的精确分布的近似值;‘asymp’:使用检验统计量的渐进分布。

返回值中,第一个为统计量,第二个为P值。

4.scipy.stats.anderson

不局限于正态检验,可以检验多种分布(正态分布、指数分布、logistic 或者 Gumbel等分布)。

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

参数介绍:
x:样本数据
dist:要检验的分布

返回值中,第一个表示统计值,第二个表示评价值,第三个是显著性水平;评价值和显著性水平对应,不同分布显著性水平不同。

结果说明:当统计值大于评价值时,表示在对应显著性水平下,拒绝原假设。

5.代码实现

import numpy as np
from scipy import stats

b = np.linspace(0, 10, 100)

# Shapiro-Wilk test
s,p = stats.shapiro(b)
print(s,p)

# kstest
s,p = stats.kstest(b, 'norm')
print(s,p)

# normaltest
s,p = stats.normaltest(b)
print(s,p)

# Anderson-Darling test
s,c,p = stats.anderson(b,dist='norm')
print(s,c,p)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐