![](/img/trans.png)
[英]What are the Python equivalents to Ruby's bundler / Perl's carton?
[英]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”的情況下,還有其他可以在phyper
中使用的 phyper 替代品嗎?
編輯:正如評論所指出的,這是 scipy 中的一個錯誤,已在 git 主控中修復。
從docs ,您可以嘗試:
hypergeom.sf(x,M,n,N,loc=0)
: 生存 function (1-cdf — 有時更准確)
另外,我認為您可能混淆了價值觀。
模型從箱中繪制對象。 M 是對象總數,n 是 I 類對象的總數。 RV 計算 N 中 I 類對象的數量,無需從總體中替換。
因此,通過我的閱讀: x=q
, M=n+m
, n=m
, N=k
。
所以我會嘗試:
stats.hypergeom.sf(45,(92+7518),92,1329)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.