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

Jon*_*nas 6 r

我从不同的地方得到了两个样本.我感兴趣的参数是离散的(频率).我对两个站点进行了模拟,因此我知道每个站点的随机分布的概率.由于我的模拟,我知道我的参数与其平均值的偏差不是正常分布的,因此我进行了参数测试.我检查了单样本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)
Run Code Online (Sandbox Code Playgroud)

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

stats::ks.test(sample1, sample2)
dgof::ks.test(sample1, sample2)
Run Code Online (Sandbox Code Playgroud)

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

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

或者(虽然与R没有特别关联):如果没有人知道如何以可承受的工作量来做这件事,我会选择未经修正的p值,因此要小心地讨论结果.但p值低于0.0001.我其实并没有过分关注它.但是我知道什么......你认为这是对的还是我在这种情况下犯了一个严重的错误?

在此先感谢,我已经感谢您在这里阅读.

pbi*_*ble 5

正如评论中所提到的,包匹配功能ks.boot实现了Bootstrap Kolmogorov-Smirnov,即蒙特卡罗模拟用于任意数量的带nboots参数的重新采样.我想这会给你你需要的东西.