Mac OS X上で、WinBUGS+R2WinBUGSを使用する
2006.11.23作成
2008.03.30更新
2008.06.18更新
2008.11.17更新
2009.09.14更新
2009.09.15更新
2010.01.01更新
※ 最近の環境(Mac OS X 10.5.8, Xcode 3.1.4, Wine 1.0.1)では、WinBUGSのインストーラの起動に失敗する。ただし、インストール済みのWinBUGSは動作する。The Official Wine WikiのMacOSX/Buildingによると、これはXcode 3.xのバグのせいらしい。
また、Mac OS X 10.6 Snow Leopard動作中の64ビット機(Core 2 Duoなど)では、デフォルトでは64ビットでのコンパイルとなるため、Wine 1.0.1のコンパイルに失敗する。非安定版のWine 1.1.29はSnow Leopardに対応しているが、このバージョンではWinBUGSが正常に動作しない。
これらの環境にある場合は、2.のDarwine非公式バイナリを使用する方法をおすすめする。
ビルドしてインストール。
$ cd wine-0.9.28 $ CFLAGS="-I/usr/X11/include -L/usr/X11/lib" ./configure --with-x $ make depend && make $ sudo make install
winecfgを起動。文字化けがあるかもしれないが、とりあえず気にせず"OK"を押して終了。これで~/.wineが作成される。
$ winecfg
WinBUGSのインストール。インストーラに従っていけば、~/.wine/drive_c/Program Files以下にインストールされる。
$ wine WinBUGS14.exe
WinBUGSが起動できることを確認する。
$ wine ~/.wine/drive_c/Program\ Files/WinBUGS14/WinBUGS14.exe
patch for 1.4.3を適用する。
これでR2WinBUGSから呼べるはず。
library(R2WinBUGS)
WINEPATH <- "/usr/local/bin/winepath"
model.file <- system.file(package = "R2WinBUGS", "model", "schools.txt")
data(schools)
schools
J <- nrow(schools)
y <- schools$estimate
sigma.y <- schools$sd
data <- list ("J", "y", "sigma.y")
inits <- function(){
list(theta = rnorm(J, 0, 100), mu.theta = rnorm(1, 0, 100),
sigma.theta = runif(1, 0, 100))
}
parameters <- c("theta", "mu.theta", "sigma.theta")
schools.sim <- bugs(data, inits, parameters, model.file,
n.chains = 3, n.iter = 5000,
bugs.directory = paste(Sys.getenv("HOME"), ".wine/drive_c/Program Files/WinBUGS14", sep="/"),
working.directory = NULL, clearWD = TRUE,
useWINE=TRUE, newWINE = TRUE,
WINE = "/usr/local/bin/wine",
WINEPATH = WINEPATH, debug = FALSE)
Darwine 1.0 非公式バイナリをインストール
以下のコードで確認した。このコードはR2WinBUGSのヘルプで表示されるサンプルや[1]を元に作成した。
コード中の"/Applications/Darwine"はDarwineをインストールした場所に置き換えること。
また、あらかじめX11を起動しておくこと(Mac OS X 10.5.xでは自動的に起動する)。
library(R2WinBUGS)
WINEPATH <- "/Applications/Darwine/Wine.bundle/Contents/bin/winepath"
model.file <- system.file(package = "R2WinBUGS", "model", "schools.txt")
data(schools)
schools
J <- nrow(schools)
y <- schools$estimate
sigma.y <- schools$sd
data <- list ("J", "y", "sigma.y")
inits <- function(){
list(theta = rnorm(J, 0, 100), mu.theta = rnorm(1, 0, 100),
sigma.theta = runif(1, 0, 100))
}
parameters <- c("theta", "mu.theta", "sigma.theta")
schools.sim <- bugs(data, inits, parameters, model.file,
n.chains = 3, n.iter = 5000,
bugs.directory = paste(Sys.getenv("HOME"), ".wine/drive_c/Program Files/WinBUGS14", sep="/"),
working.directory = NULL, clearWD = TRUE,
useWINE=TRUE, newWINE = TRUE,
WINE = "/Applications/Darwine/Wine.bundle/Contents/bin/wine",
WINEPATH = WINEPATH, debug = FALSE)
Rの作業用ディレクトリのパスに英数字以外や空白が入っていると、正常に動作しないかもしれない[2][3]。
結果表示
> print(schools.sim)
Inference for Bugs model at "/Library/Frameworks/R.framework/Versions/2.4/Resources/library/R2WinBUGS/model/schools.txt", fit using winbugs,
3 chains, each with 5000 iterations (first 2500 discarded), n.thin = 7
n.sims = 1074 iterations saved
mean sd 2.5% 25% 50% 75% 97.5% Rhat n.eff
theta[1] 11.1 8.1 -1.7 5.7 10.0 14.9 31.1 1 460
theta[2] 7.9 6.1 -5.0 4.4 7.7 11.7 19.9 1 920
theta[3] 6.7 7.3 -8.9 2.7 6.7 11.0 20.5 1 1100
theta[4] 7.9 6.5 -5.0 4.0 7.6 11.8 21.6 1 1100
theta[5] 5.6 6.2 -7.8 2.0 6.0 9.6 15.9 1 340
theta[6] 6.4 6.6 -9.4 2.8 6.7 10.6 18.4 1 540
theta[7] 10.5 7.0 -1.1 5.8 10.1 14.4 26.6 1 1100
theta[8] 9.0 7.9 -5.3 4.4 8.3 13.3 25.5 1 1000
mu.theta 8.2 5.1 -1.7 4.9 7.9 11.4 18.8 1 910
sigma.theta 6.2 5.3 0.3 2.4 4.8 8.5 19.8 1 80
deviance 60.4 2.1 57.1 59.3 60.0 61.4 66.0 1 1100
For each parameter, n.eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor (at convergence, Rhat=1).
pD = 2.6 and DIC = 63.1 (using the rule, pD = Dbar-Dhat)
DIC is an estimate of expected predictive error (lower deviance is better).
debug=TRUEにすると、WinBUGSは計算を終えても終了せず起動したままとなる。その場合、手動で終了させる('File'->'Exit')[4]。