Fork me on GitHub

2022-10-19-机器学习系列文章-数据服从正态分布检验

背景

正态分布(Normal Distribution)概念是由法国数学家棣莫弗(Abraham de Moivre)于1733年首次提出的,后由我们的数学王子德国数学家高斯(Gauss)率先将其应用于天文学研究,由于高斯的工作对后世的影响非常大,所以正态分布也有被叫作“高斯分布”。

https://blog.csdn.net/qq_33924470/article/details/114668701

https://www.biaodianfu.com/python-normal-distribution-test.html

第一部分 图示法

1、直方图:可以直观显示数据的分布形式。

2、P-P图和Q-Q图:P-P图反映了变量的实际累积概率与理论累积概率的符合程度,Q-Q图反映了变量的实际分布与理论分布的符合程度,两者意义相似,都可以用来考察数据是否服从某种分布类型。若数据服从正态分布,则数据点应与理论直线基本重合。

1.2.1 P-P图

P-P图反映的是数据的实际累积概率与假定所服从分布的理论累积概率的符合程度。在此处,我们所假定的分布就是正态分布,如果数据样本是服从正态分布的话,那么实际的累积概率与理论的累积概率应该是相对一致的,放映在图形中就是数据点应该沿着图形的对角线分布。

1.2.2 Q-Q图

Q-Q图的原理与P-P图几乎一致。P-P图考察的是实际分布与理论分布的累积概率分布差异,而Q-Q图考察的是实际百分位数与理论百分位数的差异。同理在此处,我们所假定的分布就是正态分布,如果数据样本是服从正态分布的话,那么实际的分布应该是相对一致的,反映在图形中就是数据点应该沿着图形的对角线分布。

第二部分 分布特征比较法

https://www.cnblogs.com/zwt20120701/p/10872243.html

2.1 偏度(Skewness)和峰度(Kurtosis)

对于数据分布,通常可以计算两个分布特征:偏度(Skewness)和峰度(Kurtosis)。

2.1.1 偏度(Skewness):数据分布不对称的方向及其程度。

峰度反应的是图像的尖锐程度:峰度越大,表现在图像上面是中心点越尖锐。在相同方差的情况下,中间一大部分的值方差都很小,为了达到和正太分布方差相同的目的,必须有一些值离中心点越远,所以这就是所说的“厚尾”,反应的是异常点增多这一现象。

指标度量数据分布的对称性。

计算公式:

结果判断:

当偏度≈0时,可认为分布近似服从正态分布;

当偏度>0时,分布为右偏,称为正偏态;

当偏度<0时,分布为左偏,称为负偏态;

2.1.2 峰度(Kurtosis):描述数据分布形态的陡缓程度

数据分布顶的尖锐程度。

当峰度≈0时,可认为分布近似服从正态分布;

当峰度>0时,分布的峰态陡峭;

当峰度<0时,分布的峰态平缓;

2.2 验证

利用偏度和峰度进行正态性检验时,可以同时计算其相应的Z评分(Z-score),

即:

偏度:Z-score=偏度值/标准误

峰度:Z-score=峰度值/标准误

Fisher skewness coefficient = skewness/standard error of skewness

Fisher kurtosis coefficient = kurtosis/standard error of kurtosis

1
2
3
N = 样本数
偏度标准误 = sqrt(6*N*(N-1)/((N-2)*(N+1)*(N+3)))
峰度标准误 = sqrt(4*(N**2 -1)*偏度标准误 /((N-3)*(N+5)))

参考spss代码链接:https://www.stat.cmu.edu/~hseltman/files/spssSkewKurtosis.R

在α=0.05的检验水平下,若Z-score在±1.96之间,则可认为数据近似服从正态分布。

pd.Series.skew(x)

第三部分 非参数检验

https://www.biaodianfu.com/python-normal-distribution-test.html

正态性检验属于非参数检验,原假设为“样本来自的总体与正态分布无显著性差异”,只有P>0.05才能接受原假设,及数据符合正态分布。

非参数检验是在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态等进行推断的方法。 由于非参数检验方法在推断过程中不涉及有关总体分布的参数,因而得名为“非参数”检验。

常见的检验方法如下:

3.1 Shapiro-Wilk检验

