我可以使用 Kolmogorov-Smirnov 检验并估计分布参数吗?

机器算法验证 估计 配件 kolmogorov-smirnov 测试
2022-02-14 08:19:30

我读过 Kolmogorov-Smirnov 检验不应用于检验其参数已从样本中估计的分布的拟合优度。

将我的样本一分为二并使用前半部分进行参数估计和第二部分进行 KS 测试是否有意义?

提前致谢

3个回答

更好的方法是通过模拟计算 p 值的临界值。问题是,当您根据数据而不是使用假设值来估计参数时,KS 统计量的分布不遵循零分布。

相反,您可以忽略 KS 测试中的 p 值,而是从与真实数据大小相同的候选分布(具有一组有意义的参数)中模拟一堆数据集。然后为每组估计参数并使用估计的参数进行 KS 测试。您的 p 值将是模拟集中比原始数据更极端的测试统计数据的比例。

添加示例

这是一个使用 R 的示例(希望使用其他程序的人可以阅读/理解)。

使用正态分布作为原假设的简单示例:

tmpfun <- function(x, m=0, s=1, sim=TRUE) {
  if(sim) {
    tmp.x <- rnorm(length(x), m, s)
  } else {
    tmp.x <- x
  }
  obs.mean <- mean(tmp.x)
  obs.sd <- sd(tmp.x)
  ks.test(tmp.x, 'pnorm', mean=obs.mean, sd=obs.sd)$statistic
}

set.seed(20200319)
x <- rnorm(25, 100, 5)

out <- replicate(1000, tmpfun(x))

hist(out)
abline(v=tmpfun(x, sim=FALSE))
mean(out >= tmpfun(x, sim=FALSE))

该函数将根据实际数据 (sim=FALSE) 计算 KS 检验统计量,或者根据具有指定均值和 sd 的正态分布模拟相同大小的新数据集。然后在任何一种情况下,都将计算与具有与样本(原始或模拟)相同的均值和 sd 相同的正态分布的测试统计量。

然后代码运行 1,000 次模拟(随意更改和重新运行)以获取/近似在 NULL 下的测试统计分布(但带有估计的参数),然后最终将原始数据的测试统计与这个 NULL 分布进行比较。

我们可以模拟整个过程(模拟中的模拟)以查看它与默认 p 值的比较:

tmpfun2 <- function(B=1000) {
  x <- rnorm(25, 100, 5)
  out <- replicate(B, tmpfun(x))
  p1 <- mean(out >= tmpfun(x, sim=FALSE))
  p2 <- ks.test(x, 'pnorm', mean=mean(x), sd=sd(x))$p.value
  return(c(p1=p1, p2=p2))
}

out <- replicate(1000, tmpfun2())

par(mfrow=c(2,1))
hist(out[1,])
hist(out[2,])

对于我的模拟,基于模拟的 p 值的直方图相当一致(这应该是因为 NULL 为真),但ks.test函数的 p 值与 1.0 相比更加集中。

您可以通过让原始数据来自不同的分布或使用不同的 Null 分布等来更改模拟中的任何内容以估计功率。正态可能是最简单的,因为均值和方差是独立的,可能需要更多调整其他分布。

样本拆分可能会减少统计量分布的问题,但不会消除它。

您的想法避免了估计值相对于总体值“太接近”的问题,因为它们基于相同的样本。

你并没有避免他们仍然是估计的问题。检验统计量的分布不是列表中的分布。

在这种情况下,它会增加零下的拒绝率,而不是显着降低它。

更好的选择是使用假设参数未知的测试,例如 Shapiro Wilk。

如果您喜欢 Kolmogorov-Smirnov 类型的测试,您可以采用 Lilliefors 测试的方法。

即使用KS统计量但检验统计量的分布反映参数估计的效果——模拟参数估计下检验统计量的分布。(它不再是免分发的,因此您需要为每个分发创建新表。)

http://en.wikipedia.org/wiki/Lilliefors_test

Liliefors 对正态和指数情况使用了模拟,但您可以轻松地对任何特定分布进行模拟;在 R 之类的东西中,模拟 10,000 或 100,000 个样本并在零值下获得检验统计量的分布只是瞬间的问题。

[另一种选择可能是考虑 Anderson-Darling,它确实有同样的问题,但是从 D'Agostino 和 Stephens 的书(Goodness-of-fit-techniques)来看,它似乎对它不太敏感。你可以调整 Lilliefors 的想法,但他们建议进行一个相对简单的调整,似乎效果很好。]

但是还有其他方法;有一系列拟合优度的平滑测试,例如(例如,参见 Rayner 和 Best 的书),在许多特定情况下可以处理参数估计。

* 效果仍然相当大——可能比通常认为可以接受的要大;陌陌对此表示担忧是对的。如果较高的 I 类错误率(和更平坦的功率曲线)是一个问题,那么这可能不是一个改进!

恐怕这解决不了问题。我认为问题不在于参数是从同一样本估计的,而是从任何样本估计的。KS 检验的通常零分布的推导不考虑参考分布参数中的任何估计误差,而是将它们视为给定的。另请参阅Durbin 1973,他详细讨论了这个问题并提供了解决方案。