使用R计算维恩图超几何p值

使用R计算维恩图超几何p值,r,venn-diagram,p-value,R,Venn Diagram,P Value,您好,我看到有人计算维恩图重叠p值,如下面的示例所示。它们使用超几何分布和R。当我在R中应用它们的函数时,我无法得到相同的结果。有人能帮我吗 我在其他人的出版物中看到的示例: 从15220个基因中,集合A是1850+195个基因,集合B是195+596个基因,重叠是195个基因。其p值为2e-26 他们的方法是:给定总共N个基因,如果基因集a和B分别包含m和N个基因,且其中k个基因相同,则富集的p值通过以下公式计算: p = Σ (m,i)(N-m,n-i)/(N,n) 对于i从k到min(m

您好,我看到有人计算维恩图重叠p值,如下面的示例所示。它们使用超几何分布和R。当我在R中应用它们的函数时,我无法得到相同的结果。有人能帮我吗

我在其他人的出版物中看到的示例:

从15220个基因中,集合A是1850+195个基因,集合B是195+596个基因,重叠是195个基因。其p值为2e-26

他们的方法是:给定总共N个基因,如果基因集a和B分别包含m和N个基因,且其中k个基因相同,则富集的p值通过以下公式计算:

p = Σ (m,i)(N-m,n-i)/(N,n)
对于
i
k
min(m,n)
,其中“
(m,i)
”表示二项形式

我使用R的方式是:

sum(选择(596+195195:(195+596))*选择(15220-596-195,(1850+195)-195:(195+596))/choose(152201850+195)

我得到了
NaN

或者使用:
phyper(1951850+19515220-1850-195596+195)
,我得到1

我也参考链接 但是当我计算的时候

1-phyper(4481000138002872)
在R中,我得到了0,而不是链接的1.906314e-81


我对R和statistic完全陌生,很抱歉在这里发布了许多错误。

使用package
gmp
,并将
choose
替换为
chooseZ
,我们可以将您的p值实现为:

require(gmp)

enrich_pvalue <- function(N, A, B, k)
{
    m <- A + k
    n <- B + k
    i <- k:min(m,n)

    as.numeric( sum(chooseZ(m,i)*chooseZ(N-m,n-i))/chooseZ(N,n) )
}
使用pangloss链接中的示例(使用符号),我们得到:


你有出版物的链接吗?您确定论文中报告的p值是针对重叠或其他内容吗?是的,论文链接是(第3页)。非常感谢。另外,纸链接是谢谢你,费迪南德,你的好答案,它解决了我的问题!作为进一步的问题,当使用除“choose”以外的其他命令(如“phyper”)时,您能告诉我一些想法吗?R是否有任何通用设置以生成更精确的数值结果?我真的很感谢你抽出时间。
> enrich_pvalue(15220, 1850, 596, 195)
[1] 1.91221e-18
> enrich_pvalue(N=14800, A=1000-448, B=2872-448, k=448)
[1] 7.289388e-81