如何在 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 检验

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注