過去数日間、私はマルコフ連鎖モンテカルロ法(MCMC)の仕組みを理解しようと試みてきました。特に、Metropolis-Hastingsアルゴリズムを理解して実装しようとしています。これまでのところ、私はアルゴリズムの全体的な理解を持っていると思いますが、私にはまだ明確ではないいくつかの事柄があります。MCMCを使用して、一部のモデルをデータに適合させたい。このため、観測データDに直線を当てはめるためのMetropolis-Hastingsアルゴリズムの理解について説明します。
1)の初期推測を行い。このセットAを私たちの現在とA(0)。また、マルコフ連鎖の最後にaを追加します(C)。
2)以下の手順を数回繰り返します。
3)0およびDが与えられた現在の尤度()を評価します。
4)μ = a 0およびσ = s t e p s i z eの正規分布からサンプリングすることにより、新しい(a 1)を提案します。今のところ、s t e p s i z eは一定です。
5)1とDが与えられた場合、新しい尤度()を評価します。
6)がL 0よりも大きい場合、新しいa 0として1を受け入れ、 Cの末尾に追加してステップ2に進みます。
7)がL 0よりも小さい場合、一様分布から範囲[0,1]の数(U)を生成します
8)が2つの尤度の差(L 1 - L 0)より小さい場合、新しいa 0として1を受け入れ、 Cの末尾に追加してステップ2に進みます。
9)が2つの尤度の差(L 1 - L 0)よりも大きい場合、Cの末尾にa 0を追加し、同じa 0を使用し続け、手順2に進みます。
10)繰り返しの終わり。
11)の開始からいくつかの要素を削除します(バーンインフェーズ)。
12)の値の平均を取ります。この平均が推定されます。
今、私は上記の手順に関するいくつかの質問があります:
- だけでなく、任意の関数の尤度関数を構築するにはどうすればよいですか?
- これはMetropolis-Hastingsアルゴリズムの正しい実装ですか?
- 手順7で乱数生成方法を選択すると、結果がどのように変わりますか?
- 複数のモデルパラメーターがある場合、このアルゴリズムはどのように変化しますか?たとえば、モデル。
注/クレジット:上記のアルゴリズムの主な構造は、MPIA Python Workshopのコードに基づいています。