1

我正在尝试执行两个样本的 Kolmogorov-Smirnov 检验,以检查两个样本是否来自同一群体。这是重现我的问题的代码:

from scipy.stats import ks_2samp
import numpy as np

x = list(np.random.normal(10, 1, 3000))
y = list(np.random.normal(12, 1, 2000))
d_statistic, p_value = ks_2samp(x, y)

使用 1.3 之前的 scipy 版本,我得到以下结果: d_statistic = 0.67317 和 p_value = 0.0

但是对于 scipy 版本 >= 1.3:d_statistic = 0.6705 和 p_value = 0.9904774590824749

两者都给出几乎相同的 d_statistic 但最新版本的 scipy 似乎给了我一个错误的 p_value 我不明白为什么。实际上,x 和 y 显然是两个样本,它们并非来自同一群体。

我做了一些研究,因为 scipy==1.3 发布了“精确”模式,并且是小样本的默认模式(len(x), len(y) <= 10000 这是我的情况)。但是,如果我将模式从 'exact' 更改为 'asymp',我得到的结果与我从最旧的 scipy 版本中得到的结果相同。

d_statistic, p_value = ks_2samp(x, y, mode='asymp')

计算 p_value 时“精确”模式是否存在问题,还是我遗漏了什么?

感谢您的帮助,h1t5uj1

4

1 回答 1

1

对于那些将面临与我相同的问题的人。这是当样本量超过几千时出现的错误(感谢 pvanmulbregt 解决了这个问题:https ://github.com/scipy/scipy/issues/11184 )。应该在 scipy 的 1.5.0 版本中解决。同时,您可以将模式从 'exact' 更改为 'asymp',或者您可以降级您的 scipy 版本。

希望这会有所帮助,H1t5uj1

于 2020-06-03T14:16:47.497 回答