Kolmogorov Smirnov检验的直观解释

机器算法验证 分布 直觉 累积分布函数 kolmogorov-smirnov 测试 经验累积分布
2022-02-07 18:30:49

向某人解释 Kolmogorov Smirnov 测试概念的最简洁、最简单的方法是什么?直观上是什么意思?

这是一个我难以表达的概念——尤其是在向某人解释时。

有人可以用图表和/或使用简单的例子来解释它吗?

4个回答

Kolmogorov-Smirnov 检验评估随机样本(数值数据)来自连续分布的假设,该连续分布完全指定而无需参考数据。

这是这种分布的累积分布函数 (CDF) 的图表。

图 1:从 -3 到 3 的标准正态 CDF 图表

样本可以通过其经验(累积)分布函数或 ECDF 来完全描述。它绘制小于或等于水平值的数据分数。值的随机样本,当我们从左到右扫描时,每次跨越一个数据值时n1/n

下图显示了取自该分布点符号定位数据。绘制线条以提供点之间的视觉连接,类似于连续 CDF 的图形。n=10

图 2:ECDF 图表

KS 测试使用它们的图表之间的最大垂直差异来比较 CDF 和 ECDF。金额(正数)是Kolmogorov-Smirnov 检验统计量。

我们可以通过定位位于 CDF 上方或下方最远的数据点来可视化 KS 检验统计量。 此处以红色突出显示。检验统计量是极值点与参考 CDF 值之间的垂直距离。绘制了两条位于 CDF 上方和下方此距离的限制曲线以供参考。因此,ECDF 位于这些曲线之间,并且至少与其中一条曲线相接触。

图 3:CDF、ECDF 和极限曲线

为了评估 KS 检验统计量的重要性,我们像往常一样将其与 KS 检验统计量进行比较,KS 检验统计量往往会出现在假设分布的完全随机样本中。 可视化它们的一种方法是绘制许多此类(独立)样本的 ECDF,以表明它们的KS 统计数据是什么。这形成了 KS 统计量的“零分布”。

图 4:许多 ECDF,显示为空分布

样本中的每一个的 ECDF与一个红色标记一起显示,该标记位于它与假设的 CDF 的最大偏离位置。在这种情况下,与大多数随机样本相比,原始样本(蓝色)与 CDF 的偏差明显较小(73% 的随机样本比蓝色样本更远离 CDF。从视觉上看,这意味着 73% 的红点落在由两条红色曲线分隔的区域之外。)因此,我们(在此基础上)没有结论我们的(蓝色)样本的证据不是由该 CDF 生成的。也就是说,差异“在统计上不显着”。200

更抽象地说,我们可以在这组大的随机样本中绘制 KS 统计量的分布。 这称为检验统计量的零分布。这里是:

图 5:200 KS 测试统计的直方图

垂直蓝线定位原始样本的 KS 检验统计量。27% 的随机 KS 测试统计量较小,73% 的随机统计量较大。扫一扫,看起来数据集(这个大小,对于这个假设的 CDF)的 KS 统计量必须超过 0.4 左右才能得出结论它非常大(因此构成假设的 CDF 不正确的重要证据) .


尽管可以说更多——特别是关于为什么 KS 测试以相同的方式工作并产生相同的零分布,对于任何连续 CDF——这足以理解测试并将其与概率图一起使用来评估数据分布。


应要求,这是R我用于计算和绘图的基本代码。它使用标准正态分布 ( pnorm) 作为参考。注释掉的行表明我的计算与内置ks.test函数的计算一致。我不得不修改它的代码以提取有助于 KS 统计的特定数据点。

ecdf.ks <- function(x, f=pnorm, col2="#00000010", accent="#d02020", cex=0.6,
                    limits=FALSE, ...) {
  obj <- ecdf(x)
  x <- sort(x)
  n <- length(x)
  y <- f(x) - (0:(n - 1))/n
  p <- pmax(y, 1/n - y)
  dp <- max(p)
  i <- which(p >= dp)[1]
  q <- ifelse(f(x[i]) > (i-1)/n, (i-1)/n, i/n)

  # if (dp != ks.test(x, f)$statistic) stop("Incorrect.")

  plot(obj, col=col2, cex=cex, ...)
  points(x[i], q, col=accent, pch=19, cex=cex)
  if (limits) {
    curve(pmin(1, f(x)+dp), add=TRUE, col=accent)
    curve(pmax(0, f(x)-dp), add=TRUE, col=accent)
  }
  c(i, dp)
}

单样本 Kolmogorov-Smirnov 检验发现完全指定的连续假设 cdf 和经验 cdf 之间的最大垂直距离。

双样本 Kolmogorov-Smirnov 检验发现两个样本的经验 cdf 之间的最大垂直距离。

异常大的距离表明样本与假设分布不一致(或两个样本与来自同一分布的情况不一致)。

这些检验是非参数的,因为在零下检验统计量的分布不取决于在零下指定的特定分布(或两个样本来自哪个共同分布)。

这些测试有“单面”(在特定意义上)版本,但这些测试相对很少使用。

您可以使用离散分布进行 Kolmogorov-Smirnov 检验,但通常的检验版本(即使用通常的零分布)是保守的,有时非常保守。您可以(但是)为完全指定的离散分布获得新的临界值。

当在位置尺度族*(或位置和尺度的子集)中估计参数时,有一个相关的测试,正确地称为 Lilliefors 测试(Lilliefors 对正常情况进行了三个测试,对指数情况进行了测试)。这不是免分发的。

* 最多单调变换

您正在寻找经验 CDF(根据观察结果构建)与理论值的最大偏差。根据定义,它不能大于 1。

这是均匀分布 CDF(黑色)和两个程式化候选 CDF(红色)的图:

在此处输入图像描述

您会看到您的候选 CDF 不能超过理论值超过或低于理论值超过,两者的大小都以 1 为界。D+D

用于该测试的经验 CDF在这里,我们对样本进行了排序,其中使得您将其与理论 CDF进行比较,然后您有一组偏差SnSi=i/Nxii=1,,Nxi<xi+1Fi=F(xi)Di+=max(0,SiFi)

然而,这并不是 KS 统计数据的惊人之处。就是的分布对于任何数据集的分布都是一样的!对我来说,如果可以的话,这就是你需要直观地获得的东西。supx(,)D+

我发现将两个 CDF(无论是经验人口)视为彼此跳舞但保持接近是有帮助的。舞伴可以互相旋转,但彼此保持两臂的距离,对吧?当两个人相距更远时,他们可能不会互相跳舞。

一个样本

在单样本(拟合优度)检验中,我们假设数据来自具有特定 CDF 的某个分布。数据还具有经验 CDF。如果我们是对的,那么数据的 CDF 应该围绕假设分布的 CDF 跳舞,但要保持接近。如果舞伴之间的距离太远(垂直距离),那么我们会将其视为反对我们假设的证据。

两个样本

在双样本测试中,我们假设两个数据集来自同一分布。如果是这种情况,那么这两个经验 CDF 应该互相跳舞,但保持相当接近。如果舞伴之间的距离太远(同样是垂直距离),那么我们会将其视为反对我们假设的证据。