Различия между rjags и r2jags - PullRequest
0 голосов
/ 08 июня 2018

Я использую оба пакета для выполнения байесовского анализа, но есть некоторые различия, которые я не понимаю:

Прежде всего, пакет rjags допускает фазу адаптации с функцией jags.model, в то время как пакет r2jags не имеет этой фазы, и с функцией jags (или jags.parallel) начинают выборку из апостериорного распределения.Включена ли адаптивная фаза в эту функцию, или пакет r2jags не учитывает ее?

Во-вторых, можно ли в rjags сказать, что эти две части кода похожи?

jmod <- jags.model(file="somefile.txt", data = data, n.chains=3)
update(jmod,100)
jsample <- coda.samples(jmod, n.iter=100, variable.names=par)

и

jmod <- jags.model(file="somefile.txt", data = data, n.chains=3)
jsample <- coda.samples(jmod, n.iter=200,n.burnin=100, variable.names=par)

, то есть, фазу прожига с функцией update можно также выполнить в функции coda.samples?Спасибо.

1 Ответ

0 голосов
/ 14 июня 2018

R2jags - сверхнормативная функция для запуска rjags.Он призван упростить выполнение некоторых вещей, как описано в описании пакета, таких как выполнение до конвергенции или распараллеливание цепей MCMC.

Если вы посмотрите на функцию jags в R2jags (например,просмотрев исходный код или просто введя jags без скобок в консоли R), вы найдете следующие вызовы в конце функции (строки 151–177 в связанной версии github):

  m <- jags.model(model.file,
                  data     = data,
                  inits    = init.values,
                  n.chains = n.chains,
                  n.adapt  = 0 )

  adapt( m,
         n.iter         = n.adapt,
         by             = refresh,
         progress.bar   = progress.bar,
         end.adaptation = TRUE )

  samples <- coda.samples( model          = m,
                           variable.names = parameters.to.save,
                           n.iter         = ( n.iter - n.burnin ),
                           thin           = n.thin,
                           by             = refresh,
                           progress.bar   = progress.bar )

Таким образом, R2jags::jags компилирует модель с jags.model, адаптирует ее с adapt, затем выполняет итерации и выборку из апостериорного с помощью coda.samples

Ваши два вызова aren 'т точно эквивалентно.Во-первых, вы:

  1. скомпилируете и адаптируете с jags.model,
  2. обновлением для 100 итераций с update, затем
  3. обновите и сэмплируйте из апостериорногоза 100 итераций с coda.samples.

Во второй вы

  1. скомпилируете и адаптируетесь с jags.model,
  2. обновлением и сэмплом из задней частидля 200 итераций с coda.samples.

Т.е. ваш последующий образец взят из большего числа итераций, но в методе 2 после фазыадаптация подразумевается в jags.model.Нет смысла использовать n.burnin в rjags, только в R2jags;см. вызов coda.samples в коде функции jags выше, тогда как ранее в строке 77 эта функция присваивает n.adapt <- n.burnin.

...