cmdstanrを実行する(Rtools 4.2)
はじめに
cmdstanrを利用する機会があったのですが、インストール後、実行部分でエラー対応に苦戦しました。
Rtools4.2は、Rtools4.0の時とPATHの通し方が違うことによるエラーでした。
解決はできたものの、このせいでゴールデンウィーク中の貴重な数時間を溶かしてしまったので、そんな悲しい方を二度と生み出さないように、インストールから実行までの方法を整理していきます。
cmdstanrとは
rstan同様、stanを動かすためのRパッケージです。stanのコア部分であるcmdstanを動かすためのStanプログラムです。詳細は下記URLの清水先生の記事を参考にして頂きたいのですが、どうやらrstanを利用するよりも計算が速いらしいです。
上のブログではRtools4.0で実行されていたので、この記事を参考に、Rtools4.2で実行する方法をまとめていきます。Rtools4.0をご利用の方は、清水先生の記事を参考にしてください。
cmdstanrを動かす
cmdstanインストールして、実行まで進めていきましょう。
参考として、僕のPCはWindowsであり、R, Rstudio, Rtoolsのバージョンは、それぞれ以下です。
R:version 4.2.1
Rstudio:1.3.959
Rtools:4.2
まずはこちらから、Rtools 4.2をインストールしてください。少し時間がかかります。
インストールが完了したら、PATHの設定です。
Windowsの、「設定」→「システム」→「詳細情報」→「システムの詳細設定」→「環境変数」から、"Path" をクリックして「新規」から追加していってください。追加するPATHは、下記の2つです。
- C:\rtools42\usr\bin
- C:\rtools42\x86_64-w64-mingw32.static.posix\bin
次に、Rstudio上でcmdstanrをインストールして、ライブラリを起動してください。
# cmdstanのインストール
install.packages("cmdstanr", repos = c("https://mc-stan.org/r-packages/", getOption("repos")))
# cmdstanの起動
library(cmdstanr)
次に、下記を実行して下さい。
check_cmdstan_toolchain(fix = TRUE)
“The C++ toolchain required for CmdStan is setup properly!" と出力されれば成功です。
このあたりまでは、おそらく大きな問題なく進められるのではないでしょうか。
次に、cmdstanをinstallしましょう。cmdstanrはcmdstanを動かすためのパッケージであり、cmdstanは別でインストールする必要があります。
# cmdstanのinstall
install_cmdstan(cores = 2)
インストールできたら、インストールの確認も兼ねて、cmdstanのバージョンを確認します。
cmdstan_version()
cmdstanのバージョンが出力されれば成功です。どうでしょうか、うまくいったでしょうか?
最後に、cmdstan, cmdstanrの動作確認をしてみましょう。
ここでも、清水先生のブログを参考にコードを実行します。
model <- cmdstan_model(write_stan_file("parameters{real m;}model{5~normal(m,1);} "))
model$sample()
1行目を実行した段階で、コンパイル時に使ったファイルの一覧(?)ようなものが赤字で出力されますが、あまり気にしなくて良いです。2行目を実行した後、下記のような結果が得られれば成功です。
All 4 chains finished successfully.
Mean chain execution time: 0.0 seconds.
Total execution time: 1.1 seconds.
どうでしょう、うまく実行できましたでしょうか?
僕の場合は、2つ目のPATHをうまく設定できていなかったことにより、うまくいくまでかなり考えました…
注意点
注意すべきは、PATHの中身です。Rtools 4.0だと、"C:\rtools40\usr\bin"のPATHの追加のみで良かったようなのですが、Rtools4.2では、2つ目のPATHも追加しないとコンパイルがうまくいかず、下記のエラーがでていました。
> model <- cmdstan_model(write_stan_file("parameters{real m;}model{5~normal(m,1);} "))
Compiling Stan program...
情報: 与えられたパターンのファイルが見つかりませんでした。
⁝(Infile included from の行は省略)
mingw32-make: *** [make/program:14: src/cmdstan/main.o] Error 1
エラー: An error occured during compilation! See the message above for more information.
2つめのPATHを追加してもうまくいかない場合は、Rのバージョンを古くすることや、Rtoolsの再インストールなど、試してみると良いかもしれません。
まとめ
Rtools42を利用する場合、PATHの通し方がRtools40と異なることが原因で、エラーが出ていました。
“C:\rtools42\x86_64-w64-mingw32.static.posix\bin"にも、PATHを通すようにましょう。
みなさまが貴重なゴールデンウィークを、有意義に過ごせますように。