Fisher精确检验中descr::CrossTable()中的错误

jq6vz3qz  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(260)

我正在使用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不能“开箱即用”地工作,即不设置workspacesimulate.p.value这样的可选参数吗?

mkshixfv

mkshixfv1#

descr::CrossTable呼叫

fisher.test(tab, alternative = "two.sided")

始终使用默认的workspace = 200000simulate.p.value = FALSE。因此,如果不修改gmodels的源代码并安装修改后的版本,用户目前无法增加工作空间或模拟 p 值。
我鼓励您联系maintainer("descr"),让他们实现这个非常合理的特性,也许可以提供一个指向这个问题的链接。
回答你的第二个问题:问题不在于m-by-n列联表 * 本身 * 太大。为了精确计算 p 值,底层例程FEXACT必须构造
概率小于或等于观察表的概率的所有表,p 值是这些概率的总和
(from工作空间被分配用于该计算,而不是存储传递给fisher.test的观察到的列联表x

相关问题