1

我在 R 中使用带有模拟 p 值的 Fisher 精确检验时遇到问题,但我不知道这是否是由“技术”( R )引起的,或者它是否(统计上)打算以这种方式工作。

我想使用的数据集之一:

matrix(c(103,0,2,1,0,0,1,0,3,0,0,3,0,0,0,0,0,0,19,3,57,11,2,87,1,2,0,869,4,2,8,1,4,3,18,16,5,60,60,42,1,1,1,1,21,704,40,759,404,151,1491,9,40,144),ncol=2,nrow=27)

无论我多久重复一次测试,得到的 p 值总是相同的:

p = 1 / (B+1)
(B = number of replicates used in the Monte Carlo test)

当我缩短矩阵时,如果行数低于 19,它会起作用。不过,这与矩阵中单元格的数量无关。将其转换为具有 3 列的矩阵后,它仍然不起作用,尽管在仅两列中使用相同的数字时它会起作用。

改变模拟 p 值:

>a <- matrix(c(103,0,2,1,0,0,1,0,3,0,0,3,0,0,0,0,0,0,869,4,2,8,1,4,3,18,16,5,60,60,42,1,1,1,1,21),ncol=2,nrow=18)

>b <- matrix(c(103,0,2,1,0,0,1,0,3,0,0,3,0,0,0,0,0,0,19,869,4,2,8,1,4,3,18,16,5,60,60,42,1,1,1,1,21,704),ncol=2,nrow=19)

>c <- matrix(c(103,0,2,1,0,0,1,0,3,0,0,3,0,0,0,0,0,0,869,4,2,8,1,4,3,18,16,5,60,60,42,1,1,1,1,21),ncol=3,nrow=12)

>fisher.test(a,simulate.p.value=TRUE)$p.value

a和中的单元数b相同,但模拟仅适用于矩阵 a。有谁知道这是统计问题还是R问题,如果是,如何解决?

感谢您的建议

4

1 回答 1

4

我认为你只是看到了一个非常重要的结果。p 值被计算为与原始矩阵一样极端或更极端的模拟(和原始)矩阵的数量。如果随机生成的矩阵都不是极端或更极端,则 p 值将只是 1(原始矩阵与自身一样极端)除以矩阵总数 $B+1$(模拟的 B 和1个原始矩阵)。如果您使用足够多的样本(足够高的 B)运行该函数,那么您将开始看到一些随机矩阵是极端或更极端的,因此 p 值会发生变化,但这样做的时间可能不合理。

于 2014-03-29T15:50:52.880 回答