Stan のインストール
環境: Windows 11, R4.2.1, RStudio 2022.07.1 Build 554, RTools 42(2022.8.30更新)
準備
Stanとは
Stanって何?という人は、まず以下を見てください。とても親切な解説です。
Stan超初心者講習
Rstan
RのパッケージrstanからStanを使うことになります。RとRStudioをインストールします。
Rのインストール(Windows 11の場合)
基本的に、Rにrstanをインストールすると、一緒にstanもインストールされますが、少し前置きが必要です。
すでに最新版のRとRStudioがインストールされている場合は、以下のインストール作業は不要です。
Rの最新版のインストール
R 4.2.1 がリリースされています。 R for Windowsからダウンロード&インストールしてください。
インストール先のフォルダは、C:Program files
の下がデフォルトかもしれませんが、フォルダ名にピリオドとか含めないほうが無難かも。C:WinAppsR421
とか。。(以下、このフォルダにインストールしたものとして話を話をすすめます。゙)
あとはデフォルトでインストールして大丈夫そうです。
Rstudioのインストール
Rをそのまま使うより、Rstudioをインターフェイスにして使った方が断然使いやすいです。これも一緒にインストールしましょう。
有料版も紹介されていますが、Free版で全く十分です。
RTools
StanはモデルをC++でコンパイルするそうで、g++(GNU C++ Compiler)が必要です。これを使うには、RToolsをインストールしておけばよいです。
Rtoolsのダウンロード&インストール
RTools: Toolchains for building R and R packages from source on Windowsから最新版RTools 42(2022.8現在)をダウンロード。
インストール先はデフォルトC:rtools42
を指定する!
残りもデフォルトでインストール。
Rtools42 は32ビット版は廃止。以前のようにPATHや環境変数の指定はしなくてよくなりました!
確認
一旦、Rを再起動
RToolsがインストールされているかを確認
system("g++ -v")
Using built-in specs. COLLECT_GCC=C:rtools42X86_64~1.POSbinG__~1.EXE COLLECT_LTO_WRAPPER=c:/rtools42/x86_64~1.pos/bin/../libexec/gcc/x86_64-w64-mingw32.static.posix/10.3.0/lto-wrapper.exe Target: x86_64-w64-mingw32.static.posix > Configured with: /root/mxe/tmp-gcc-host-x86_64-w64-mingw32.static.posix/gcc-10.3.0/configure --host=x86_64-w64-mingw32.static.posix --target=x86_64-w64-mingw32.static.posix --build=x86_64-pc-linux-gnu --prefix=/usr/lib/mxe/usr/x86_64-w64-mingw32.static.posix --with-native-system-header-dir=/usr/lib/mxe/usr/x86_64-w64-mingw32.static.posix/include --enable-languages=c,c++,objc,fortran --enable-version-specific-runtime-libs --with-gcc --with-gnu-ld --with-gnu-as --disable-nls --without-libiconv-prefix --disable-shared --disable-multilib --without-x --disable-win32-registry --enable-threads=posix --enable-libgomp --with-gmp=/usr/lib/mxe/usr/x86_64-w64-mingw32.static.posix --with-isl=/usr/lib/mxe/usr/x86_64-w64-mingw32.static.posix --with-mpc=/usr/lib/mxe/usr/x86_64-w64-mingw32.static.posix --with-mpfr=/usr/lib/mxe/usr/x86_64-w64-mingw32.static.posix --enable-libstdcxx-time target_configargs=XCFLAGS=-Wno-format Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 10.3.0 (GCC) [1] 0
※うまくいかない場合は、新しく作成された .Renviron というファイルをgetwd()
で表示されるフォルダ(作業ディレクトリ)に移してみてください。.Renviron が複数ある場合、作業ディレクトリにあるのが優先されるようです。しかし、このファイルには他にも書き込みがあるかもしれませんので、そこは確認&バックアップの自己責任でお願いします。
system("where g++")
C:\rtools42\x86_64-w64-mingw32.static.posix\bin\g++.exe [1] 0
system("where make")
C:\rtools42\usr\bin\make.exe [1] 0
Rからg++を動かしてみる
ライブラリ Rcpp と inline のインストール
Rからg++を使う場合は、ライブラリー Rcppが必要。
install.packages("Rcpp", type = "source")
さらに、ライブラリーinlineを使うと、R上でインラインでC++を書いて、直接実行できる。
install.packages("inline", type = "source")
動作チェック
RパッケージinlineとRcppをロード後、以下を実行。
library(inline)
library(Rcpp)
src <- '
std::vector<std::string> s;
s.push_back("hello");
s.push_back("world");
return Rcpp::wrap(s);
'
hellofun <- cxxfunction(body = src,
includes = '',
plugin = 'Rcpp',
verbose = FALSE)
cat(hellofun(), '\n')
hello world
hello world
と表示されればOK!
Rstanのインストール
Rのパッケージ rstan をインストールする。これでStanが使えるようになります。
install.packages("rstan",
repos = c("https://mc-stan.org/r-packages/",
getOption("repos")))
Rのパッケージ rstudioapiもインストールしておきましょう。
install.packages("rstudioapi")
ここでは使いませんが、事後処理用(結果のグラフとか描いてくれる)のパッケージggmcmcのインストールも必須です。
install.packages("ggmcmc")
インストールしたら、とりあえず、ライブラリrstanとrstudioapiを読み込みましょう。
library(rstan)
library(rstudioapi)
動作チェック用スクリプト
Stanのスクリプトを書いてみて、ファイルに保存して、読み込んで実行してみる・・・となりますが、
R Markdown を使っていたら、以下をR Markdown に書いておけば、そのまま実行できます(ライブラリknitが必要)。R Markdownって何?という人は、ちょっとだけ調べてください。
```{stan, output.var="rstantest01"}
data {
int N;
real X[N];
real Y[N];
}
parameters {
real a;
real b;
real<lower=0> sigma;
}
model {
for (n in 1:N) {
Y[n] ~ normal(a + b*X[n], sigma);
}
}
```
動作チェック用 データ
d01<-list(N=20,
X=c(24,24,26,32,33,35,38,40,40,43,
43,44,48,52,56,56,57,58,59,59),
Y=c(472,403,454,575,546,781,750,601,
814,792,745,837,868,988,1092,1007,
1233,1202,1123,1314))
MCMCの実行
fit<-sampling(rstantest01,data=d01)
SAMPLING FOR MODEL '8894f22964d70155ef24e732081ed258' NOW (CHAIN 1). Chain 1: Chain 1: Gradient evaluation took 0 seconds Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 0 seconds. Chain 1: Adjust your expectations accordingly! Chain 1: Chain 1: Chain 1: Iteration: 1 / 2000 [ 0%] (Warmup) (中略) Chain 4: Chain 4: Elapsed Time: 0.094 seconds (Warm-up) Chain 4: 0.054 seconds (Sampling) Chain 4: 0.148 seconds (Total) Chain 4:
エラーが出なければ、インストール完了。
トラブルシューティング
コンパイルでうまくいかないときは,HOME
のフォルダ(Rの起動時にgetwd()
で表示されるパスのフォルダ)に.R
というフォルダがあって,そこにMakevars
というファイルがあります.この中身を確認すると解決策が見つかる場合もあります.(Rstudioで編集できます).私の場合は,このファイルの記述を全て削除してRを再起動したらうまく動きましたが,その後どうなるかは責任持てません.
それでもうまくいかなければ,古い rstan
をいったん削除して再インストールしたらうまくいくかも。
remove.packages(c("rstan", "StanHeaders"))
install.packages("rstan",
repos = c("https://mc-stan.org/r-packages/",
getOption("repos")))