cmdstanrを実行する(Rtools 4.2)

R,stan

はじめに

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を通すようにましょう。

みなさまが貴重なゴールデンウィークを、有意義に過ごせますように。

RR,stan

Posted by K