首页 > 解决方案 > 用于离散混合模型的 Stan 与 PYMC3

问题描述

我正在研究零膨胀计数时间数据。我已经建立了一个模型,该模型使用块中的语句stan来处理这种零膨胀数据。正如他们在 Stan 参考指南中所建议的那样。例如,ifmodel

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 的变化是否值得考虑?

标签: bayesianpymc3mcmcstanpystan

解决方案


推荐阅读