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