在R中,我使用该phyper函数进行生物信息学分析的超几何测试.但是我使用了很多Python代码并且在这里使用rpy2非常慢.所以,我开始寻找替代品.似乎scipy.stats.hypergeom有类似的东西.
目前,我这样打电话phyper:
pvalue <- 1-phyper(45, 92, 7518, 1329)
Run Code Online (Sandbox Code Playgroud)
其中45是具有感兴趣的财产的所选项目的数量,92是具有该财产的总项目数量,7518是没有该财产的未选择项目的数量,以及1329是所选项目的总数量.
在R中,这产生了6.92113e-13.
scipy.stats.hypergeom然而,尝试执行相同操作会产生完全不同的结果(注意,数字是交换的,因为函数以不同的方式接受数字):
import scipy.stats as stats
pvalue = 1-stats.hypergeom.cdf(45, 7518, 92. 1329)
print pvalue
Run Code Online (Sandbox Code Playgroud)
但是这会返回-7.3450134863151106e-12,这没什么意义.请注意,我已经对其他数据进行了测试,但我遇到的问题很小(相同的精度直到小数点后4位,这对我来说已经足够了).
所以归结为这些可能性:
在"1"的情况下,是否有其他替代方法phyper可以在Python中使用?
编辑:正如评论所指出的,这是scipy中的一个错误,在git master中修复.
从文档中,您可以尝试:
hypergeom.sf(x,M,n,N,loc=0):生存功能(1-cdf - 有时更准确)
此外,我认为你可能会混淆价值观.
模型从bin中绘制对象.M是对象的总数,n是I类对象的总数.RV计算N中的I类对象的数量,而不从群体中替换.
因此,我的阅读:x=q,M=n+m,n=m,N=k.
所以我会尝试:
stats.hypergeom.sf(45,(92+7518),92,1329)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2799 次 |
| 最近记录: |