==== StanをRから使う ====
Stanが生成するのは、事後分布に従う乱数列(数値のデータ)である。この設計思想は実に潔い。Stanのユーザは必ず、Stan以外にも何らかのソフトウェアを用いて、メディアンを計算したり、ヒストグラムを描いたりすることになる。
Rを通じてStanを利用すると決めた場合は、Stanを単独でインストールするのではなく、次のような手順を踏んでインストールを進める。
- Rをインストールする
- RStudioをインストールする
- Stanを使用するのに必要な(OSごとに異なる)ソフトウェアをインストールする
- Rの中でRStanパッケージをインストールする
=== RとStanのための開発環境 ===
C言語やC++言語でコードを書きたくないから、R言語を使うし、Stanに頼ってハミルトニアンモンテカルロ法を用いるとは思う。しかし自分でC++言語を用いた開発をする予定がなくとも、Stanの利用には、C++言語の開発環境が必要である。Rと一緒に用いるのであれば、Rをコンパイルできる環境とともに揃えるのが望ましい。
Windows用にはコンパイルのための道具が収められた[[https://cran.r-project.org/bin/windows/Rtools/|RTools]]というパッケージが用意されている。macOSではXcodeを用いる。LinuxではGCCやRを一通りインストールすると、必要なライブラリも揃う。
Rは[[https://cran.r-project.org/|The R Project]]が公開している最新版のバイナリをインストールすることを勧める。Microsoft R Openは、対応していないパッケージがあることもあるので、自己責任で選択して欲しい。
|OS|Rのコンパイル環境|
|Windows|[[https://cran.r-project.org/bin/windows/Rtools/|RTools]]|
|macOS|[[https://itunes.apple.com/jp/app/xcode/id497799835|Xcode]]|
|Linux|GCCおよび必要なライブラリ一式|
=== RとRStudio ===
まず、RとRStudioをインストールするか最新版に更新しておくこと。Rは[[https://cran.r-project.org/|The R Project]]が公開している最新版のバイナリをインストールすることを勧める。Microsoft R Openは、対応していないパッケージがあることもあるので、自己責任で選択して欲しい。Linuxでは、Rをソースからビルドしてもいいし、各ディストリビューションに関係するパッケージを用いても良い。
バイナリをインストールするなら、[[http://cran.r-project.org/|Rの総本山のウェブサイト]]の国内ミラーである、[[http://cran.ism.ac.jp/|統計数理研究所提供のCRANサイト]]から、使用するOS用のRの最新版をダウンロードしてインストールすると良い。RをRStudioから使う人は更に、RStudioの開発元であるRStudio.comから使用するOS用の RStudio Desktop (Open Source License) の最新版をダウンロードしてインストールすると良い。
=== Windowsユーザ向けのStanのインストール手順 ===
Windowsを用いる人は[[https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started-(Japanese)|R Stan Getting Started(の和訳)]]を見ながら進めると良い。
- https://cran.r-project.org/bin/windows/Rtools/ からRtoolsをダウンロードしてインストールする
- 上のインストール中に、システムの環境変数のPATHを編集するように指示する
- RもしくはRStudioを起動し、次の1行を実行してみる。system(“g++ -v“)
コンパイラのバージョンなどを返してくれば、準備が整ったことが確認できる。
- 次にStanおよび関連するR用のパッケージをインストールする。install.packages(“rstan“, repos=“https://cloud.r-project.org/“, dependencies=TRUE)
ここまで終われば、たくさんのパッケージがインストールされて、やっとStanをRから呼び出す準備が整う。
=== Macユーザ向けのStanのインストール手順 ===
macOSを用いる人は[[https://github.com/stan-dev/rstan/wiki/RStan-Mac-OS-X-Prerequisite-Installation-Instructions|RStan Mac OS X Prerequisite Installation Instructions]]を見ながら進めると良い。
- App StoreからXcodeをインストールするか、最新版に更新する。
- RもしくはRStudioを起動し、次の1行を実行してみる。system(“clang++ -v“)
- コンパイラのバージョンなどを返してくれば、準備が整ったことが確認できる。
- 次にStanおよび関連するR用のパッケージをインストールする。install.packages(“rstan“, repos=“https://cloud.r-project.org/“, dependencies=TRUE)
ここまで終われば、たくさんのパッケージがインストールされて、やっとStanをRから呼び出す準備が整う。
=== Linuxユーザ向けのStanのインストール手順 ===
Linuxを用いる人はコンパイラとライブラリが一通り入っていれば良い。そしてRもしくはRStudioを起動し、次の1行を実行してみる。
system(“g++ -v“) # WindowsとLinuxの場合
コンパイラのバージョンなどを返してくれば、準備が整ったことが確認できる。次にStanおよび関連するR用のパッケージをインストールする。
install.packages(“rstan“, repos=“https://cloud.r-project.org/“, dependencies=TRUE)
ここまで終われば、たくさんのパッケージがインストールされて、やっとStanをRから呼び出す準備が整う。
=== RStanの使い方(概要) ===
RStanというパッケージは、
- Stanモデリング言語で記述されたファイルから、Stanでモデルファイルを作る
- データとモデルを与える未知パラメータの事後分布からのサンプリングを行う
という順序で動作する。
まずRで
library(rstan)
を実行し、必要なパッケージを読み込む。
R上でこの2つのステップを同時に実行するには
binomial.fit <- stan("binomial.stan",data=list(x=20,n=30))
とすればよい。
2段階を分けて実行するには
binomial.model <- stan_model("binomial.stan")
binomial.fit <- sampling(binomial.model, data=list(x=20,n=30))
とする。モデルファイルを作る際にコンパイルを行っていて、ここに少々の時間がかかる。一度コンパイルしたモデルファイルは、RDSという形式でRの外に保存することができる。
saveRDS(binomial.model,"binomial.rds")
読み込むには、次のreadRDS関数を用いる。
binomial.model <- readRDS("binomial.rds")
=== RStanの使い方(スケルトン) ===
以下では、Stanモデリング言語を記述したファイルをexample.stan、観測される確率変数をx、モデルの未知パラメータをthetaと置く。
- Stanモデリング言語で記述したコードを用意する。
- Rの中で観測値を入力する。(以下では、example.obsというオブジェクトとする)
- Rからモデルを作成するように指示を出す。example.stan <- stan_model("example.stan")
- 作成したモデルに基づいて、事後分布に従う乱数を生成するように指示を出す。example.nuts <- sampling(example.stan, data=list(x=example.obs), chains=4)
- NUTSが法則収束していることを確認する。stan_trace(example.nuts, inc_warmup=TRUE)
stan_dens(example.nuts, pars="theta", separate_chains=TRUE)
stan_ac(example.nuts,pars="theta",separate_chains=TRUE)
stan_rhat(example.nuts)
stan_ess(example.nuts)
- 事後分布を確認する。print(example.nuts)
-事後分布を目視で確認し、併せて先ほどの平均やメディアンが合致しているかどうかを確認する。stan_hist(example.nuts, pars="theta")
- 事後分布と事後信頼区間を得る。stan_plot(example.nuts, point_est="median", show_density=TRUE, ci_level=0.95, outer_level=1.00,show_outer_line=TRUE)