MCMCプログラムのデバッグは非常に困難です。いくつかの問題が原因で問題が発生します。
(a)アルゴリズムの循環的性質
他のすべてのパラメーターを条件としてパラメーターを繰り返し描画します。したがって、実装が適切に機能していない場合、問題は反復サンプラーのどこにでもある可能性があるため、バグを特定することは困難です。
(b)正解は必ずしもわかっていない。
収束したかどうかを判断する方法はありません。これはある程度、シミュレートされたデータでコードをテストすることで軽減できます。
上記の問題に照らして、MCMCプログラムのデバッグに使用できる標準的な手法があるかどうか疑問に思いました。
編集する
自分のプログラムのデバッグに使用するアプローチを共有したかったのです。もちろん、私はPeterRが述べたすべてのことをします。それらとは別に、シミュレーションデータを使用して次のテストを実行します。
すべてのパラメーターを真の値から開始し、サンプラーが真の値から離れすぎているかどうかを確認します。
反復サンプラーにパラメーターを描画するかどうかを決定するフラグが、反復サンプラーの各パラメーターにあります。たとえば、フラグ「gen_param1」がtrueに設定されている場合、反復サンプラーで完全な条件から「param1」を描画します。これがfalseに設定されている場合、 'param1'はその真の値に設定されます。
サンプラーの作成が完了したら、次のレシピを使用してプログラムをテストします。
- 1つのパラメーターの生成フラグをtrueに設定し、他のすべてのフラグをfalseに設定して、true値に関して収束を評価します。
- 最初のパラメーターと組み合わせて別のパラメーターの生成フラグを設定し、再度収束を評価します。
上記の手順は私にとって非常に役に立ちました。