2013-04-16 44 views
1

如何在R中得到更有效的數字?具體來說,我下面舉個例子:R的更多有效數字

> dpois(50, lambda= 5) 
    [1] 1.967673e-32 

然而,當我得到的p值:

> 1-ppois(50, lambda= 5) 
    [1] 0 

顯然,p值不爲0。事實上,它應該比1.967673e更大^ -32,因爲我總結了一堆概率。我如何獲得額外的精度?

+0

看[這裏](HTTP://計算器.com/questions/7681756/rounding-numbers-in-r-to-specified-number-of-digits/7682869)和[here](http://stackoverflow.com/questions/3245862/format-numbers-to-重要人物 - 很好的在r) – nograpes

+0

嗨,我已經試過prettyNum,格式和signif,但它總是出來0! – user1357015

+0

您無法獲得小於2.2e-16的p值。 http://stackoverflow.com/questions/6970705/why-cant-i-get-a-p-value-smaller-than-2-2e-16 – Chargaff

回答

7

使用

ppois(50, lambda= 5, lower.tail=FALSE) 
## [1] 2.133862e-33 

詢問R鍵計算上尾比計算下尾,並從1中減去準確得多:給出其浮點精度,R具有與區分1 1 -eps爲值麻煩的eps小於.Machine$double.neg.eps,通常在10^{ - 16}左右(參見?.Machine)。

注意這個問題將在?ppois討論:

Setting ‘lower.tail = FALSE’ allows to get much more precise 
results when the default, ‘lower.tail = TRUE’ would return 1, see 
the example below. 

還要注意的是你對價值需要比dpois(50, lambda=5)更大評論是不完全正確; ppois(x,...,lower.tail=FALSE)給出的概率隨機變量大於x更大,因爲你可以看到這ppois(0,...,lower.tail=FALSE)不完全是1,或看到(例如):

dpois(50,lambda=5) + ppois(50,lambda=5,lower.tail=FALSE) 
## [1] 2.181059e-32 
ppois(49,lambda=5,lower.tail=FALSE) 
## [1] 2.181059e-32 
+0

嗨,完美,正是我一直在尋找。也感謝您對p值的評論。它看起來像計算一個pvalue,如果我的obs是x,我需要dpois(x,lambda)+ ppois(x,lambda,lower.tail = FALSE)或等價的,ppois(x-1 lambda,lower.tail = FALSE )。 – user1357015

+0

是的,沒錯。 –