Python Scipy中的两样本Kolmogorov-Smirnov测试


81

我不知道如何在Scipy中进行两样本KS测试。

阅读文档scipy kstest之后

我可以看到如何测试分布与标准正态分布相同的地方

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
test_stat = kstest(x, 'norm')
#>>> test_stat
#(0.021080234718821145, 0.76584491300591395)

这意味着在0.76的p值下,我们不能拒绝两个分布相同的零假设。

但是,我想比较两个分布,看看是否可以拒绝它们相同的零假设,例如:

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
z = np.random.normal(1.1,0.9, 1000)

并测试x和z是否相同

我尝试过天真:

test_stat = kstest(x, z)

并得到以下错误:

TypeError: 'numpy.ndarray' object is not callable

有没有办法在Python中进行两样本KS测试?如果是这样,我该怎么办?

先感谢您


您可以发布行和回溯吗?
cval 2012年

Answers:


122

您正在使用一样本KS测试。您可能需要两个样本的测试 ks_2samp

>>> from scipy.stats import ks_2samp
>>> import numpy as np
>>> 
>>> np.random.seed(12345678)
>>> x = np.random.normal(0, 1, 1000)
>>> y = np.random.normal(0, 1, 1000)
>>> z = np.random.normal(1.1, 0.9, 1000)
>>> 
>>> ks_2samp(x, y)
Ks_2sampResult(statistic=0.022999999999999909, pvalue=0.95189016804849647)
>>> ks_2samp(x, z)
Ks_2sampResult(statistic=0.41800000000000004, pvalue=3.7081494119242173e-77)

结果可以解释为:

  1. 您可以根据样本量将statisticpython给定的值与KS测试关键值表进行比较。当statistic值高于临界值时,两个分布是不同的。

  2. 或者,您可以将p-valuea与显着性水平a进行比较,通常为a = 0.05或0.01(您决定,a越低,显着性越高)。如果p值小于a,则很可能两个分布是不同的。


1
那正是我想要的。非常感谢你!
Akavall 2012年

2
您如何解释这些结果?您能否仅看一下statistic和就说样本来自相同的分布p-value
FaCoffee

4
@FaCoffee这是scipy文档所说的:“如果KS统计量较小或p值较高,那么我们不能拒绝两个样本的分布相同的假设。
user2738815,17年

5

这是scipy文档所说的:

如果KS统计量较小或p值较高,则我们不能拒绝两个样本分布相同的假设。

无法拒绝并不意味着我们确认。


您能否进一步解释您的答案?提前致谢!
King Reload's

@KingReload表示当p值非常小时,表示这两个样本不是来自同一分布的概率非常低。换句话说,这两个样本来自同一分布的可能性非常高。但是您不能100%确信p值永远不会为零。(有时它们显示为0,但实际上,它永远不会为零)。这就是为什么我们没有拒绝原假设而不是我们接受原假设的原因。接受零假设=两个样本的分布相同
MD Abid Hasan

3
p值很高,很可能它们来自相同的分布,p值很小,很可能来自不同的分布。@MDAbidHasan倒退了它。确实,他们在文档中的示例提供了示例: For an identical distribution, we cannot reject the null hypothesis since the p-value is high, 41%: >>> >>> rvs4 = stats.norm.rvs(size=n2, loc=0.0, scale=1.0) >>> stats.ks_2samp(rvs1, rvs4) (0.07999999999999996, 0.41126949729859719)
superhero
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.