2012年12月7日金曜日

MacOSX10.8 (Mountain Lion) でWinBUGSを動かす (Wine, R2WinBUGS使用)

すっぴんのMac(OSX10.8プリインストール)に入れることを想定して手順を挙げておきます。まず、X11とMacPortsを入れ、MacPortsを用いてWine(非Windows OS上でWin専用アプリケーションを実行する環境)をインストール、Wineのディレクトリ内にWinBUGSをインストールするという流れです。

(OSX10.7、10.6に入れる場合はこちら http://nhkuma.blogspot.jp/2012/12/macosx106-107winbugswiner2winbugs.html

なお、インストール作業はターミナルからUNIXコマンドを打ちながらのもの。sudoなどのコマンドは注意深く扱う必要があるようなので、チャレンジする際には慎重に。またXcodeもソフトウェア開発に使うような類のツールなので取り扱い注意です。参考にする際は、この辺りを理解の上、自己責任でお願いします…。


(2013.5.10 追記 再挑戦してみました。OSX10.8リリースから時間が経過して一部の工程が変化ので改定しておきました)


(下記、Rコードは緑、ターミナルのコードは紫にしてみます)


**********************
0)実行環境
・OSX10.8 (Mountain Lion) 搭載のMac

1)X11 (XQuartz) のインストール:
アプリケーション → ユーティリティ → X11 を開く。じつはこのX11アイコンはダミーである。あほらしいですがこのステップは必要です。

開こうとすると、Mountain LionではX11がプリインストールされていない、というメッセージが出て、インストールする場合のリンク先が示されるので、そこにある XQuartz2.7.2 をダウンロードし、インストールする(XQuartzはX11と同等の機能を持つもののようだ)。

★インストールしたら、いったん再起動しましょう。これをしないと、なぜか後の winecfg がうまく通らずに悩むことになりました。


2)App StoreのApple IDを設定し、App StoreからXcodeをダウンロードする(Xcode は無料)。1.4GBくらいあったので、けっこう時間はかかる。

3)Command Line Tools(gcc)のインストール:Xcodeメニューから環境設定(Preference)を開く。環境設定のパネル上部に並んでいるダウンロードボタンをクリック。そこにCommand Line Toolsがあるのでインストールする。

4) MacPortsをインストールする。OSXのバージョンによって細かくインストールファイルが分かれている。Mountain Lion用の"pkg"インストーラをダウンロード。
http://www.macports.org/install.php # ダウンロードサイト
MacPortsとは、紐付けの多いUNIXのアプリのインストールを補助してくれる便利なツール。


5)インストールしたら「アプリケーション」→「ユーティリティ」にある「ターミナル」を立ち上げる。
すると、冒頭にこのように出ている。

コンピュータ名:~ ユーザ名$

このドルマーク $ の後にコマンドを打っていく。
なお、インストールに関わるところでパスワードを求められるが、その都度、自分のアカウントのパスワードを入れる。
(以降、パスワードを入れる作業は説明を省略)

念のため、MacPortsを最新版にしておきましょう(さっそくターミナルで次のコマンドを打つ)。

sudo port -v selfupdate
(もしうまくいかないようならば、/opt/local/bin/port -v 、さらにターミナルを再起動させたらコマンドが通ったという情報をいただいています)

6)下記の1行を打つ(コピペでOK)。Web上では改行されて見えているだろうけれど、この長いコードは1行で打つべきもののようだ。

echo export PATH=/opt/local/bin:/opt/local/sbin:\$PATH$'\n'export MANPATH=/opt/local/man:\$MANPATH | sudo tee -a /etc/profile

これはMacPortsのパスを通す作業であるようだ。

このパスが無事に通ると、下記のメッセージが出る。
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/man:$MANPATH


7)このコードを通す。こちらも改行無しで。

if [ `sysctl -n hw.cpu64bit_capable` -eq 1 ] ; then echo "+universal" | sudo tee -a /opt/local/etc/macports/variants.conf; else echo "not 64bit capable"; fi

マシンが64ビットなのか、そうでないのかをMacPortsに伝える作業らしい。
たぶんダウンロードするインストーラの選択に必要なのだろう。
+universal というメッセージが帰ってくればOKのはず。

# 5、6のコマンドはこちらのサイト(http://www.davidbaumgold.com/tutorials/wine-mac/)が非常に参考になりました。


8)wineのインストールを試みる
sudo port install wine 


cf. 途中で「"javac"を開くには、Java SE 6 ランタイムが必要です。今すぐインストールしますか?」というウィンドウが現れるので「インストール」をクリック(66.7 MB)


9)依存パッケージのインストール作業が開始するが、数十分程度進んだところで途中で止まってしまった。そういえば、MacPortsのインストールページの下の方に、これもやっておけと書いてあったので実行(Xcodeのライセンス確認)

xcodebuild -license

# "space"keyを押していくと最後までスクロールできる、最後のところで同意を求めてくるので、読んで確認できたら、

agree


10)もういちど sudo port install wineを試みるも、またエラーメッセージが出て進まないので、インストールできなかったというヤツ(libunwind-headers)を名指しでインストールしてみる。

sudo port install libunwind-headers

(2013.5.10 追記 今度は dbus ほにゃららがすでにあるからダメだったといって途中で停止。エラーメッセージに port -f activate dbus を実行してみろとあったので、
sudo port -f activate dbus を実行したらうまくいった。その都度のバージョンや環境に応じて、このように異なるエラーが起こるかもしれない)

# 無事インストールできた。では再び、
sudo port install wine

