Bayesian 离散混合模型的Stan与PYMC3

Bayesian 离散混合模型的Stan与PYMC3,bayesian,pymc3,mcmc,stan,pystan,Bayesian,Pymc3,Mcmc,Stan,Pystan,我正在研究零计数时间数据。我构建了一个stan模型,该模型使用model块中的if语句处理这个零膨胀数据。这是他们在Stan参考指南中建议的。e、 g 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));

我正在研究零计数时间数据。我构建了一个
stan
模型,该模型使用
model
块中的
if
语句处理这个零膨胀数据。这是他们在Stan参考指南中建议的。e、 g

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
语句显然是必要的,因为斯坦使用螺母作为不处理离散变量的取样器(因此,我们将离散随机变量边缘化,而不是从中取样)。我对
pymc3
没有太多经验,但我的理解是,它可以处理吉布斯更新步骤(从离散伯努利似然中采样)。然后以零膨胀值为条件,它可以对依赖于泊松似然的参数执行Metropolis或NUTS更新


我的问题是:可以(如果可以)以这种方式使用
pymc3
从离散零膨胀变量中采样,并使用NUTS更新对连续变量进行更新吗?如果可以,在
stan
中,性能是否比上述实现有显著改善(这将离散随机变量边缘化)?此外,如果
pymc3
只能支持Gibbs+Metropolis更新,那么这种改变是否值得考虑?

是的,pymc3可以阻止更新连续和离散参数以提供离散采样。唯一的问题是,它将变得更慢、更不准确、更不健壮。由于Rao Blackwell定理,边缘化几乎总是效率/混合的一个胜利,也因为期望工作的准确性。Stan用户指南中关于潜在离散参数的章节(PyMC3中也提供了变化点模型)中的一个示例对此进行了解释。所以,如果你能在PyMC3(或bug或JAG)中边缘化,那将是效率和准确性方面的一大胜利。非常感谢Bob。我不知道和拉奥·布莱克威尔的关系。粗略地说,这个定理说,在期望中工作效率更高。通过边缘化离散参数,您的工作符合预期。是的,PyMC3可以阻止更新连续和离散参数,以提供离散采样。唯一的问题是,它将变得更慢、更不准确、更不健壮。由于Rao Blackwell定理,边缘化几乎总是效率/混合的一个胜利,也因为期望工作的准确性。Stan用户指南中关于潜在离散参数的章节(PyMC3中也提供了变化点模型)中的一个示例对此进行了解释。所以,如果你能在PyMC3(或bug或JAG)中边缘化,那将是效率和准确性方面的一大胜利。非常感谢Bob。我不知道和拉奥·布莱克威尔的关系。粗略地说,这个定理说,在期望中工作效率更高。通过边缘化离散参数,您可以按预期工作。