我想重用模拟列联表的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)
}
这里有趣的一行是.Call
电话:
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")
我收到错误消息,说输入点不在加载表中。
如果可能的话,我想要一个跨平台的解决方案。
答案 0 :(得分:12)
我应该这样做:
tmp <- .Call(stats:::C_chisq_sim, sr, sc, B, E, PACKAGE="stats")
答案 1 :(得分:0)
另一个选择是使用R函数r2dtable
(参见documentation)。
C_chisq_sim
和r2dtable
都使用相同的 AS159算法。如果您想要其他源代码选项,请参阅此reference。