JAGS


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プロジェクトにおいて配布されている。2011年2月13日現在の最新バージョンは2.2.0である。JAGS1はJAGS-1.0.4で開発を終えているが、作者のサイトにおいて配布されている。

MacOS XとWindows

MacOS XとWindowsのJAGS2にはバイナリーパッケージが存在する。

Linux

Linuxのバイナリーは別途種々のRPMパッケージとして配布されている。

Rとの連携

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が参考になるだろう。

rjagsからJAGSのサンプルプログラムを実行する。

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)
line.png

残りの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")
darwin.png

関連コマンド

コマンドパッケージ説明
read.jags()codaJAGSの出力ファイルを読み込む
bugs2jags()codaWinBUGSデータファイルをJAGSデータファイルに変換

文献

JAGS: A Program for Analysis of Bayesian

リンク

コメント



*1 Rのコアメンバー(たぶん)でR.specを書いている人

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS