[問題] 關於hypergeometric計算一問

作者: Godkin (山裡的人)   2014-11-17 15:14:21
[問題類型]:
經驗諮詢(我想用R 連接某些資料庫,請問大家的經驗)
[軟體熟悉度]:
使用者(已經有用R 做過不少作品)
[問題敘述]:
大家好,我在計算超幾何分配的機率分佈時遇到了一個問題:
首先, 我總共有24607顆球, 其中白球有1865顆, 黑球有22742顆
要算的是...現在我不放回抽了3460顆,其中至少有379顆白球的機率
在R底下我用的是phyper, python下我用的是stats.hypergeom.sf
但兩者算出的結果有點不同,請問我該相信哪一種方法算出來的結果?
[程式範例]:
R:
1 - phyper(379-1,1865,22742,3460) = 7.993606e-15
Python:
stats.hypergeom.sf(379-1,24607,1865,3460) = 7.96882090302e-15
奇怪的是, 如果我在phyper當中開啟log.p的設定:
-phyper(379-1,1865,22742,3460,log.p=TRUE) = 7.968821e-15
就可以得到跟python一樣的結果, 請問為何會這樣?
*[m
[關鍵字]:
hypergeometric
作者: Wush978 (拒看低質媒體)   2014-11-17 16:37:00
結果好像只差一點點, 可能是浮點數運算導致的不一致
作者: bxxl (bool)   2014-11-17 16:53:00
看文件裡有沒有寫log.p代表什麼設定,感覺是approximation可能是計算過程中,有沒有把機率變成log表示?
作者: Godkin (山裡的人)   2014-11-17 17:31:00
log.p =>if TRUE, probabilities p are given as log(p).用phyper比較慘的是-算抽到5704球,至少694顆白球的機率用phyper的結果會變成0, 但是用python可以得到6.088e-46不過加上log.p還有取負值, 結果就會跟python一樣了
作者: gsuper (Logit(odds))   2014-11-25 21:02:00
R在 10^-14 ~ 10^-22 的數字都不太可信
作者: Carollax (更更)   2014-12-10 16:12:00
機率太小的話都要取log 否則在R裡會顯示0

Links booklink

Contact Us: admin [ a t ] ucptt.com