phyper:为什么upper.tail和1 - lower.tail不同? (过度代表的渔民精确测试)

时间:2016-04-17 05:24:08

标签: r

Fisher精确检验通常用于通路中基因列表的过表达分析。考虑一个列联表的以下示例:

              in pathway
                 Y   N
in gene list  Y 90  110  |  200 
              N 10  790  |  800
              ------------------
               100  900  | 1000

基本上有两种方法可以在R中进行基于表示分析的Fisher测试。 第一种是使用fisher.test(以应急矩阵作为输入)

fisher.test(matrix(c(90,10,110,790), nrow = 2), alternative = 'greater')$p.value
[1] 1.486473e-59

第二种是使用phyper(Meng's notes give an excellent explanation on how to use phyper, including why the "-1", and what q, m, n, k exactly mean):

phyper(q=90-1, m=100, n=900, k=200, lower.tail = FALSE)
[1] 1.486473e-59

我的问题:为什么这与以下不同:

1 - phyper(q=90-1, m=100, n=900, k=200, lower.tail = TRUE)
[1] 0

1 个答案:

答案 0 :(得分:1)

phyper的C级代码避免了一些计算(导致floating point numerical errors),因此当您专门询问您感兴趣的尾部时,它会更准确。