如何在 R 中获得更多有效数字?具体来说,我有以下示例:
> dpois(50, lambda= 5)
[1] 1.967673e-32
但是,当我得到 p 值时:
> 1-ppois(50, lambda= 5)
[1] 0
显然,p 值不是 0。实际上它应该大于 1.967673e-32,因为我正在对一堆概率求和。如何获得额外的精度?
如何在 R 中获得更多有效数字?具体来说,我有以下示例:
> dpois(50, lambda= 5)
[1] 1.967673e-32
但是,当我得到 p 值时:
> 1-ppois(50, lambda= 5)
[1] 0
显然,p 值不是 0。实际上它应该大于 1.967673e-32,因为我正在对一堆概率求和。如何获得额外的精度?
使用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