Shapiro–Wilk test是正态性检验最为有效的方法之一,是一种在频率统计中检验正态性的方法,但其测试基础较难理解(不多加叙述)。该方法在每一个样本值都是唯一时的检验效果最好,但若样本中存在几个值重复的情况下该方法便会大打折扣。因此该方法只适用于小样本,推荐样本量为7~2000,Origion中允许样本大小为3~5000,当样本量超过5000时不再适用。该方法仅适用于正态性检验。

方法:scipy.stats.shapiro(x)

官方文档:SciPy v1.1.0 Reference Guide

参数:x - 待检验数据

返回:W - 统计数;p-value - p值

注意事项:适用于小样本数据。

3.2 Kolmogorov–Smirnov检验

柯尔莫戈洛夫-斯米诺夫检验(Kolmogorov-Smirnov test),一般又称K-S检验,该检验是柯尔莫戈洛夫所提出的,是一种基于累计分布函数的非参数检验,用以检验两个经验分布是否不同或一个经验分布与另一个理想分布是否不同。

方法:scipy.stats.kstest (rvs, cdf, args = ( ), N = 20, alternative =’two-sided’, mode =’approx’)

官方文档:SciPy v0.14.0 Reference Guide

参数:rvs - 待检验数据,可以是字符串、数组;

cdf - 需要设置的检验,这里设置为 norm,也就是正态性检验;

alternative - 设置单双尾检验,默认为 two-sided

返回:W - 统计数;p-value - p值

特点:适合于大样本场景。

3.3 Anderson-Darling 检验

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

该方法是由 scipy.stats.kstest 改进而来的,可以做正态分布、指数分布、Logistic 分布、Gumbel 分布等多种分布检验。默认参数为 norm,即正态性检验。

官方文档:SciPy v1.1.0 Reference Guide

参数:x - 待检验数据;dist - 设置需要检验的分布类型

返回:statistic - 统计数;critical_values - 评判值;significance_level - 显著性水平

3.4 scipy.stats.normal 检验

方法:scipy.stats.normaltest (a, axis=0)

该方法专门用来检验数据是否为正态性分布,官方文档的描述为:

Tests whether a sample differs from a normal distribution.
This function tests the null hypothesis that a sample comes from a normal distribution. It is based on D’Agostino and Pearson’s [R251], [R252] test that combines skew and kurtosis to produce an omnibus test of normality.

官方文档:SciPy v0.14.0 Reference Guide

参数:a - 待检验数据;axis - 可设置为整数或置空,如果设置为 none,则待检验数据被当作单独的数据集来进行检验。该值默认为 0,即从 0 轴开始逐行进行检验。

返回:k2 - s^2 + k^2,s 为 skewtest 返回的 z-score,k 为 kurtosistest 返回的 z-score,即标准化值;p-value - p值

第四部分 总结

实际上,从已有的文献表明,对于数据分布的正态性研究,首选方法是图形观察,即利用直方图、P-P图或Q-Q图进行观察,如果分布严重偏态和尖峰分布则建议进行进一步的假设检验。如果图形分布结果不好判断,则再进行正态性检验。

其次,对于检验方法来说,对于K-S检验及W检验结果来说,有文献采用蒙特卡罗模拟方法进行多次验证,结果表明W检验结果相比于大部分方法都有较大的检验功效,而K-S方法的检验结果相对不佳。并且部分学者认为,K-S检验的实用性远不如图形工具,因为在样本量少时,该检验不太敏感,但是在样本量大时,该检验却过于敏感。因此正常情况下,我们更常采用W检验的结果。

值得注意的是,虽然说K-S检验结果相对不佳,但是不同检验方法对于样本量的敏感度是不一样的。在样本量较小的情况下(小于50个样本的情况下),请优先选择W检验;在样本量50-5000的情况下,可以酌情使用W检验及K—S检验;在样本量大于5000的情况下,请使用K-S检验结果,尤其是在SPSS中,当样本量大于5000的情况下,将只显示K-S检验结果,而不显示W检验结果。

https://blog.csdn.net/qq_33924470/article/details/114668701

参考文献

1、偏度,链接:https://en.wikipedia.org/wiki/Skewness

2、峰度,链接:https://en.wikipedia.org/wiki/Kurtosis

0%