计算 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...