ggplot2による事後分布の視覚化
絶対忘れるので自分用にメモしておく.
目的
Stanで推定した結果を分布のまま直接比較したい.
ggplot2用のデータフレームの作り方
流れはこんな感じ.
- Stanで推定した結果をfitに記録(CSVで記録すると結果的に遅かった.sample_file からのサンプル列の取り出しは面倒.たいした量じゃないので今回はRDataを保存してloadする).
- stanfitオブジェクトをas.data.frame()でデータフレームに変換
- パラメータの各列を1列にスタック(95年と2015年で年齢幅が違うのでindexを小細工したうえでforを回した)
- ggplot用のインデックス列を作成(年齢,性別,調査年).インデックス列は同じラベルがmcmcサンプルの数だけならぶ.今回は1000×3(chain)個.
- このときスタックの順番は男女男女とし,性別のインデックスを行方向に対応させる.
- plotしたいパラメータとインデックス列をデータフレームにまとめ,ggplotにわたす.
- ggplotのfill=で1つの枠内に男女を並べ,facet_wrap(~ age, ncol = 5)で年齢別に並べる.結果年齢別に男女比較が行列型に並ぶ
- 調査年比較は,パラメータをスタックする際に,2015,1995の順番で並べる.
コードはこんな感じ. fitに2015年度データの推定結果,fit2に1995年度データの推定結果が記録されている.
結果の一例.
暇があったら,tidyverseでもうちょっと可読性を高めたい.