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

时间:2018-08-29 02:10:25

标签: r simulation contingency

我有列联表RxC。用参数chisq.test调用fisher.testsimulate.p.value = TRUE, B = 5000函数是如何工作的?

我正在使用下面的代码来验证列联表DATA中的关联(或独立性):

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

我知道该测试可以执行蒙特卡洛模拟来估计该测试的p值,我想知道的是这些模拟是如何在内部完成的,也就是说,如果使模拟达到正态分布或在测试结束时提供p值的其他分布?

1 个答案:

答案 0 :(得分:0)

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)
}