我正在使用R包descr中的CrossTable
函数进行成对比较。我对Fisher精确检验感兴趣,因为我的非正态分布数据的细胞计数较低。CrossTable
抛出此错误:
Error in fisher.test(tab, alternative = "two.sided") :
FEXACT error 6. LDKEY=616 is too small for this problem,
(ii := key2[itp=960] = 5666926, ldstp=18480)
Try increasing the size of the workspace and possibly 'mult'
In addition: Warning message:
In chisq.test(tab, correct = FALSE, ...) :
Chi-squared approximation may be incorrect
我很熟悉fisher.test
中的类似错误,通常可以通过增加工作空间或模拟 p 值来解决:
fisher.test(x, workspace = <large number>)
fisher.test(x, simulate.p.value = TRUE)
是否可以将这样的可选参数传递给CrossTable
主体中的fisher.test
调用?
注意,我的列联表x
定义为:
x <-
structure(c(45L, 15L, 0L, 0L, 16L, 3L, 238L, 317L, 2L, 35L, 47L,
1L, 15L, 20L, 0L, 22L, 14L, 0L, 20L, 183L, 25L), dim = c(3L,
7L), dimnames = structure(list(c("A", "B", "C"), c("1", "2",
"3", "4", "5", "6", "7")), names = c("", "")), class = "table")
这实际上并不是那么大。你知道为什么fisher.test
不能“开箱即用”地工作,即不设置workspace
和simulate.p.value
这样的可选参数吗?
1条答案
按热度按时间mkshixfv1#
descr::CrossTable
呼叫始终使用默认的
workspace = 200000
和simulate.p.value = FALSE
。因此,如果不修改gmodels的源代码并安装修改后的版本,用户目前无法增加工作空间或模拟 p 值。我鼓励您联系
maintainer("descr")
,让他们实现这个非常合理的特性,也许可以提供一个指向这个问题的链接。回答你的第二个问题:问题不在于
m
-by-n
列联表 * 本身 * 太大。为了精确计算 p 值,底层例程FEXACT
必须构造概率小于或等于观察表的概率的所有表,p 值是这些概率的总和
(from工作空间被分配用于该计算,而不是存储传递给
fisher.test
的观察到的列联表x
。