11

我想重用stats 模拟列联表的包中的 R 代码来计算p.value卡方检验的模拟值。

查看chisq.test函数源代码时,可以看到以下内容:

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

这里有趣的一行是.Callcall :

tmp <- .Call(C_chisq_sim, sr, sc, B, E)

如果可能的话,我想做的是C_chisq_sim在我自己的代码中使用这个函数,但我无法做到。如果我尝试:

tmp <- .Call(C_chisq_sim, sr, sc, B, E, PACKAGE="stats")

我得到一个C_chisq_sim object not found错误。如果我尝试:

tmp <- .Call("C_chisq_sim", sr,sc,B,E, PACKAGE="stats") 

我收到一条错误消息,指出入口点不在加载表中。

如果可能的话,我想要一个跨平台的解决方案。

4

2 回答 2

14

我猜这应该可以解决问题:

tmp <- .Call(stats:::C_chisq_sim, sr, sc, B, E, PACKAGE="stats")
于 2013-06-25T13:51:59.887 回答
0

另一个选择是使用 R 函数r2dtable(参见文档)。

两者都C_chisq_sim使用r2dtable相同的AS159 算法。如果您想要其他源代码选项,请参阅此参考

于 2017-07-17T23:59:55.837 回答