The One with ...

思いついたことや作業メモなどを公開しています

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年度データの推定結果が記録されている.

結果の一例.

f:id:hamada7418:20170817150851p:plain

暇があったら,tidyverseでもうちょっと可読性を高めたい.