如何解决计算 R 中`pnorm()` 生成的两个极端概率之间的差异时绕过机器精度问题
例如,假设我有 p1
和 p2
:
p1 <- pnorm(-50)
p2 <- pnorm(-49)
我想知道它们的区别,即 p2-p1
,或等效的 log(p2-p1)
。不出所料,他们直接计算出的差值对计算机来说为零:
identical(p2-p1,0)
# [1] TRUE
ln_p1 <- pnorm(-50,log.p = T)
ln_p2 <- pnorm(-49,log.p = T)
但是,我不知道如何操纵 ln_p1
和 ln_p2
并在不经历极端值的情况下得到我需要的东西。
是否有一个函数可以直接返回两个极端分位数的概率差异的对数?如上例所示,可能类似于:pnorm_between(-50,-49,log.p = T)
?
我为什么要这样做:
我正在使用 p2-p1
函数处理 log(p2-p1)
(或 optim()
)上的优化(最大化)问题。初始条件有时不可避免地非常极端,导致 p2
和 p1
的极端值,在这种情况下,函数无法在几乎平坦的梯度上迭代自己。虽然可以调整所需的精度,但初始条件也是高度可变的,因此不知道什么精度是足够的。因此,我正在考虑将优化转换为对数或 logit 尺度,但一直无法这样做......
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。