chisq.test() 和 fisher.test() 中的 p 值模拟如何工作
How work the p-value simulation in the chisq.test() and fisher.test()
我有应急 tables RxC。 chisq.test
和 fisher.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.test
和fisher.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)
}
我有应急 tables RxC。 chisq.test
和 fisher.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.test
和fisher.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)
}