今度こそ途中で止まらず、依存パッケージのインストールを再開できたようだ。Macの前を離れ、3時間くらい静置しておこう。

# wineがインストール完了した時のメッセージ:
Installin wine @1.4.1_0
Activating wine @1.4.1_0
(中略)
No broken files found.
最後にWineがインストールされ、無事に成功したという意味なのだろう。


11)よく見るとWineのインストール中に、"これはデフォルトでは入らないが、入れる時のコマンドはこれだと目立つように記されていたので入れてみる:
sudo launchctl load -w /Library/LaunchDaemons/org.freedesktop.dbus-system.plist


12)以下のコマンドを打つ。

winecfg

しばらく処理音が聞こえた後、X11からWineの環境設定のようなウインドウが表示される。
単に一番下のOKをクリックすればよい。
ターミナルにはエラーメッセージがいくつか出ているが気にしなくてよい。


13)ホームディレクトリ(OSXでいわゆる各ユーザのホーム階層)にWinBUGS14.exeを置いた上で…

wine WinBUGS14.exe

と打つと、ブルースクリーン上に通常のWinBUGSのインストール画面が表れるので、順を追ってインストール作業を進める。
普通に、はい、はい、と次々に進めていけばよい(Windowsでのインストール手順と同様ということ)。
インストールが終了すると画面が閉じる。
(cf. 私は最初、まちがえて.zipバージョンを展開しようとして、中途半端に展開され、patchやkeyを当てることができずに困惑した。皆さまはお間違いなく)


14)WinBUGSをアップデートするためにWineから起動する。

wine ~/.wine/drive_c/Program\ Files/WinBUGS14/WinBUGS14.exe


15)WinBUGSのアップデート手順は、Windowsの場合と同じ。
Fileからパッチやkeyのファイルを開き(ホームディレクトリに置くのが一番わかりやすいだろう。ファイルの種類をTextにすると出現する)、Tool → Decode → Decode all。Decode allしても黙って通されたりする(なんかのディレクトリがないので作ってもいいか?と聞かれる場合もある)。
Key適用後、WinBUGSを終了させる。

cf.
open ~/.wine # WinBUGSのインストールされたディレクトリは不可視フォルダになっているが、このコマンドで開くことができる


16)RからWinBUGSを実行する。下記のような単純なサンプルコードで試してみる。Wineを経由するので、bugs()内にそのためのコードがたくさん必要。

# R2WinBUGSのインストールをお忘れなく
library(R2WinBUGS)
# 真の値は、a=3, b=2, sd=1
X <- c(1:100)
Y <- rnorm(100, mean=(3 + 2*X), sd=1)
data <- list(X=X, Y=Y)
inits <- function() list(a=0, b=0, tau=1) 
parameters <- c("a", "b", "sigma")

model <- function() {
a ~ dnorm(0, 1.0E-6)
b ~ dnorm(0, 1.0E-6)
tau ~ dgamma(1.0E-2, 1.0E-2)
for (i in 1:100) {
Y[i] ~ dnorm(mean[i], tau)
mean[i] <- a + b*X[i] }
sigma <- 1/sqrt(tau)
}
modelpath <- file.path(tempdir(), "model.bug")
write.model(model, modelpath)

mcmc <- bugs(
data=data, inits=inits, parameters=parameters, model.file=modelpath, 
n.chains=3, n.iter=5000, debug=T,
working.directory=NULL, clearWD=T, useWINE=T, newWINE=T,
WINE="/opt/local/bin/wine", WINEPATH="/opt/local/bin/winepath")

print(mcmc) # ちゃんと真の値(a=3, b=2, sigma=1)が推定できたかチェックしよう

# bugs()の中身はいろいろと設定が必要。
# 下記の伊藤さまの記事が非常に参考になりました、感謝!
http://www001.upp.so-net.ne.jp/ito-hi/stat/winbugs.html

# WINE、WINEPATHを設定しないと下記のようなエラーが出た。
以下にエラー findUnixBinary(x = "wine") : couldn't find wine binary file
追加情報: 警告メッセージ:
1: 命令 'which wine' の実行は状態 1 を持ちました
2: 命令 'locate wine | grep bin/wine$' の実行は状態 1 を持ちました


17)まだR上で下記のエラーコードが出るが、これはこちら(http://ggorjan.blogspot.jp/2008/10/runnning-r2winbugs-on-mac.html)によると害のないエラーコードらしい。要は推定計算さえ無事に行われていればよいだろう。今度こそ成功!
err:ole:CoGetClassObject class {0003000a-0000-0000-c000-000000000046} not registered
err:ole:CoGetClassObject class {0003000a-0000-0000-c000-000000000046} not registered
err:ole:CoGetClassObject no class object {0003000a-0000-0000-c000-000000000046} could be created for context 0x3



P.S.
なお、2のステップで、職場のマシンなので新規に専用のApple IDを作ろうとしたら、なぜか認証メールがGmailに届かず。検索してみると、同様の例が最近よく起こっている模様。iOS vs. Androidバトルの余波か!?それはいいとして、アドレスを別のドメインのものにしたら(yahooにしてみました)、瞬間的に認証メールが来たので解決。

ちなみに、Apple IDを作る際に「支払方法」というのが出てくるが、「なし」を選択するとフリーのままで行ける。私的使用でないPCなどではこの選択肢を選べばよいでしょう。

おまけ:wineは全ユーザ用にインストールされるようだが、wine内にインストールするWinBUGSなどのアプリケーションは各ユーザ毎にインストールされる模様。他ユーザでも使いたい場合はWinBUGSだけはもう一度インストールする必要がある。

0 件のコメント:

コメントを投稿