[英]Calculating miniscule numbers for chi-squared distribution — numerical precision
我在 R 中使用pchisq
函數來計算卡方分布的累積分布函數。 我想計算非常小的值,這樣1-pchisq(...)
的值可以小於 2.2e-16(這是 R 數字格式的數字精度限制)。 現在,這些非常小的值只是變成了 0。
我嘗試過的事情:
將數字顯示選項設置為 22(最大)
使用Rmpfr
包提高精度,但該數字格式不適用於pchisq
函數
將 CDF 函數分解為其分量伽馬函數,但這會導致類似的精度限制。 關於如何計算我想要的任何想法?
背景:我使用Fisher 的方法來組合一堆 p 值。 是的,我知道這些 p 值很小,但它實際上對我正在分析的內容很有用。
幾件事。
format.pval
:format.pval(1e-20)
## [1] "< 2.22e-16"
1e-330
## [1] 0
@SeverinPappadeux 的建議完全正確:
pchisq(121231,1,lower.tail=FALSE,log.p=TRUE)
## [1] -60621.58
這相當於 10^(-26327):
-60621.58/log(10)
## -26327.62
檢查一個不太極端的值:
log10(pchisq(100,1,lower.tail=FALSE) )
## [1] -22.81702
pchisq(100,1,lower.tail=FALSE,log.p=TRUE)/log(10)
## [1] -22.81702
此外, log(p)
正是您需要用於 Fisher 方法的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.