scipy.stats.ks_2samp

scipy.stats.ks_2samp(data1, data2, alternative='two-sided', mode='auto')[源代码]

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

这个测试比较了两个独立样本的基础连续分布F(X)和G(X)。有关可用的空假设和备选假设的说明,请参阅注释。

参数
数据1、数据2类似数组,一维

假设两组样本观测值取自连续分布,则样本大小可以不同。

alternative{‘双面’,‘少’,‘大’},可选

定义空的和可选的假设。默认值为“双面”。请参阅下面注释中的说明。

mode{‘auto’,‘exact’,‘symp’},可选

定义用于计算p值的方法。以下选项可用(默认为‘AUTO’):

  • “auto”:使用“exact”表示小尺寸数组,使用“symp”表示大型数组

  • ‘Exact’:使用测试统计数据的精确分布

  • “symp”:使用测试统计量的渐近分布

退货
statistic浮动

KS统计量。

pvalue浮动

单尾或双尾p值。

注意事项

对于NULL和相应的替代假设,有三个选项可以使用 alternative 参数。

  • two-sided :零假设是两个分布是相同的,对于所有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中的值。

如果KS统计量很小或p值很高,那么我们不能拒绝零假设,而支持另一种选择。

如果模式为‘AUTO’,则如果样本大小小于10000,则计算是准确的。对于较大的尺寸,计算使用Kolmogorov-Smirnov分布来计算近似值。

“双边”“精确”计算计算互补概率,然后从1中减去。因此,它可以返回的最小概率约为1e-16。虽然算法本身是精确的,但如果样本量较大,则可能会累积数值误差。它最适合于其中一个样本量只有几千的情况。

我们通常遵循霍奇斯对Drion/Gnedenko/Korolyuk的治疗 [1].

参考文献

1

小霍奇斯,<斯米尔诺夫双样本检验的有效概率>,“Arkiv Fiur Matematik”,第3期,第43期(1958年),第469-86页。

示例

>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> n1 = 200  # size of first sample
>>> n2 = 300  # size of second sample

对于不同的分布,我们可以拒绝零假设,因为p值低于1%:

>>> rvs1 = stats.norm.rvs(size=n1, loc=0., scale=1, random_state=rng)
>>> rvs2 = stats.norm.rvs(size=n2, loc=0.5, scale=1.5, random_state=rng)
>>> stats.ks_2samp(rvs1, rvs2)
 KstestResult(statistic=0.24833333333333332, pvalue=5.846586728086578e-07)

对于稍有不同的分布,我们不能拒绝阿尔法为10%或更低的零假设,因为0.144处的p值高于10%

>>> rvs3 = stats.norm.rvs(size=n2, loc=0.01, scale=1.0, random_state=rng)
>>> stats.ks_2samp(rvs1, rvs3)
KstestResult(statistic=0.07833333333333334, pvalue=0.4379658456442945)

对于相同的分布,我们不能拒绝零假设,因为p值很高,41%:

>>> rvs4 = stats.norm.rvs(size=n2, loc=0.0, scale=1.0, random_state=rng)
>>> stats.ks_2samp(rvs1, rvs4)
KstestResult(statistic=0.12166666666666667, pvalue=0.05401863039081145)