微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算 R 中`pnorm()` 生成的两个极端概率之间的差异时绕过机器精度问题

如何解决计算 R 中`pnorm()` 生成的两个极端概率之间的差异时绕过机器精度问题

例如,假设我有 p1p2

p1 <- pnorm(-50)
p2 <- pnorm(-49)

我想知道它们的区别,即 p2-p1,或等效的 log(p2-p1)。不出所料,他们直接计算出的差值对计算机来说为零:

identical(p2-p1,0)
# [1] TRUE 

通常,处理 pnorm 中极值的最佳方法是使用对数值:

ln_p1 <- pnorm(-50,log.p = T)
ln_p2 <- pnorm(-49,log.p = T)

但是,我不知道如何操纵 ln_p1ln_p2 并在不经历极端值的情况下得到我需要的东西。

是否有一个函数可以直接返回两个极端分位数的概率差异的对数?如上例所示,可能类似于:pnorm_between(-50,-49,log.p = T)?


我为什么要这样做:

我正在使用 p2-p1 函数处理 log(p2-p1)(或 optim())上的优化(最大化)问题。初始条件有时不可避免地非常极端,导致 p2p1 的极端值,在这种情况下,函数无法在几乎平坦的梯度上迭代自己。虽然可以调整所需的精度,但初始条件也是高度可变的,因此不知道什么精度是足够的。因此,我正在考虑将优化转换为对数或 logit 尺度,但一直无法这样做......

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。