文書の過去の版を表示しています。


StanをRから使う

必要なソフトウェア

Stanを利用するにはC++言語の開発環境が必須である。またRと一緒に用いるのであれば、Rをコンパイルできる環境とともに揃えるのが望ましい。 Windows用にはコンパイルのための道具が収められたRToolsというパッケージが用意されている。macOSではXcodeを用いる。LinuxではGCCやRを一通りインストールすると、必要なライブラリが揃っていることが多い。 RはThe R Projectが公開している最新版のバイナリをインストールすることを勧める。Microsoft R Openは、対応していないパッケージがあることもあるので、自己責任で選択して欲しい。  

OSRRStudio開発環境
WindowsRRStudioRTools
macOSRRStudioXcode
LinuxRRStudio

Linuxでは、Rをソースからビルドしてもいいし、各ディストリビューションに関係するパッケージを用いても良い。

準備

まず、RとRStudioをインストールするか最新版に更新しておくこと。Rの総本山のウェブサイトの国内ミラーである、統計数理研究所提供のCRANサイトから、使用するOS用のRの最新版をダウンロードしてインストールすると良い。RをRStudioから使う人は更に、RStudioの開発元であるRStudio.comから使用するOS用の RStudio Desktop (Open Source License) の最新版をダウンロードしてインストールすると良い。

Windowsユーザ向け

Windowsを用いる人はR Stan Getting Started(の和訳)を見ながら進めると良い。

  1. https://cran.r-project.org/bin/windows/Rtools/ からRtoolsをダウンロードしてインストールする
  2. 上のインストール中に、システムの環境変数のPATHを編集するように指示する
  3. RもしくはRStudioを起動し、次の1行を実行してみる。
    system(“g++ -v“)

    コンパイラのバージョンなどを返してくれば、準備が整ったことが確認できる。

  4. 次にStanおよび関連するR用のパッケージをインストールする。
    install.packages(“rstan“, repos=“https://cloud.r-project.org/“, dependencies=TRUE)

ここまで終われば、たくさんのパッケージがインストールされて、やっとStanをRから呼び出す準備が整う。

Macユーザ向け

macOSを用いる人はRStan Mac OS X Prerequisite Installation Instructionsを見ながら進めると良い。

  1. App StoreからXcodeをインストールするか、最新版に更新する。
  2. RもしくはRStudioを起動し、次の1行を実行してみる。
    system(“clang++ -v“)
  3. コンパイラのバージョンなどを返してくれば、準備が整ったことが確認できる。
  4. 次にStanおよび関連するR用のパッケージをインストールする。
    install.packages(“rstan“, repos=“https://cloud.r-project.org/“, dependencies=TRUE)

ここまで終われば、たくさんのパッケージがインストールされて、やっとStanをRから呼び出す準備が整う。

Linuxユーザ向け

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というパッケージは、

  1. Stanモデリング言語で記述されたファイルから、Stanでモデルファイルを作る
  2. データとモデルを与える未知パラメータの事後分布からのサンプリングを行う

という順序で動作する。 まず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")

基本手順

以下では、Stanモデリング言語を記述したファイルをexample.stan、観測される確率変数をx、モデルの未知パラメータをthetaと置く。

  1. Stanモデリング言語で記述したコードを用意する。
  2. Rの中で観測値を入力する。(以下では、example.obsというオブジェクトとする)
  3. Rからモデルを作成するように指示を出す。
    example.stan <- stan_model("example.stan")
  4. 作成したモデルに基づいて、事後分布に従う乱数を生成するように指示を出す。
    example.nuts <- sampling(example.stan, data=list(x=example.obs), chains=4)
  5. NUTSが法則収束していることを確認する。
    stan_trace(example.nuts, inc_warmup=TRUE)
    stan_dens(example.nuts, pars="theta", separate_chains=TRUE)
    stan_ac(example.fit,pars="theta",separate_chains=TRUE)
    stan_rhat(example.nuts)
    stan_ess(example.nuts)
  6. 事後分布を確認する。
    print(example.nuts)
  7. 事後分布を目視で確認し、併せて先ほどの平均やメディアンが合致しているかどうかを確認する。
    stan_hist(example.nuts, pars="theta")
  8. 事後分布と事後信頼区間を得る。
    stan_plot(example.nuts, point_est="median", show_density=TRUE, ci_level=0.95, outer_level=1.00,show_outer_line=TRUE)