簡體   English   中英

Python 中 R 的“phyper”function 的等價物是什么?

[英]What are equivalents to R's “phyper” function in Python?

在 R 中,我使用phyper function 進行生物信息學分析的超幾何測試。 但是我使用了很多 Python 代碼並且在這里使用 rpy2 非常慢。 於是,我開始尋找替代品。 似乎scipy.stats.hypergeom有類似的東西。

目前,我這樣稱呼phyper

pvalue <- 1-phyper(45, 92, 7518, 1329)

其中 45 是具有感興趣屬性的選定項目數,92 是具有該屬性的總項目數,7518 是不具有該屬性的非選定項目數,1329 是選定項目的總數。

在 R 中,這會產生6.92113e-13

嘗試對scipy.stats.hypergeom執行相同操作會產生完全不同的結果(請注意,數字被交換,因為 function 以不同的方式接受數字):

import scipy.stats as stats   
pvalue = 1-stats.hypergeom.cdf(45, 7518, 92. 1329)
print pvalue

然而,這會返回 -7.3450134863151106e-12,這沒什么意義。 請注意,我已經在其他數據上對此進行了測試,並且遇到了一些小問題(精確到小數點后 4 位,這對我來說已經足夠了)。

所以歸結為這些可能性:

  1. 我在工作中使用了錯誤的 function(或錯誤的參數)
  2. scipy 中有一個錯誤

在“1”的情況下,還有其他可以在phyper中使用的 phyper 替代品嗎?

編輯:正如評論所指出的,這是 scipy 中的一個錯誤,已在 git 主控中修復。

docs ,您可以嘗試:

hypergeom.sf(x,M,n,N,loc=0) : 生存 function (1-cdf — 有時更准確)

另外,我認為您可能混淆了價值觀。

模型從箱中繪制對象。 M 是對象總數,n 是 I 類對象的總數。 RV 計算 N 中 I 類對象的數量,無需從總體中替換。

因此,通過我的閱讀: x=qM=n+mn=mN=k

所以我會嘗試:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM