【问题标题】:Kolmogorov-Smirnov (ks_2samp) p-value not as expected - Wrong test or understanding?Kolmogorov-Smirnov (ks_2samp) p 值与预期不符 - 测试或理解错误?
【发布时间】:2019-12-29 17:11:56
【问题描述】:

上下文

我正在使用 scipy's ks_samp 来应用 Kolmogorov-Smirnov-test。

我使用的数据是双重的:

  1. 我有一个数据集d1,它是应用于机器学习模型m1(即MASE - Mean Average Scaled Error)预测的评估指标。这些大约是 6000 个数据点,这意味着使用 m1 进行 6000 次预测的 MASE 结果。
  2. 我的第二个数据集d2 类似于d1,不同之处在于我使用了第二个模型m2,与m1 略有不同。

两个数据集的分布如下:

d1

d2

可以看出,分布看起来非常相似。我想通过 Kolmogorov-Smirnov 检验来强调这一事实。然而,我应用k2_samp 得到的结果却恰恰相反:

from scipy.stats import ks_2samp

k2_samp(d1, d2)

# Ks_2sampResult(statistic=0.04779414731236298, pvalue=3.8802872942682265e-10)

据我了解,这样的 p 值表明分布不相似(拒绝 H0)。但从图片上可以看出,它绝对应该这样做。

问题

  1. 我是否误解了 Kolmogorov-Smirnov 的用法,并且此测试不适用于分发的用例/种类?
  2. 如果第一个可以回答是,我还有什么选择?

编辑

下面是叠加图。从Cross Validated 上的答案和 cmets 得出结论,我认为“中间”的分歧可能是原因,因为 KS 在那里很敏感。

【问题讨论】:

  • “看起来相似”和来自同一个分布之间有很大的不同。例如,sample1 = np.random.normal(scale=1, size=6000)sample2 = np.random.normal(scale=1.25, size=6000) 的分布看起来很相似,但对这些样本应用 KS 检验也会得到接近 1e-10 的 p 值。

标签: python scipy statistics hypothesis-test kolmogorov-smirnov


【解决方案1】:

我还在Cross Validated 上发布了这个问题,并在那里获得了有用的见解和答案(另请注意对问题的新编辑)。

Kolmogorov-Smirnov (KS) 对中间的偏差非常敏感。从问题中新发布的叠加图片中可以看出,确实存在一些偏差。据推测,这就是 KS 拒绝 H0 的原因(=df1df2 的相同分布)。

如需更详细的答案,请参阅 @BruceETs answer on Cross Validated,谁值得为此感谢。

【讨论】:

    【解决方案2】:

    关键是您为 d2 使用了另一个模型,因此 Kolmogorov-Smirnov-test 预测第二个数据集的分布与 d1 的分布不同,尽管它看起来完全一样。 尽管这不是一种概率方法,但您可以考虑使用np.allclose 来比较两个数据集。

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 2020-08-07
      • 2021-06-12
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2013-03-17
      • 2015-03-25
      相关资源
      最近更新 更多