使用R计算维恩图超几何p值
您好,我看到有人计算维恩图重叠p值,如下面的示例所示。它们使用超几何分布和R。当我在R中应用它们的函数时,我无法得到相同的结果。有人能帮我吗 我在其他人的出版物中看到的示例: 从15220个基因中,集合A是1850+195个基因,集合B是195+596个基因,重叠是195个基因。其p值为2e-26 他们的方法是:给定总共N个基因,如果基因集a和B分别包含m和N个基因,且其中k个基因相同,则富集的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 = Σ (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