当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy stats.ks_1samp用法及代码示例


本文简要介绍 python 语言中 scipy.stats.ks_1samp 的用法。

用法:

scipy.stats.ks_1samp(x, cdf, args=(), alternative='two-sided', method='auto')#

执行单样本 Kolmogorov-Smirnov 拟合优度检验。

此测试将样本的基本分布 F(x) 与给定的连续分布 G(x) 进行比较。有关可用的无效假设和替代假设的说明,请参见注释。

参数

x array_like

iid 随机变量的一维观察值数组。

cdf 可调用的

用于计算 cdf 的 callable。

args 元组,序列,可选

分布参数,与 cdf 一起使用。

alternative {‘双面’,‘less’, ‘greater’},可选

定义原假设和备择假设。默认为“双面”。请参阅下面注释中的说明。

method {‘auto’, ‘exact’, ‘approx’, ‘asymp’},可选

定义用于计算 p 值的分布。以下选项可用(默认为‘auto’):

  • ‘auto’ : selects one of the other options.

  • ‘exact’ : uses the exact distribution of test statistic.

  • ‘approx’ : approximates the two-sided probability with twice the one-sided probability

  • ‘asymp’: uses asymptotic distribution of test statistic

返回

资源:KstestResult

包含属性的对象:

统计 浮点数

KS 检验统计量,D+、D- 或 D(两者中的最大值)

p值 浮点数

One-tailed 或 two-tailed p 值。

statistic_location 浮点数

KS统计量对应的x值;即,在该观察中测量经验分布函数和假设的累积分布函数之间的距离。

statistic_sign int

如果 KS 统计量是经验分布函数与假设累积分布函数 (D+) 之间的最大正差,则 +1;如果 KS 统计量是最大负差 (D-),则为 -1。

注意

可以使用替代参数选择零和相应替代假设的三个选项。

  • 双面:原假设是两个分布相同,对于所有 x,F(x)=G(x);另一种情况是它们不相同。

  • less:原假设是所有 x 的 F(x) >= G(x);另一种选择是对于至少一个 x,F(x) < G(x)。

  • 更大:原假设是所有 x 的 F(x) <= G(x);另一种选择是对于至少一个 x,F(x) > G(x)。

请注意,替代假设说明了CDF的基础分布,而不是观察值。例如,假设 x1 ~ F 和 x2 ~ G。如果所有 x 的 F(x) > G(x),则 x1 中的值往往小于 x2 中的值。

例子

假设我们希望检验样本按照标准正态分布的原假设。我们选择置信度为95%;也就是说,如果 p 值小于 0.05,我们将拒绝原假设并支持替代假设。

在测试均匀分布的数据时,我们希望原假设被拒绝。

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> stats.ks_1samp(stats.uniform.rvs(size=100, random_state=rng),
...                stats.norm.cdf)
KstestResult(statistic=0.5001899973268688, pvalue=1.1616392184763533e-23)

事实上,p 值低于我们的阈值 0.05,因此我们拒绝零假设,转而支持默认的 “two-sided” 替代方案:数据不按照标准正态分布。

在测试标准正态分布的随机变量时,我们期望数据在大多数情况下与原假设一致。

>>> x = stats.norm.rvs(size=100, random_state=rng)
>>> stats.ks_1samp(x, stats.norm.cdf)
KstestResult(statistic=0.05345882212970396, pvalue=0.9227159037744717)

正如预期的那样,p 值 0.92 不低于我们的阈值 0.05,因此我们不能拒绝原假设。

然而,假设随机变量按照正态分布进行分布,该正态分布向更大的值移动。在这种情况下,基础分布的累积密度函数 (CDF) 往往是较少的比标准法线的 CDF。因此,我们期望原假设被拒绝alternative='less'

>>> x = stats.norm.rvs(size=100, loc=0.5, random_state=rng)
>>> stats.ks_1samp(x, stats.norm.cdf, alternative='less')
KstestResult(statistic=0.17482387821055168, pvalue=0.001913921057766743)

事实上,当 p 值小于我们的阈值时,我们拒绝零假设,转而支持替代方案。

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.ks_1samp。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。