如何在 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