ゼロ膨張カウントの一時データを研究しています。ブロック内のステートメントをstan
使用して、このゼロ膨張データを処理するモデルを構築しました。これは、Stan Reference Guide でアドバイスされているとおりです。例えば、if
model
model {
for (n in 1:N) {
if (y[n] == 0)
target += log_sum_exp(bernoulli_lpmf(1 | theta), bernoulli_lpmf(0 | theta) + poisson_lpmf(y[n] | lambda));
else
target += bernoulli_lpmf(0 | theta) + poisson_lpmf(y[n] | lambda);
}
}
if
Stan は離散変数を扱わないサンプラーとして NUTS を使用しているため、このステートメントは明らかに必要です (したがって、この離散確率変数からサンプリングするのではなく、この離散確率変数を過小評価しています)。私はあまり経験がありませんがpymc3
、ギブス更新ステップ(離散ベルヌーイ尤度からサンプリングする)を処理できることを理解しています。次に、ゼロ膨張値を条件として、ポアソン尤度に依存するパラメーターの Metropolis または NUTS 更新を実行できます。
私の質問は次のとおりです: NUTS 更新で実行されている連続変数への更新を使用して、離散ゼロ膨張変数からサンプリングするような方法で使用できますか? pymc3
可能であれば、パフォーマンスは上記の実装よりも大幅に改善されていstan
ますか (これは離散確率変数を周辺化します)? さらに、pymc3
Gibbs + Metropolis の更新しかサポートできない場合、NUTS から離れたこの変更は検討する価値がありますか?