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をインターフェイスにして使った方が断然使いやすいです。これも一緒にインストールしましょう。

RStudio download

有料版も紹介されていますが、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")))