我正在研究零膨胀计数时间数据。我已经建立了一个模型,该模型使用块中的语句stan
来处理这种零膨胀数据。正如他们在 Stan 参考指南中所建议的那样。例如,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 更新。
我的问题是:可以(如果可以的话)pymc3
以这样的方式使用从离散的零膨胀变量中采样,并通过 NUTS 更新对连续变量进行更新?如果可以,性能是否比上述实现显着提高stan
(边缘化了离散随机变量)?此外,如果pymc3
只能支持 Gibbs + Metropolis 更新,那么这种远离 NUTS 的变化是否值得考虑?