scipy.stats.kstest

scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', mode='auto')[源代码]

执行(单样本或双样本)Kolmogorov-Smirnov拟合优度检验。

单样本检验将样本的基础分布F(X)与给定的分布G(X)进行比较。双样本测试比较两个独立样本的潜在分布。这两个检验仅对连续分布有效。

参数
rvsstr、array_like或callable

如果是一个数组,它应该是随机变量的一维观察值数组。如果是可调用的,则它应该是生成随机变量的函数;它需要有关键字参数 size 。如果是字符串,则应为中的分发名称 scipy.stats ,它将用于生成随机变量。

cdf字符串、类似数组或可调用

如果为ARRAY_LIKE,则应该是随机变量观测值的一维阵列,并执行双样本测试(并且RV必须是ARRAY_LIKE)。如果是可调用对象,则该可调用对象用于计算CDF。如果是字符串,则应为中的分发名称 scipy.stats ,它将用作CDF函数。

args元组、序列、可选

分布参数,在以下情况下使用 rvscdf 是弦或可伸缩的。

N整型,可选

样本大小(如果 rvs 是字符串或可调用的。默认值为20。

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

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

mode{‘auto’,‘Exact’,‘Approx’,‘symp’},可选

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

  • ‘AUTO’:选择其他选项之一。

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

  • ‘近似’:以单边概率的两倍近似双边概率

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

退货
statistic浮动

KS检验统计量,D、D+或D-。

pvalue浮动

单尾或双尾p值。

参见

ks_2samp

注意事项

对于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中的值。

示例

>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> x = np.linspace(-15, 15, 9)
>>> stats.kstest(x, 'norm')
KstestResult(statistic=0.444356027159..., pvalue=0.038850140086...)
>>> stats.kstest(stats.norm.rvs(size=100, random_state=rng), stats.norm.cdf)
KstestResult(statistic=0.165471391799..., pvalue=0.007331283245...)

以上各行相当于:

>>> stats.kstest(stats.norm.rvs, 'norm', N=100)
KstestResult(statistic=0.113810164200..., pvalue=0.138690052319...)  # may vary

Test against one-sided alternative hypothesis

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

>>> x = stats.norm.rvs(loc=0.2, size=100, random_state=rng)
>>> stats.kstest(x, 'norm', alternative='less')
KstestResult(statistic=0.1002033514..., pvalue=0.1255446444...)

拒绝零假设,支持替代假设:更少

>>> stats.kstest(x, 'norm', alternative='greater')
KstestResult(statistic=0.018749806388..., pvalue=0.920581859791...)

不要拒绝零假设而支持替代假设:更大

>>> stats.kstest(x, 'norm')
KstestResult(statistic=0.100203351482..., pvalue=0.250616879765...)

检验t个分布的随机变量是否服从正态分布

对于100个自由度,t分布看起来接近正态分布,并且K-S检验并不排除样本来自正态分布的假设:

>>> stats.kstest(stats.t.rvs(100, size=100, random_state=rng), 'norm')
KstestResult(statistic=0.064273776544..., pvalue=0.778737758305...)

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

>>> stats.kstest(stats.t.rvs(3, size=100, random_state=rng), 'norm')
KstestResult(statistic=0.128678487493..., pvalue=0.066569081515...)