在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