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