Jeromy Anglim's Blog: Psychology and Statistics


Wednesday, April 11, 2012

Getting Started with JAGS, rjags, and Bayesian Modelling

This post provides links to various resources on getting started with Bayesian modelling using JAGS and R. It discusses: (1) what is JAGS; (2) why you might want to perform Bayesian modelling using JAGS; (3) how to install JAGS; (4) where to find further information on JAGS; (5) where to find examples of JAGS scripts in action; (6) where to ask questions; and (7) some interesting psychological applications of Bayesian modelling.

What is JAGS?

JAGS stands for Just Another Gibbs Sampler. To quote the program author, Martyn Plummer, "It is a program for analysis of Bayesian hierarchical models using Markov Chain Monte Carlo (MCMC) simulation..." It uses a dialect of the BUGS language, similar but a little different to OpenBUGS and WinBUGS.

Why JAGS?

The question of why you might want to use JAGS can be approached in several different ways:

  • Why Bayesian rather than Null Hypothesis Significance Testing (NHST) approaches?

    • To quote John D. Cook quoting Anthony O'Hagan, the benefits of "the bayesian approach are that it is 1. fundamentally sound, 2. very flexible, 3. produces clear and direct inferences, and 4. makes use of all available information." (see John's blog post for elaboration)
    • John K. Kruschke made a similar argument in an Open Letter extolling the benefits of the bayesian approach summarised as: "(1) Scientific disciplines from astronomy to zoology are moving to Bayesian data analysis. We should be leaders of the move, not followers. (2) Modern Bayesian methods provide richer information, with greater flexibility and broader applicability than 20th century methods. Bayesian methods are intellectually coherent and intuitive. Bayesian analyses are readily computed with modern software and hardware. (3) Null-hypothesis significance testing (NHST), with its reliance on p values, has many problems. There is little reason to persist with NHST now that Bayesian methods are accessible to everyone."
  • Why JAGS/BUGS rather than coding in a low-level language?

    • It's simpler; for models that BUGS can handle, BUGS can shield you from some of the thorny details related to numeric integration.
    • There are simple interfaces with R.
  • Why JAGS rather than WinBUGS or OpenBUGS?

    • I'm using JAGS because it works well on Ubuntu. WinBUGS is broadly Windows specific, although I've read that it may work with the emulation software Wine.
    • JAGS interfaces well with R. I'm comfortable writing scripts. Thus, I don't personally see the benefits of using a dedicated GUI like WinBUGS. I can leverage what I know about R.
    • However, ultimately converting code between different flavours of BUGS is not that difficult.
    • For further discussion of the issue, see this r-help discussion and this discussion on CrossValidated.

http://stats.stackexchange.com/questions/9202/openbugs-vs-jags

More than anything I found that JAGS provided a useful entry point into the world of Bayesian modelling. This in turn appealed to me for several reasons:

  1. Even when I perform analyses using an NHST approach I often intuitively think of empirical research questions in terms of probability densities on a parameter of interest that changes as empirical and theoretical evidence is accumulated. See for example Thompson's (2002) concept of meta-analytic thinking. Bayesian analysis provides tools for formalising this orientation.
  2. More broadly, I appreciate the explicitness that a Bayesian approach requires and encourages. E.g., specifying the distribution of the error term, specifying a prior, specifying the distribution of parameters in a mixed effects model, and so on.
  3. There are several modelling challenges that I'm currently working through where a Bayesian approach offers substantial flexibility and applicability. In particular, I'm interested in modelling individual differences in the effect of practice on strategy use and task performance and then relating these individual differences to factors like intelligence, prior experience, and personality.

JAGS Installation

JAGS runs on Linux, Mac, and Windows. I run JAGS on Ubuntu through an interface with R called rjags.

The following sets out a basic installation process:

  1. If necessary Download and install R and potentially a user interface to R like R Studio (see here for tips on getting started with R).
  2. Download and install JAGS as per operating system requriements.
  3. Install additional R packages: e.g., in R install.packages("rjags") . In particular, I use the packages rjags to interface with JAGS and coda to process MCMC output.

Information on JAGS

http://cran.r-project.org/web/views/Bayesian.html http://www.stat.columbia.edu/~gelman/bayescomputation/lunnbugswithcomments.pdf

Examples JAGS Scripts

I find it easier to pick up a new language by playing with examples. The following provides links to example JAGS code, often with accompanying explanations:

More broadly, examples and tutorials designed for WinBUGS can generally be adapted to be useful for JAGS. So for example, you can explore these WinBUGS examples:

Asking questions

There are several places to ask questions about JAGS, R, and Bayesian statistics.

In general, I prefer the Stack Exchange model for asking and answering questions on the internet, although the most important issue is typically where the experts are located.

Interesting Psychological Applications of Bayesian Modelling

If you want to see some examples of Bayesian modelling applied to psychological data, I found the following articles quite interesting. PDFs are available online.

If you know of any other interesting JAGS resources or have any comments about my choice of software for Bayesian data analysis, feel free to post a comment.

10 comments:

  1. Very useful compilation of info! Thanks for posting it.

    ReplyDelete
    Replies
    1. P.S. Maybe make links in the post open in a new tab/window instead of overwriting your blog post? Again, great post. Thanks.

      Delete
    2. No worries. Thanks for writing such a helpful book. In fact, it's sitting on my desk right now --- smiling little dogs staring up at me :-)

      Delete
    3. Just re-posted your post on my blog:
      http://doingbayesiandataanalysis.blogspot.com/2012/04/compilation-of-jags-resources.html

      Delete
  2. Hi Jeromy, thanks for your post. I am JAGS user as well but I missed many of the resources written specifically for JAGS. For example, do you know any equivalent to that for JAGS: Bayesian Modeling Using WinBUGS http://www.amazon.com/Bayesian-Modeling-WinBUGS-Computational-Statistics/dp/047014114X/ref=wl_it_dp_o_pC_S_T1?ie=UTF8&coliid=I1N87E2AXHAPII&colid=2XQJCHK1S90N4

    Cheers,

    Antonio

    ReplyDelete
  3. Hi Antonio,
    Unfortunately, I've posted most of the links that I'm currently aware of. That said, WinBUGS and JAGS code are very similar.

    ReplyDelete
  4. Also see the resources listed here:

    http://cogsci.stackexchange.com/questions/720

    ReplyDelete
  5. Hi Jeromy. Your post raises an issue that I have recently started wondering about. Specifically, you mention that Bayesian analysis requires one to explicitly state the distribution of the error term. And yet in the introductory examples for linear regression, logistic regression, and indeed in most JAGS examples I've seen, there is no specified error term whatsoever! What's up with that? Seems like error is just going to be absorbed into the posterior.

    ReplyDelete
  6. I just wanted to let you know that as a new R user, I found this website along with the attachments very helpful! Thank you so much!

    ReplyDelete