Python 3.x Scipy&x27;s ks_2samp函数提供了良好的D_统计,但p_值错误
我试图进行两个样本的Kolmogorov-Smirnov测试,以检查两个样本是否来自同一人群。下面是重现我的问题的代码:Python 3.x Scipy&x27;s ks_2samp函数提供了良好的D_统计,但p_值错误,python-3.x,kolmogorov-smirnov,scipy.stats,Python 3.x,Kolmogorov Smirnov,Scipy.stats,我试图进行两个样本的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版本,我
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_统计量=0.67317,p_值=0.0
但是,对于scipy版本>=1.3:
d_统计量=0.6705,p_值=0.99047747590824749
两者给出的d_统计数据几乎相同,但scipy的最新版本似乎给了我一个错误的p_值,我不明白为什么。事实上,x和y显然是两个不来自同一人群的样本
我做了一些研究,由于scipy==1.3,“精确”模式被发布,对于那些将面临与我相同问题的小样本(len(x),len(y))来说,它是默认模式。 这是一个在样本量超过几千个时出现的错误(归功于解决此问题的pvanmulbregt:)。它应该在scipy的1.5.0版本中解决。同时,您可以将模式从“精确”更改为“asymp”,也可以降级scipy版本 希望这有帮助, H1t5uj1
d_statistic, p_value = ks_2samp(x, y, mode='asymp')