簡體   English   中英

如何在R中獲得精確的低p值(來自F檢驗)

[英]How to get precise low p-value in R (from F test)

我正在計算R中F檢驗的p值,它似乎無法顯示低於1e-16的任何值。 例如,對於F值從80到90,自由度1,200:

> 1-pf(80:90,1,200)
 [1] 2.220446e-16 2.220446e-16 1.110223e-16 1.110223e-16 0.000000e+00 0.000000e+00 0.000000e+00
 [8] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00

如何提高pf()函數計算的精度?

無論如何, p值這么低都沒有意義。 首先,大多數計算使用輕微的近似值,因此不精確性會影響結果,因為您傾向於零p值,其次,可能更重要的是,您的人口與模型分布的任何微小偏差都將超出您所希望的准確度。

簡單地將p值引用為“ p <0.0001”並完成它。

除了傑克關於p值的實用建議之外,函數定義得很好(如果不實用的話),所以我將給出有限精度的數學推理,但這不起作用。

.Machine$double.eps2.220446e-16 ,這是你可以添加到1並獲得不同的最小數字。 所以差異從1,這是你得到的最小值。

> pf(80:90,1,200)
 [1] 1 1 1 1 1 1 1 1 1 1 1
> sprintf("%.17f",pf(80:90,1,200))
 [1] "0.99999999999999978" "0.99999999999999978" "0.99999999999999989"
 [4] "0.99999999999999989" "1.00000000000000000" "1.00000000000000000"
 [7] "1.00000000000000000" "1.00000000000000000" "1.00000000000000000"
[10] "1.00000000000000000" "1.00000000000000000"
> sprintf("%a", pf(80:90,1,200))
 [1] "0x1.ffffffffffffep-1" "0x1.ffffffffffffep-1" "0x1.fffffffffffffp-1"
 [4] "0x1.fffffffffffffp-1" "0x1p+0"               "0x1p+0"              
 [7] "0x1p+0"               "0x1p+0"               "0x1p+0"              
[10] "0x1p+0"               "0x1p+0"              

但是你可以使用逼近$ 1-p = - \\ ln(p)$以及你可以更准確地得到p值的對數這一事實

> -pf(80:90,1,200,log.p=TRUE)
 [1] 2.540347e-16 1.770938e-16 1.236211e-16 8.640846e-17 6.047690e-17
 [6] 4.238264e-17 2.974043e-17 2.089598e-17 1.470045e-17 1.035491e-17
[11] 7.303070e-18

暫無
暫無

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

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