Стан против PYMC3 для дискретных моделей смесей - PullRequest
1 голос
/ 24 марта 2019

Я изучаю временные данные с нулевым уровнем счета. Я построил модель 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 явно необходимо, поскольку Стэн использует NUTS в качестве сэмплера, который не имеет дело с дискретными переменными (, и, таким образом, мы маргинализируем эту дискретную случайную переменную вместо выборки из нее ). У меня не было большого опыта работы с pymc3, но я понимаю, что он может иметь дело с шагом обновления Гиббса (для выборки из дискретной вероятности Бернулли). Затем, при условии нулевого значения, он может выполнить обновление метрополиса или NUTS для параметров, которые зависят от вероятности Пуассона.

Мой вопрос: Можно ( и, если да, то как ) pymc3 использовать таким образом для выборки из дискретной переменной с нулевым раздувом с обновлениями для непрерывная переменная выполняется с обновлением NUTS? Если это возможно, значительно ли улучшится производительность по сравнению с приведенной выше реализацией в stan (что исключает дискретную случайную переменную)? Кроме того, если pymc3 может поддерживать только обновление Gibbs + Metropolis, стоит ли учитывать это изменение по сравнению с NUTS?

...