如何在 python 中执行 shapiro-wilk 检验
夏皮罗-威尔克检验是正态性检验。它用于确定样本是否来自正态分布。
要在 Python 中执行 Shapiro-Wilk 测试,我们可以使用scipy.stats.shapiro()函数,该函数使用以下语法:
scipy.stats.shapiro(x)
金子:
- x:样本数据表。
此函数返回检验统计量和相应的 p 值。
如果 p 值低于一定的显着性水平,则我们有足够的证据表明样本数据并非来自正态分布。
本教程展示了如何在实践中使用此功能的一些示例。
示例 1:正态分布数据的 Shapiro-Wilk 检验
假设我们有以下样本数据:
from numpy.random import seed from numpy.random import randn #set seed (eg make this example reproducible) seed(0) #generate dataset of 100 random values that follow a standard normal distribution data = randn(100)
以下代码展示了如何对这 100 个数据值的样本执行 Shapiro-Wilk 检验,以确定它们是否来自正态分布:
from scipy.stats import shapiro #perform Shapiro-Wilk test shapiro(data) ShapiroResult(statistic=0.9926937818527222, pvalue=0.8689165711402893)
从结果中,我们可以看到检验统计量为0.9927 ,相应的 p 值为0.8689 。
由于 p 值不小于 0.05,因此我们无法拒绝原假设。我们没有足够的证据表明样本数据不服从正态分布。
这个结果应该不足为奇,因为我们使用randn()函数生成样本数据,该函数生成遵循标准正态分布的随机值。
示例 2:非正态分布数据的 Shapiro-Wilk 检验
现在假设我们有以下示例数据:
from numpy.random import seed from numpy.random import fish #set seed (eg make this example reproducible) seed(0) #generate dataset of 100 values that follows a Poisson distribution with mean=5 data = fish(5, 100)
以下代码展示了如何对这 100 个数据值的样本执行 Shapiro-Wilk 检验,以确定它们是否来自正态分布:
from scipy.stats import shapiro #perform Shapiro-Wilk test shapiro(data) ShapiroResult(statistic=0.9581913948059082, pvalue=0.002994443289935589)
从结果中,我们可以看到检验统计量为0.9582 ,相应的 p 值为0.00299 。
由于 p 值小于 0.05,我们拒绝原假设。我们有足够的证据表明样本数据并非来自正态分布。
这个结果也应该不足为奇,因为我们使用Poisson()函数生成样本数据,该函数生成遵循泊松分布的随机值。
其他资源
以下教程解释了如何在各种统计软件中执行其他正态性检验:
如何在 R 中执行 Shapiro-Wilk 检验
如何在 Python 中执行 Anderson-Darling 测试
如何在 Python 中执行 Kolmogorov-Smirnov 检验