首页 > 解决方案 > chisq.test() 和 Fisher.test() 中的 p 值模拟如何工作

问题描述

我有应急表 RxC。chisq.test使用参数调用时函数和fisher.test函数如何 工作simulate.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 值?

标签: rsimulationcontingency

解决方案


Inchisq.testfisher.testp 值模拟以非参数方式进行,没有先验分布假设。请参阅源代码摘录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)
}

推荐阅读