python - Python 中 R 的 "phyper"函数有哪些等价物?

标签 python statistics

在 R 中,我使用 phyper 函数对生物信息学分析进行超几何检验。但是我使用了很多 Python 代码并且在这里使用 rpy2 非常慢。所以,我开始寻找替代品。似乎 scipy.stats.hypergeom 也有类似的东西。

目前,我这样调用 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,这毫无意义。请注意,我已经在其他数据上对此进行了测试,但几乎没有问题(精确到小数点后第四位,这对我来说已经足够了)。

所以它归结为这些可能性:

  1. 我在工作中使用了错误的函数(或错误的参数)
  2. scipy 中有一个错误

如果是“1”,是否有其他可以在 Python 中使用的 phyper 替代品?

编辑:如评论所述,这是 scipy 中的错误,已在 git master 中修复。

最佳答案

来自docs ,你可以试试:

hypergeom.sf(x,M,n,N,loc=0) : survival function (1-cdf — sometimes more accurate)

此外,我认为您可能混淆了这些值。

Models drawing objects from a bin. M is total number of objects, n is total number of Type I objects. RV counts number of Type I objects in N drawn without replacement from population.

因此,根据我的阅读:x=qM=n+mn=mN=k

所以我会尝试:

stats.hypergeom.sf(45,(92+7518),92,1329)

关于python - Python 中 R 的 "phyper"函数有哪些等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6594840/

相关文章:

javascript - 使用 WebDriver 登录到 javascript 控制台

statistics - 如何解释双对数市场组合模型中的系数

C++ 使用 std::accumulate 计算不正确的标准偏差

r - 如何在 RStudio 中 merge git 分支

javascript - 将当前时间转换为 WebKit/Chrome 17 位时间戳

python - Patsy:测试数据中分类字段的新级别

python - 如何在列表中查找特定长度的重复序列?

oracle - 执行用户定义的统计函数时如何提高 Oracle 性能?

r - 用于异常检测的具有缺失值的时间序列的 STL 分解

python - 由于文件路径中的特殊字符,OpenCv imwrite 不起作用