scipy kstest 在不同范围内不一致

scipy kstest not consistent over different ranges

好的,所以我尝试使用 kstest 的 scipys 实现作为评估哪种分布最适合数据的方法。我对 kstest 工作原理的理解是,统计数据代表零假设的概率(即返回的概率是所讨论的模型对数据错误的概率)。对于 0.0 和 1.0

之间的均匀分布,这与预期的一样有效

a = np.random.uniform(size=4999)

print(scipy.stats.kstest(a, 'uniform', args=(0.0,1.0)))

KstestResult(statistic=0.010517039009963702, pvalue=0.63796173656227928)

但是,当我将均匀分布边界从 (0.0, 1.0) 移动到 (2.0,3.0) 时,K-S 统计量出奇地高

a = np.random.uniform(2.0, 3.0,size=4999)

print(scipy.stats.kstest(a, 'uniform', args=(2.0,3.0)))

KstestResult(statistic=0.66671700832788283, pvalue=0.0)

第二种情况下的检验统计值不应该也很低吗,因为传递的参数与以前一样接近分布?

numpy(您使用)和 scipy.stats(ks 测试使用)版本的 uniform 工作方式不同:

>>> np.random.uniform(2,3,5000).max()
2.9999333044165271
>>> stats.uniform(2,3).rvs(5000).max()
4.9995316751114043

numpy中第二个参数被解释为上限,在scipy.stats中它是scale参数,即宽度。