【问题标题】:How work the p-value simulation in the chisq.test() and fisher.test()chisq.test() 和 Fisher.test() 中的 p 值模拟如何工作
【发布时间】:2019-02-03 17:11:56
【问题描述】:

我有应急表 RxC。 chisq.testfisher.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 值?

【问题讨论】:

  • 在 rhelp 邮件列表上的通常回复是查看代码并解释您在理解特定部分时遇到的困难。
  • 同意@42-:你能说得更具体点吗? “[它]如何工作”非常模糊......
  • 我知道测试可以进行蒙特卡罗模拟来估计测试的P值,我想知道的是这些模拟是如何在内部完成的,即如果模拟到达以正态分布或其他分布在测试结束时提供 P 值
  • 它们几乎肯定不会涉及近似正态分布,因为这是一个连续分布。您可能应该搜索超几何分布。
  • @Jonas,您能否在问题中提供所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。”

标签: r simulation contingency


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2011-09-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多