Tricks for working with JAGSPosted: May 8, 2015
- The Gamma distribution is frequently used as a prior for the precision in a model because of its conjugacy with the Normal. Given JAGS parameterization of the Gamma distribution with a rate and shape parameter, it’s not easy to select sensible hyper-parameters. It’s easier to think of hyper-parameters that correspond to the mean and the variance of a prior for the precision. To use mean and variance hyper-parameters (mu and sigma) with JAGS’s
dgamma( ((mu^2)/sigma), (mu/sigma)).
glmmodule provides a series of more efficient samplers that JAGS automatically selects whenever possible (e.g. Albert/Chib (1993)). This usually leads to much better mixing. I tend to load the module right away with the actual
- To check which samplers are selected by JAGS, use the
list.samplers()function on the JAGS model object. This is useful, because sometimes a slight change in the coding helps JAGS to select better samplers. For example, when using a logit model in JAGS and you want the Holmes-Held sampler from the glm module to work, do not use
dnorm()for the prior of the coefficient, e.i. do not use blocking.
- Avoid deterministic nodes as much as possible to increase speed. In particular, do all pre- and post processing in R including drawing from the predictive distribution and compute deterministic functions inside probabilistic statements, e.g.
y ~ dnorm( (x*beta), 1)instead of
- For comprehensible / readable code, let the running index be the small letter corresponding to the capital letter of the upper limit, e.i.
for(n in 1:N)instead of
for(i in 1:N). This becomes especially useful when one has many nested hierarchies.