我正在将未缩放的密度函数转换为对数比例以避免下溢问题。
在我使用对数变换之前,BI 在值网格上对该函数执行积分,以构建基于网格的累积分布函数。然后,使用来自制服 [0,1] 的抽签,我选择了网格上最大的点,其累积概率值小于来自制服的抽签。只要可以集成单变量密度函数,这种方法就可以正常工作。
随着对数比例的转换,我无法真正理解这种机制。联合似然是如此之小,以至于我无法对密度进行反向变换,因此我必须在对数尺度上执行相同的基于均匀分布的采样。这是一种既定的做法吗?反馈和指针将不胜感激。
我正在将未缩放的密度函数转换为对数比例以避免下溢问题。
在我使用对数变换之前,BI 在值网格上对该函数执行积分,以构建基于网格的累积分布函数。然后,使用来自制服 [0,1] 的抽签,我选择了网格上最大的点,其累积概率值小于来自制服的抽签。只要可以集成单变量密度函数,这种方法就可以正常工作。
随着对数比例的转换,我无法真正理解这种机制。联合似然是如此之小,以至于我无法对密度进行反向变换,因此我必须在对数尺度上执行相同的基于均匀分布的采样。这是一种既定的做法吗?反馈和指针将不胜感激。
据我了解,您通常已离散化以创建一组点,概率为,然后计算累积概率,例如。所以你可以画然后取 where,或类似的东西。
但是您当前的问题是太小了,您只想使用。
一种方法是将从最大到最小排序,然后使用类似于以下函数的函数计算部分和,该函数根据和。 addlog
addlog(a, b, THRESH=200.0)
{
if(b > a + THRESH) return(b);
else if(a > b + THRESH) return(a);
else return(a + log1p(exp(b-a)));
}
哪里log1p(x)
返回log(1+x)
。
但是,实际上,我认为您应该关注足够大而无需担心下溢的 x_i ,而忽略非常的。如果所有都很小,那么您似乎应该更粗略地网格化。我认为,在大多数应用程序中,离散化到 1000 个左右的值就足够了。