水曜Stan - 「StanとRでベイズ統計モデリング」読書会に参加させていただきました。
spml4dm.connpass.com
勉強会メモ
Chapter1〜3 までの予習は前提で、勉強会では Chapter4 を各自もくもくという流れでした。読んだページ: 28〜49ページ
- 本には Windows へのインストール方法が書いてあるが、Mac へのインストールは以下の方の記事の通り。st-hakky.hatenablog.com
- この本で示されているスクリプトは全て GitHub にある。
- Stan のサンプリングアルゴリズムは NUTS(No-U-Turn Sampler)=ハミルトニアンモンテカルロ法の一種。
- RStan によるパラメータ推定の手順(単回帰):
- *.stan ファイルにモデルを記述する。
- *.R ファイルでデータを読み込み、RStan に渡せる形式のリストに整え、モデルファイルとデータのリストを与えて stan() を実行する。
- ステップ数の設定やデータを変更して何度も再実行する場合はモデルファイルでなくコンパイル済モデルのオブジェクトを渡すと速い。
- chain: 「初期値と乱数の種をそれぞれ一つに定めて得られたサンプル列(13ページ)」。RStan のデフォルト設定では 4 chain のサンプル列生成が走る。各 chain を並列実行もできる。
- thining(シンニング): MCMC においてサンプルを間引くこと。例えばサンプル列を1つおきに採用するなど。間引きによって収束が改善することがある。Stan のサンプリングではサンプル列の自己相関が低いので普通は間引かなくてよい。
- 対数事後確率もパラメータ同様収束しなければならない。
- 収束診断の作図には ggmcmc パッケージが便利。
2017-03-22 追記
読んだページ: 49〜53ページ
- モデルにあらわれる変数を定義したり、MCMC 時に得られたサンプル列を利用してついでに計算しておきたい変数を定義したりできる。
- transformed parameters ブロック: y := a * x + b のようにパラメータから新たな変数を定義できる。この y をモデル式につかえる。
- generated quantities ブロック: y_new := a * x_new + b のように新たな変数を定義できる。例えばテキストのような年齢で年収を説明する例なら、未知の年齢の列を x_new にしておいて、未知の年齢群の年収の確率分布を得ることが考えられる。
- 未知の x ではなく元データの x 列を x_new として、予測値(予測分布)の箱ひげ図(箱ひげ図じゃなくてもいいと思うけど)の上に実測値をプロットするような用途にもつかう(Chapter5)。「予測分布の上に実測値」式プロットはいつでも描けるので便利(説明変数が3つ以上のときは3次元プロットでも説明変数空間にはプロットできないから)。→ でも、62ページの図5.3をみるとごちゃついている気がするなあ…。
- 2017-03-29 追記 モデル式を信頼区間の幅を持たせて書きたいとき便利(データのX列は 5, 10, 15 だったとき、信頼区間の幅をもったモデル式の図を得るには 5 と 10 の間の補間が必要)。
個人的宿題
- パラメータの事前分布を明示的に与えない場合に選択される、「十分に幅の広い一様分布(31ページ)」って実際 RStan の内部ではどうなっているの。
- MCMC が収束したかを示す指標 Rhat が何なのか気になる。下記文献参照とのこと。
その他
- 48ページっぽい周辺分布の作図には ggExtra パッケージが便利らしい。