Stan против PYMC3 для моделей с дискретной смесью

#bayesian #pymc3 #mcmc #stan #pystan

#байесовский #pymc3 #mcmc #stan #pystan

Вопрос:

Я изучаю временные данные с нулевым увеличением количества. Я построил stan модель, которая обрабатывает эти данные с нулевым значением с помощью if инструкции в model блоке. Это то, что они советуют в справочном руководстве Stan. например,

 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?

Комментарии:

1. Да, PyMC3 может блокировать обновление непрерывных и дискретных параметров для обеспечения дискретной выборки. Единственная проблема в том, что это будет медленнее , менее точно и менее надежно . Маргинализация почти всегда выигрывает в эффективности / смешивании благодаря теореме Рао-Блэквелла и точности при работе с ожиданиями. Это объясняется на примере в главе руководства пользователя Stan, посвященной скрытым дискретным параметрам (модель точки изменения также доступна в PyMC3). Итак, если вы сможете устранить недостатки в PyMC3 (или ошибки или зазубрины), это будет большой победой в плане эффективности и точности.

2. Большое спасибо, Боб. Я не знал о связях с Rao-Blackwell. Я поработаю над этим, чтобы понять больше.

3. Грубо говоря, теорема гласит, что работа с ожиданием более эффективна. Исключая дискретные параметры, вы работаете в ожидании.