在R中,我使用phyper
函数做生物信息学分析的超几何测试。然而,我使用了很多Python代码,并且在这里使用rpy2非常缓慢。所以,我开始寻找替代品。似乎scipy.stats.hypergeom
有类似的东西。在Python中,R的“phyper”函数等价于什么?
目前,我叫phyper
这样的:
pvalue <- 1-phyper(45, 92, 7518, 1329)
,其中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
然而,这将返回-7.3450134863151106e-12 ,这没什么意义。请注意,我已经在其他数据上测试了这一点,并且我几乎没有问题(精确到小数点后四位,这对我来说已经足够了)。
所以它归结为这些可能性:
- 我使用了错误的功能作业(或错误参数)
- 有一个在SciPy的
一个错误的情况下, “1”,是否有其他替代phyper
,可以在Python中使用?
编辑:正如评论注意到的,这是一个scipy中的错误,在git master中修复。
仍然给出了否定的p值,但因为我没有其他的测试是相当的,我不知道如果没有任何副作用,我不知道的。 – Einar
我认为它是一个scipy中的错误:http://biostar.stackexchange.com/questions/9746/which-way-to-calculate-cumulative-hypergeometric-distribution-is-more-accurate – James
@Einar看起来像这个问题有最近已修复:http://projects.scipy.org/scipy/ticket/1218尝试更新您的scipy安装 – James