ときの尤度の計算


8

私はこの事後分布を計算しようとしています:

(θ|−)=Π私=1んp私y私(1−p私)1−y私Σすべてθ、p私|θΠ私=1んp私y私(1−p私)1−y私

問題は、ベルヌーイ(p私、y私)確率の束の積である分子が小さすぎることです。(私のんは大きく、約1500です)。

したがって、すべての事後値はすべてθ0と計算されます(私はRで計算を行っています)。

明確にするために、各y私は独自のp私、これらのはn yのn要素のp私ベクトルを作成します。各θには、p iの独自のn要素ベクトルがあります。んん yθんp私ます。

編集:再現例の追加(分子用)

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

代わりにログの合計を計算してみましたか?
— アンサリ2013

1
ここに関連する議論があります。そのような計算の詳細のいくつかの追加の議論があります。
— Glen_b-2015

回答:


7

これは、あらゆるモデルの尤度の計算に共通する問題です。一般的に行われているのは、ログで作業することと、値をより妥当な範囲にする共通のスケーリング係数を使用することです。

この場合、私はお勧めします:

ステップ1:かなり"典型的な"ピック、θ 0を。分割式のための分子による一般的な用語の分子と分母の両方のためにθ = θ 0をθθ0θ=θ0はるかに少ない可能性がアンダーフローになります何かを得るためには、。

ステップ2:対数スケールで作業します。これは、分子が差の合計のexpであることを意味しますログの合計のexpであり、分母がログのます。

注意:pのいずれかが0または1の場合、それらを個別に引き出します、それらの用語のログを取らないでください。そのまま評価するのは簡単です!

[より一般的な用語では、このスケールとログのスケールでの作業は、一連の対数尤度を取り、これを行うと見なすことができます:log (∑ i e l i)= c + log (∑ i e l i − c)。cの明らかな選択は、最大の項を0にすることです。これにより、 log (∑ i e l i)= max i(l i)+ log (l私ログ⁡(Σ私el私)=c+ログ⁡(Σ私el私−c)c。分子と分母がある場合、両方に同じ cを使用できますが、キャンセルされます。上記では、これは対数尤度が最も高いを取ることに対応します。]ログ⁡(Σ私el私)=最高私(l私)+ログ⁡(Σ私el私−最高私(l私))cθ0

分子の通常の項はサイズが中程度になる傾向があるため、多くの状況で、分子と分母はどちらも比較的妥当です。

分母にサイズの範囲がある場合は、大きいサイズを追加する前に、小さいサイズを追加します。

少数の用語だけが大きく支配している場合は、それらを比較的正確に計算することに注意を向けるべきです。


しかし、すべてのシータについて、分子は常に0になります。一般的な項を分子で除算するにはどうすればよいですか?(ステップ1)
— ハイゼンベルク

1
ステップ1は、計算ではなく代数です。その目的は、ステップ2でアンダーフローしない計算を行うことです。常に代数的にゼロであると言っているのでない限り...その場合、あなたはすべきでないことを疑う余地はありません。
— Glen_b-2013

わかりました-試してみます。分子は正確に0ではなく、Rが計算できない非常に小さいものです。ありがとう!
— ハイゼンベルク

3
親愛なる神様、あなたは正しいです!どうもありがとうございました。誰もが「log.likelihoodを使用する」と言い続けますが、実際に問題を目にするのはあなただけです。
— ハイゼンベルク

1

10進数の積をとるのではなく、対数と合計を使用する特性を利用してみてください。合計に続いて、対数を使用して、より自然な形に戻します。このようなことがうまくいくと思います

eバツp(Σ私ん(y私∗log(p私)+(1−y私)∗log(1−p私)))Σgeバツp(Σ私んy私∗log(p私)+(1−y私)∗log(1−p私))


exp()内の合計が依然として非常に負(<-1000)であるため、提案の分子は依然として0を生成します。私は何か悪いことをしていますか?ご協力いただきありがとうございます!
— ハイゼンベルク

まあ、pのいずれかの値が実際に0または1の場合、その値のログは自動的に-infを生成し、log(1-p)を生成します。それ以外の場合は、数が小さくなりすぎて元の形に戻すことができないと思います。
— philchalmers 2013

2
cexp⁡()cログ⁡(p(θ|−))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.