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
参数,即宽度。
好的,所以我尝试使用 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
参数,即宽度。