Scipy的ks_2samp函数给出了良好的D_statistic但错误的p_value



我正在尝试执行双样本柯尔莫哥罗夫-斯米尔诺夫检验,以检查两个样本是否来自同一人群。这是重现我的问题的代码:

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,这是我的情况(。但是,如果我将模式从"精确"更改为"渐近",我会得到与从最古老的 scipy 版本获得的结果相同的结果。

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

计算p_value时"精确"模式是否存在问题,或者我遗漏了某些内容?

感谢您的帮助, H1T5UJ1

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

希望这有帮助, H1t5uj1

相关内容

  • 没有找到相关文章

最新更新