mars.tensor.stats.ks_1samp#

mars.tensor.stats.ks_1samp(x: 联合[ndarray, 列表, TileableType], cdf: 可调用的, args: 元组 = (), alternative: 字符串 = 'two-sided', mode: 字符串 = 'auto')[来源]#

进行单样本Kolmogorov-Smirnov适合度检验。

本测试将样本的基础分布 F(x) 与给定的连续分布 G(x) 进行比较。有关可用的原假设和备择假设的描述,请参见说明。

Parameters
  • x (array_like) – 一个独立同分布随机变量的1-D观察数组。

  • cdf (可调用) – 用于计算cdf的可调用对象。

  • args (tuple, sequence, optional) – 分布参数,与 cdf 一起使用。

  • alternative ({'two-sided', 'less', 'greater'}, optional) – 定义原假设和替代假设。默认值是‘two-sided’。 请参阅下面的说明。

  • mode ({'auto', 'exact', 'approx', 'asymp'}, 可选) –

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

    • ’auto’ : 选择其他选项中的一个。

    • ’exact’ : 使用检验统计量的确切分布。

    • ’approx’ : 用两倍的一侧概率来近似双侧概率

    • ’asymp’: 使用检验统计量的渐近分布

Returns

  • statistic (float) – KS检验统计量,可以是D、D+或D-(取决于'alternative'的值)

  • pvalue (float) – 单尾或双尾p值。

另请参阅

ks_2samp, kstest

备注

可以通过alternative参数选择三种原假设及其对应的备择假设。

  • 双侧: 虚无假设是这两个分布是相同的,对于所有x,F(x)=G(x);替代假设是它们不相同。

  • less: 虚无假设是对于所有 x,有 F(x) >= G(x);替代假设是对于至少一个 x,有 F(x) < G(x)。

  • greater: 零假设是对于所有x都有 F(x) <= G(x); 备择假设是至少存在一个x使得 F(x) > G(x)。

请注意,备择假设描述的是潜在分布的CDFs,而不是观察到的值。例如,假设 x1 ~ F 和 x2 ~ G。如果对于所有 x,F(x) > G(x),则 x1 中的值往往小于 x2 中的值。

示例

>>> import numpy as np
>>> from scipy import stats
>>> import mars.tensor as mt
>>> from mars.tensor.stats import ks_1samp
>>> np.random.seed(12345678)  #fix random seed to get the same result
>>> x = mt.linspace(-15, 15, 9, chunk_size=5)
>>> ks_1samp(x, stats.norm.cdf).execute()
(0.44435602715924361, 0.038850142705171065)
>>> ks_1samp(stats.norm.rvs(size=100), stats.norm.cdf).execute()
KstestResult(statistic=0.165471391799..., pvalue=0.007331283245...)

针对单侧备择假设的测试

将分布移动到更大的值,以便`` CDF(x) < norm.cdf(x)``:

>>> x = stats.norm.rvs(loc=0.2, size=100)
>>> ks_1samp(x, stats.norm.cdf, alternative='less').execute()
KstestResult(statistic=0.235488541678..., pvalue=1.158315030683...)

拒绝原假设,支持备择假设:小于

>>> ks_1samp(x, stats.norm.cdf, alternative='greater').execute()
KstestResult(statistic=0.010167165616..., pvalue=0.972494973653...)

拒绝原假设,以支持备择假设:更大

>>> ks_1samp(x, stats.norm.cdf).execute()
KstestResult(statistic=0.235488541678..., pvalue=2.316630061366...)

不要拒绝原假设以支持备择假设:双侧

测试 t 分布随机变量与正态分布的对比

在100个自由度下,t分布看起来接近正态分布,而K-S检验不拒绝样本来自正态分布的假设:

>>> ks_1samp(stats.t.rvs(100, size=100), stats.norm.cdf).execute()
KstestResult(statistic=0.077844250253..., pvalue=0.553155412513...)

在3个自由度下,t分布与正态分布看起来有足够的不同,因此我们可以在10%的水平上拒绝样本来自正态分布的假设:

>>> ks_1samp(stats.t.rvs(3, size=100), stats.norm.cdf).execute()
KstestResult(statistic=0.118967105356..., pvalue=0.108627114578...)