JAGS
JAGS (Just Another Gibbs Sampler)は、ギブス抽出法を用いたベイズ階層モデルの分析プログラムである。WindowsやLinuxなどで動作するClassic BUGSのクローン。BUGSと異なりJAGSは自由に改変・再配布できる(GNU GPLライセンス)。Rと連携して使用できる。WinBUGSとJAGSとの相違点は、マニュアルに記載されている。
Martyn Plummer*1による紹介スライド http://www.math.aau.dk/gr/material/jags-gR2003.pdf
JAGS 2.0.0以降はSourceforgeのmcmc-jagsプロジェクトにおいて配布されている。2016年2月19日現在の最新バージョンは4.2.0である。JAGS1はJAGS-1.0.4で開発を終えているが、作者のサイトにおいて配布されている。
MacOS XとWindowsのJAGS2にはバイナリーパッケージが存在する。
MacPortsを使っている場合はportがあるので簡単にインストールできる。
$ sudo port install jags
Linuxのバイナリーは別途種々のRPMパッケージとして配布されている。 Debain/Ubuntuの場合は次のようにしてインストールする。
$ sudo apt-get install jags
JAGS2ではrjagsパッケージを使用する。JAGS 2.2.0に対応した最新のrjagsは2.2.0-3(2011年2月13日現在)である。rjagsはcodaとlatticeに依存している。 Using JAGS in R with the rjags Packageが参考になるだろう。
BUGSプログラムのサンプルは、JAGSのパッケージに同梱されているか、あるいはmcmc-jagsプロジェクトのfilesディレクトリから、使用するJAGSのバージョンに対応したclassic-bugs.tar.gzをダウンロードする。
以下、サンプルvol1にあるlineの場合に即して解説する。
Rの作業ディレクトリをclassic-bugs 2.1/vol1/lineに変更する。
> dir() [1] "bench-test1.R" "line-data.R" "line-inits.R" "line.bug" [5] "test1.R" "test1.cmd"
test1.Rを実行する。test1.Rはrjagsパッケージの使用を前提として書かれている。test1.Rの1行目
source("../../R/Rcheck.R")
は、環境によって異なると考えられるので、ここでは、test1.Rの内容をRのプロンプトから一行ずつ実行することにする。まず、rjagsパッケージをloadする。
> library(rjags) Loading required package: coda Loading required package: lattice module basemod loaded module bugs loaded
次にtest1.Rの内容を逐次的に実行する。
> source("line-data.R") > m <- jags.model("line.bug", n.chains=2) Compiling model graph Resolving undeclared variables Allocating nodes Graph Size: 37
> update(m, 1000) |**************************************************| 100% > x <- coda.samples(m, c("alpha","beta","sigma","tau"), n.iter=10000) |**************************************************| 100%
以上で、オブジェクトxに実行結果が格納される。結果を確認する。
> summary(x) Iterations = 1001:11000 Thinning interval = 1 Number of chains = 2 Sample size per chain = 10000 1. Empirical mean and standard deviation for each variable, plus standard error of the mean: Mean SD Naive SE Time-series SE alpha 2.9977 0.5795 0.004098 0.004361 beta 0.8018 0.4040 0.002857 0.002936 sigma 1.0227 0.8124 0.005745 0.009833 tau 1.8538 1.5293 0.010813 0.014660 2. Quantiles for each variable: 2.5% 25% 50% 75% 97.5% alpha 1.92818 2.7438 3.0005 3.2542 4.058 beta 0.04699 0.6228 0.8001 0.9806 1.545 sigma 0.41142 0.6284 0.8295 1.1587 2.781 tau 0.12930 0.7448 1.4534 2.5322 5.908 > plot(x)
残りの2行、
> source("bench-test1.R") > check.fun()
については、当方の環境ではcheck.fun()が見つからず、実行できなかった。
サンプルをダウンロードして実行する。例えば、サンプルvol1にあるlineの場合だと、
> dir() [1] "bench-test1.R" "jags.ind" "jags.out" "line-data.R" [5] "line-inits.R" "line.bug" "test1.cmd" > source("bench-test1.R") > benchstats Mean SD Naive SE Time-series SE alpha 2.9995277 0.5913765 0.005913765 0.006965003 beta 0.7997792 0.3859491 0.003859491 0.003560436 sigma 1.0028180 0.7696958 0.007696958 0.013068957 tau 1.8798401 1.5070511 0.015070511 0.020370002
となる。
BayesMixはJAGSを利用するベイズ混合モデルのRパッケージであり、codaとlatticeに依存している。JAGSをインストールしていれば、
> library(bayesmix) > haveJAGS() [1] TRUE
とJAGSへのパスが通っているかどうかチェックできる。baysemixに含まれるサンプルの一部を実行すると、次のようになる。
> data(darwin) > prefix <- "darwin" > k <- 2 > modelDarwin <- BMMmodel(k = k, priors = list(kind = "independence", parameter = "priorsUncertain"), aprioriWeights = c(1, 15), no.empty.classes = TRUE, restrict = "tau") > z2 <- JAGSrun(darwin, prefix, model = modelDarwin, control = JAGScontrol(variables = variables, draw = 3000, burnIn = 1000, seed = 1), cleanup = TRUE, tmp = FALSE) > plot(z2, variables = "mu")
コマンド | パッケージ | 説明 |
read.jags() | coda | JAGSの出力ファイルを読み込む |
bugs2jags() | coda | WinBUGSデータファイルをJAGSデータファイルに変換 |
JAGS: A Program for Analysis of Bayesian