更有效的数字

时间:2013-04-16 15:03:46

标签: r significant-digits

如何在R中获得更多有效数字?具体来说,我有以下示例:

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

然而,当我得到p值时:

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

显然,p值不是0.实际上它应该大于1.967673e-32,因为我总结了一堆概率。如何获得额外的精度?

1 个答案:

答案 0 :(得分:8)

使用lower.tail=FALSE

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

要求R计算上部尾部比计算下部尾部要精确得多,并且从1减去它:鉴于浮点精度的固有限制,R无法区分(1 - eps)从1开始,eps的值小于.Machine$double.neg.eps,通常约为10 ^ { - 16}(见?.Machine)。

?ppois中讨论了这个问题:

  

设置'lower.tail = FALSE'可以更加精确        结果当默认值'lower.tail = TRUE'将返回1时,请参阅        以下示例。

另请注意,您对值必须大于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