chisq.test() 和 fisher.test() 中的 p 值模拟如何工作

How work the p-value simulation in the chisq.test() and fisher.test()

我有应急 tables RxC。 chisq.testfisher.test 函数在使用参数 simulate.p.value = TRUE, B = 5000 调用时如何工作?

我正在使用下面的代码来验证偶然事件中的关联(或独立)table DATA:

 chisq.test(DATA, simulate.p.value = TRUE, B = 5000, correct = FALSE)
 fisher.test(DATA,hybrid = TRUE, simulate.p.value = TRUE)

我知道测试可以执行Monte Carlo模拟来估计测试的p值,我想知道的是这些模拟是如何在内部完成的,也就是说,如果模拟是为了得出正态分布或其他分布以在测试结束时提供 p 值?

chisq.testfisher.test中,p值模拟是在没有先验分布假设的情况下以非参数方式进行的。请查看 chisq.test:

的源代码摘录
if (simulate.p.value) {
    setMETH()
    nx <- length(x)
    sm <- matrix(sample.int(nx, B * n, TRUE, prob = p), 
                 nrow = n)
    ss <- apply(sm, 2L, function(x, E, k) {
      sum((table(factor(x, levels = 1L:k)) - E)^2/E)
    }, E = E, k = nx)
    PARAMETER <- NA
    PVAL <- (1 + sum(ss >= almost.1 * STATISTIC))/(B + 1)
}