2

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

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

但是,当我得到 p 值时:

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

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

4

1 回答 1

8

使用lower.tail=FALSE

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

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

这个问题在?ppois:

当默认值“lower.tail = TRUE”返回 1 时,设置“lower.tail = FALSE”可以获得更精确的结果,请参见下面的示例。

另请注意,您对需要大于的值的评论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
于 2013-04-16T15:33:01.983 回答