计算可能性时nn很大,所以可能性变得很小?

机器算法验证 r 可能性 后部
2022-03-25 16:28:03

我正在尝试计算这个后验分布:

(θ|)=i=1npiyi(1pi)1yiallθ,pi|θi=1npiyi(1pi)1yi

问题是分子,它是一堆的乘积Bernoulli(pi,yi)概率太小了。(我的n很大,大约1500)。

因此,所有的后验值θ全部计算为 0(我在 R 中进行计算)。

为了澄清,每个yi有它自己的pi, 这些一起pi的向量n元素n y的。每个θ有它自己的n-元素向量pi.

编辑:添加复制示例(用于分子)

p <- sample(seq(0,1,by=0.01), 1500, replace=T)
y <- sample(c(0,1), 1500, replace=T)
dbern(y, p) # 1500-element vector, each element is < 1
prod(dbern(y, p)) # produce 0
exp(sum(log(dbern(y, p)))) # produce 0 since the sum is very negative
2个回答

这是计算各种模型的可能性的常见问题;通常做的事情是在日志上工作,并使用一个通用的比例因子将值带入一个更合理的范围内。

在这种情况下,我建议:

第 1 步:选择一个相当“典型”的θ,θ0. 将通用项的分子和分母的公式除以分子为θ=θ0, 为了得到不太可能下溢的东西。

步骤2:在对数尺度上工作,这意味着分子是对数差异和的exp,分母是对数差异和的exp的总和。

注意:如果您的任何 p 是 0 或 1,请将它们单独拉出并且不要记录这些术语;它们很容易按原样评估!

[更一般地说,这种对数尺度的缩放和工作可以看作是采用一组对数似然,li并这样做:log(ieli)=c+log(ielic). 一个明显的选择c是使最大的项为 0,这给我们留下了: log(ieli)=maxi(li)+log(ielimaxi(li)). 请注意,当您有分子和分母时,您可以对两者使用相同的,然后将取消。在上面,这对应于采用具有最高对数似然cθ0

分子中的常用项在大小上往往会更适中,因此在许多情况下,分子和分母都是相对合理的。

如果分母中有一系列尺寸,请先将较小的尺寸相加,然后再添加较大的尺寸。

如果只有几个术语占主导地位,您应该将注意力集中在使那些相对准确的计算上。

尝试利用对数和求和的特性,而不是采用十进制数的乘积。在求和之后,只需使用反对数将其恢复为更自然的形式。我认为这样的事情应该可以解决问题

exp(in(yilog(pi)+(1yi)log(1pi)))gexp(inyilog(pi)+(1yi)log(1pi))