当前位置: 首页 > 后端技术 > Python

统计科学的正态性检验

时间:2023-03-26 12:59:50 Python

在上一篇文章中提到,很多模型的假设是数据服从正态分布。本文主要讲如何判断数据是否符合正态分布。主要有两种方法:描述性统计法和统计检验法。01.描述性统计方法描述性统计是用描述性的数字或图形来判断数据是否符合正态分布。常用的方法有Q-Q图、P-P图、直方图、茎叶图等。1.1Q-Q图这个Q-Q不是用来聊天的QQ,Q是quantile的缩写,即分位数。分位数就是把数据从小到大排序,然后切成100份,看不同位置的值。例如,中位数是位于中间位置的值。Q-Q图的x轴为分位数,y轴为分位数对应的样本值。x-y是散点图的形式。通过散点图可以拟合出一条直线。如果直线是从左下角到右上角的直线,则可以判断数据符合正态分布,否则不能。拟合直线和正态分布有什么关系?为什么我们可以根据这条直线来判断数据是否符合正态分布呢?让我们首先考虑正态分布的特征。正态分布的x轴是样本值,x从左到右逐渐增加,y轴是每个样本值对应的出现概率。概率值先增后减,在中间位置达到最高值。Q-Q图中的y轴可以理解为正态分布中的x轴。如果拟合直线为45度,则可以保证中位数两侧的数值分布相同,即正态分布是以中位数双边对称为基础的。在Python中,可以使用如下代码绘制Q-Q图:fromscipyimportstatsfig=plt.figure()res=stats.probplot(x,plot=plt)plt.show()类似于Q-Q图是一个P-P图,两者的区别在于前者的y轴是特定分位数对应的样本值,而后者是累积概率。1.2直方图直方图有两种,一种是频数分布直方图,一种是频数分布直方图。频率是样本值出现的次数,频率是某个值出现的次数与所有样本值出现的总次数的比值。在Python中,我们可以使用如下代码绘制频数分布直方图:importmatplotlib.pyplotaspltplt.hist(x,bins=10)可以使用如下代码绘制频数分布直方图:importseabornassnssns.distplot(x)与直方图类似,也有茎叶图。茎叶图类似于表格形式来表示每个值出现的频率。02.统计检验方法说完描述性统计的方法,我们再来看看统计检验的方法。统计检验方法主要有SW检验、KS检验、AD检验、W检验。SW检验中的S是偏度,W是峰度。峰度与偏度和正态性之间的关系在上一篇文章中已经讨论过。2.1KS检验KS检验是根据样本的累积分布函数来判断的。它可以用来判断样本集是否符合已知分布,或者检验两个样本之间的显着性差异。如果要判断样本是否符合已知分布,比如正态分布,则需要先计算标准正态分布的累积分布函数,然后再计算样本集的累积分布函数。两个函数在不同的值下会有不同的差异。我们只需要找到差异最大的点D。然后根据样本集的样本量和显着性水平求差异边界值(类似于t检验的边界值)。判断边界值与D的关系,如果D小于边界值,则可以认为样本的分布符合已知分布,否则不能。PDF(probabilitydensityfunction):概率密度函数。CDF(cumulativedistributionfunction):累积分布函数,是概率密度函数的积分。Python中有现成的包可以直接用于KS测试:fromscipy.statsimportkstestkstest(x,cdf="norm")x代表待测样本集,cdf用于表示已知分布要判断的类型。:'norm','expon','logistic','gumbel','gumbel_l',gumbel_r','extreme1'可选,其中norm表示正态分布检验。kstest会返回两个值:D和对应的p_value值。2.2AD测试AD测试是在KS的基础上修改的。KS检验只考虑两个分布之间差异最大的点,但这很容易受到异常值的影响。AD测试考虑了分布上每个点的差异。在Python中,可以使用如下代码:fromscipy.statsimportandersonanderson(x,dist='norm')x为待测样本集,dist用于表示已知分布的类型。可选值与ks检验中的可选值一致。上面的代码会返回三个结果:第一个是统计值,第二个是评价值,第三个是每个评价值对应的显着性水平。AD测试和anderson有什么关系?安德森发明了AD测试。2.3W检验W检验(Shapiro-Wilk的简称)是根据两个分布之间的相关性来判断的,会得到一个类似于皮尔逊相关系数的值。值越大,说明两个分布越相关,越符合某种分布。Python中的实现代码如下:fromscipy.statsimportshapiroshapiro(x)以上代码会返回两个结果:W值及其对应的p_value。Shapiro专门用于正态性检验,所以不需要指定分布类型。而shapiro不适用于样本量>5000的正态性检验。03.非正态数据的处理方法。通常,数据要么是正常的,要么是有偏差的。如果偏斜不严重,可以对数据取平方根进行换算。如果偏度严重,可以对数据进行对数转换。