A common problem when using MCMC is lacking convergence between chains. This will show up as large rhat
values (> 1.1 is a common criterion) and non-converging lines in plot_pars(fit)
.
The first thing to try is always to make the model warm up longer to see if it reaches convergence later: mcp(fit, data, adapt = 10000)
.
It can be a sign of a deeper non-identifiability in the model. This will show up as strong correlations in the joint distribution of any pair of implicated parameters: plot_pars(fit, pars = c("int_1", "int_2), type = "hex")
. This may give you ideas how to change the model.
You can set the initial values for the JAGS sampler using, e.g., mcp(..., inits = list(cp_1 = 20, int_2 = -20, etc.))
. This will be passed to jags.fit
and you can see more documentation there.
A lot of data and complicated models will slow down fitting.
Run the chains in parallel using, e.g., mcp(..., chains=4, cores=4)
. The only reason this is not enabled by default is because parallel sampling fails on some systems. Turn it on for the whole session using options(mc.cores = 3)
which will override cores
(which defaults to 1).
More data usually means better identifiability and faster convergence. Lower the adaption period period using, e.g., mcp(..., adapt = 300)
. This is also sometimes called “burnin”.
Most of these problems should stem from inappropriate priors and such problems may be exacerbated by fragile link functions (e.g., binomial(link = "identity")
. The article on priors in mcp may be helpful, but in particular:
Errors on “directed cycle” usually stems from using parameters in priors. For example, if you set prior = list(int_1 = "dnorm(int_2, 1)"", int_2 = "dnorm(int_1, 1)")
this is an infinite regress.
Errors on “incompatible with parent nodes” usually stem from impossible values. For example, if you set prior = list(sigma = "dnorm(0, 1)"")
, this allows for a negative standard deviation, which is impossible. Think about changing the prior distributions and perhaps truncate them using T(lower, upper)
.
If you encounter these or other problems, don’t hesitate to raise a Github Issue, asking for help or filing a bug report.