Kolmogorov-Smirnov 检验:当存在关系时,应用于离散变量的两样本检验的精确 p 值

Posted

技术标签:

【中文标题】Kolmogorov-Smirnov 检验:当存在关系时,应用于离散变量的两样本检验的精确 p 值【英文标题】:Kolmogorov-Smirnov test: exact p-values for a two-sample test applied to a discrete variable when ties exist 【发布时间】:2014-03-13 11:47:42 【问题描述】:

我从不同的站点获得了两个样本。我感兴趣的参数是离散的(频率)。我对两个站点都进行了模拟,所以我知道每个站点随机分布的概率。由于我的模拟,我知道我的参数与其平均值的偏差不是正态分布的,所以我进行了参数测试。我检查了单样本 Kolmogorov-Smirnov 样本是否可能来自这些随机分布(示例数据,不是真实的):

sample1 <- rep(1:5, c(25, 12, 12, 0, 1))
rand.prob1 <- c(.51, .28, .111, .08, 0.019)
StepProb1 <- stepfun(0:4, c(0, cumsum(rand.prob1)), right = T)
dgof::ks.test(sample1, StepProb1)

sample2 <- rep(1:5, c(19, 13, 10, 5, 3))
rand.prob2 <- c(.61, .18, .14, .05, 0.02)
StepProb2 <- stepfun(0:4, c(0, cumsum(rand.prob2)), right = T)
dgof::ks.test(sample2, StepProb2)

在下一步中,我想检查两个站点的样本是否可能来自相同的分布。 KS 测试的两个实现(包statsdgof)都会发出警告,因为我的样本有联系:

stats::ks.test(sample1, sample2)
dgof::ks.test(sample1, sample2)

如果我对Dufour and Farhat (2001) 的理解正确,则有一种方法可以通过蒙特卡洛模拟通过平局计算精确的 p 值。如果我正确理解 dgof 包的包描述,它的蒙特卡罗模拟实现仅适用于单样本测试。

所以我的问题是:有没有人知道如何计算 R 中的精确 p 值,以便在存在关联时应用于离散变量的两样本 Kolmogorov-Smirnov 检验?

或者(尽管与 R 没有特别相关):如果没有人知道如何在可容忍的工作量下做到这一点,我会选择未校正的 p 值,因此会谨慎讨论结果。但是 p 值低于 0.0001。我其实并没有过分担心它。但是我知道什么……你认为这是对的还是我在这种情况下犯了一个严重的错误?

提前致谢,感谢您阅读到这里。

【问题讨论】:

看看bootstraped KS Test。 【参考方案1】:

如评论中所述,function ks.boot of package Matching 实现了 Bootstrap Kolmogorov-Smirnov,即使用nboots 参数对任意数量的重新采样进行蒙特卡罗模拟。我认为这会给你你所需要的。

【讨论】:

引导程序将我带入了正确的方向,并且该软件包似乎在社区中得到了很好的接受,因此我将奖励这个答案。 感谢您的赏金。 Bootstrapping 是工具箱中最强大的统计技术之一。我会鼓励大家研究一下。 感谢您的建议。提到的包裹看起来正是我想要的。我肯定也会仔细研究引导程序。【参考方案2】:

根本不知道你是否可以在这里申请KS。 Kolmogorov-Smirnov 是 NON 参数检验,仅适用于连续 x 和 y 数据。我猜你的 sample1 和 sample2 不是连续的“足够”。引用?stats::ks.test

如果 y 是数字,则对 x 和 y 的原假设进行两样本检验 从相同的连续分布中提取。

另见:

https://stats.stackexchange.com/questions/1047/is-kolmogorov-smirnov-test-valid-with-discrete-distributions http://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test

解决方案:尝试执行卡方拟合优度检验 在R 中,您使用?chisq.test 执行此操作。 例如,理论可以在这里找到:

http://www.stat.yale.edu/Courses/1997-98/101/chigf.htm http://www.itl.nist.gov/div898/handbook/eda/section3/eda35f.htm

【讨论】:

Chisq.test 可能不适用,具体取决于数据,如果两个数据集中的离散观测值不相同,因为您需要先构建列联表? @iraserd:不幸的是,这是真的 有点相关,On the statistical treatment of football numbers。

以上是关于Kolmogorov-Smirnov 检验:当存在关系时,应用于离散变量的两样本检验的精确 p 值的主要内容,如果未能解决你的问题,请参考以下文章

Kolmogorov-Smirnov 检验中的假设检验 - 无论是临界值还是 p 值

3.5 样本分布K-S检验 ——python实战

KS 检验

R语言之正态性检验

什么是K-S检验

什么是K-S检验