如何在 python 中执行 kolmogorov-smirnov 检验


柯尔莫哥洛夫-斯米尔诺夫检验用于检验样本是否来自某个分布。

要在 Python 中执行 Kolmogorov-Smirnov 检验,我们可以使用scipy.stats.kstest()进行单样本测试,或使用scipy.stats.ks_2samp()进行两样本测试。

本教程展示了如何在实践中使用每个函数的示例。

示例 1:Kolmogorov-Smirnov 测试样本

假设我们有以下样本数据:

 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 个数据值的样本执行 Kolmogorov-Smirnov 检验,以确定它们是否来自正态分布:

 from scipy.stats import kstest

#perform Kolmogorov-Smirnov test
kstest(data, ' norm ')

KstestResult(statistic=0.9072498680518208, pvalue=1.0908062873170218e-103)

从结果中,我们可以看到检验统计量为0.9072 ,相应的 p 值为1.0908e-103 。由于 p 值小于 0.05,我们拒绝原假设。我们有足够的证据表明样本数据并非来自正态分布。

这个结果也应该不足为奇,因为我们使用Poisson()函数生成样本数据,该函数生成遵循泊松分布的随机值。

示例 2:两个样本 Kolmogorov-Smirnov 检验

假设我们有以下两个示例数据集:

 from numpy.random import seed
from numpy.random import randn
from numpy.random import lognormal

#set seed (eg make this example reproducible)
seed(0)

#generate two datasets
data1 = randn(100)
data2 = lognormal(3, 1, 100)

以下代码显示如何对这两个样本执行 Kolmogorov-Smirnov 检验,以确定它们是否来自同一分布:

 from scipy.stats import ks_2samp

#perform Kolmogorov-Smirnov test
ks_2samp(data1, data2)

KstestResult(statistic=0.99, pvalue=4.417521386399011e-57)

从结果中,我们可以看到检验统计量为0.99 ,相应的 p 值为4.4175e-57 。由于 p 值小于 0.05,我们拒绝原假设。我们有足够的证据表明这两个样本数据集并非来自同一分布。

这个结果也应该不足为奇,因为我们使用标准正态分布生成第一个样本的值,使用对数正态分布生成第二个样本的值。

其他资源

如何在 Python 中执行 Shapiro-Wilk 检验
如何在 Python 中执行 Anderson-Darling 测试

添加评论

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