检索卡方检验的蒙特卡洛模拟值

标签 r simulation chi-squared

我正在尝试绘制卡方检验中的零分布图。在 R 中,使用代码进行蒙特卡洛模拟以获得经验 p 值是可行的:

chisq.test(d,simulate.p.value=TRUE,B=10000)

但它不返回分布图。有什么方法可以让 R 返回测试的模拟值吗?

最佳答案

如果您查看 chisq.test 的函数定义(capture.output(chisq.test) 的第 56 行左右),您将看到模拟部分:

    if (simulate.p.value && all(sr > 0) && all(sc > 0)) {
        setMETH()
        tmp <- .Call(C_chisq_sim, sr, sc, B, E)
        STATISTIC <- sum(sort((x - E)^2/E, decreasing = TRUE))
        PARAMETER <- NA
        PVAL <- (1 + sum(tmp >= almost.1 * STATISTIC))/(B + 
            1)
    }

这是调用 C 函数。首先生成一些虚拟数据

## Some data
x <- as.table(rbind(c(762, 327, 468), c(484, 239, 477)))
dimnames(x) <- list(gender = c("F", "M"),
                party = c("Democrat","Independent", "Republican"))

然后捕获你需要的位

sr <- rowSums(x)
sc <- colSums(x)
n <- sum(x)
E <- outer(sr, sc, "*")/n
v <- function(r, c, n) c * r * (n - r) * (n - c)/n^3
V <- outer(sr, sc, v, n)
dimnames(E) <- dimnames(x)
B = 2000
tmp <- .Call(stats:::C_chisq_sim, sr, sc, B, E)
STATISTIC <- sum(sort((x - E)^2/E, decreasing = TRUE))
almost.1 <- 1 - 64 * .Machine$double.eps                                                  
PVAL <- (1 + sum(tmp >= almost.1 * STATISTIC))/(B + 1)

变量 tmp 包含您想要的输出。变量 PVAL 匹配

的输出
chisq.test(x, simulate.p.value = T, B=2000)$p.value

请注意,我使用了 :::,因为函数 C_chisq_sim 不是从 stats 中导出的。

关于检索卡方检验的蒙特卡洛模拟值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36763010/

相关文章:

r - 抓取需要点击按钮的网站

r - Highcharts X 轴类别名称仅显示 1 个字符

r - 在 R Shiny 中加载数据时显示消息而不是/在绘图内

simulation - 使用 SUMO 场景的子集进行 OMNeT++ 网络模拟(使用 VEINS)

python - 如何为任务优先级建模?

c++ - C++ 中的卡方概率函数

machine-learning - 如何验证两个文本数据集是否来自不同的分布?

r - 如何用基础数据替换不等式条件

simulation - Modelica 中基于代理的建模

r - 在进行卡方检验时修复 for 循环中的列