Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章

4.485 visualizaciones

Publicado el

StanとRでベイズ統計モデリングに関する読書会(Osaka.stan)第二回における,第四章の発表資料です

Publicado en: Datos y análisis
  • Sé el primero en comentar

StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章

  1. 1. StanとRでベイズ統計モデリング 読書会 -Chapter 4- StanとRStanをはじめよう 1 Osaka.stan #2 (2016/12/23)
  2. 2. 自己紹介 • 紀ノ定 保礼  大阪大学大学院人間科学研究科  心理学・人間工学 界隈 - 専門は交通行動 • ベイズ歴  1年弱(学会発表1件,投稿準備中論文1本)  目下勉強中なので,発表者の理解が誤っている場合は, ご指摘よろしくお願いします! 2
  3. 3. 3 最近書きました
  4. 4. 本発表について • 本書1~4章の既読者を想定  1~3章は前回の読書会資料を参照 http://www.slideshare.net/simizu706/stanr13 • 進め方  基本的にページ順に説明 - 一部,後の節から先取りして,ひとまとめにしている箇所あり  写経+補足説明  「本書に書いてある通り」の部分は省略 4
  5. 5. 本発表について • ggplot2の素晴らしさも伝えたい  ただ作図コードがおのずと長くなるので,敬遠 されてしまうかもしれない  そこで,見栄え調整のコードは省略し,最低限 必要な部分だけ抜粋した書き方も紹介 - 以下のサイトで公開しました 5http://qiita.com/kyn02666/items/e41c076cd5140e78b99a
  6. 6. • MCMCの結果が本書と違うが,気にしないでください  環境はR(version 3.3.2)とRStan(version 2.12.1) 6Modeling Language User‘s Guide and Reference Manual, Version 2.13.1 より
  7. 7. 7 http://www.kyoritsu-pub.co.jp/bookdetail/9784320112421 本章以降のデータや コードはダウンロード 可能
  8. 8. 8 ↓ まず読む
  9. 9. 9 ← chap04内にプロジェクトを 作っておくと便利
  10. 10. 4.1 Stanのインストール 10
  11. 11. 特に追記することはないので省略! 11http://www.slideshare.net/KojiKosugi/r-stan 詳細はこちら
  12. 12. 4.2 Stanの基本的な文法 12
  13. 13. 13 以降はRstudio上で コードを書いていることを 前提にします Stan超初心者講習より http://www.slideshare.net/simizu706/stan-62042940
  14. 14. 4.2.1 ブロック構成 14 データ𝑌の宣言 サンプリングしたいパラメータ𝜃の宣言 これら3ブロックは基本的に必要 ※Stanにおけるパラメータの定義:確率変数すべて 𝑝 𝜃 𝑌 = 𝑝 𝑌 𝜃 𝑝 𝜃 𝑝 𝑌 ← この部分を書く
  15. 15. 4.2.2 文法の基礎 • 例:正規分布の平均𝜇を推定  観測されたデータは20個あるとする  背景知識 - 推定したい正規分布の標準偏差𝜎は1 - 平均𝜇に関する背景知識なし  モデル式4-1 - 𝑌 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝜇, 1 𝑛 = 1, … , 20 - 𝜇 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 0, 100 15 𝑝 𝜃 𝑌 = 𝑝 𝑌 𝜃 𝑝 𝜃 𝑝 𝑌
  16. 16. 4.2.2 文法の基礎 16 𝑌 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝜇, 1 𝑛 = 1, … , 𝑁 𝜇 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 0, 100 ↑ 無情報事前分布であれば省略可能 (自動的に,十分に広い一様分布が設定される) ← 推定対象のパラメータを宣言 ← モデルを書く上で必要なデータを指定
  17. 17. 17 ↓ データ型についてはここを参照 http://qiita.com/hoxo_m/items/e4dab11fed062689eff2
  18. 18. 4.2.3 コーディング規約 守らなくてもエラーは生じないが,可読性が向上 18 インデント(字下げ) データ変数の先頭は大文字 パラメータ変数の先頭は小文字 ブロック間は1行空ける ~や=の前後は1スペース空ける
  19. 19. 4.2.3 コーディング規約 エラーを招く原因 19最終行は1行空ける 行末のセミコロンを忘れない Lと1を見間違えない
  20. 20. 4.2.3 コーディング規約 変数の宣言を行える場所は, { の直後のみ 20
  21. 21. 21 {の直後であれば,パラメータの宣言は ブロックの冒頭でなくてもよい ただし,{}の中で宣言したパラメータは 出力されないので注意
  22. 22. 4.2.3 コーディング規約 とりあえずStanコードを書いたらCheck 22 ’model4-1.stan’として保存
  23. 23. 試しにデータを流し込んでみる  dataブロックで宣言した変数を,Rから渡してやる 23 以下のデータを渡してみる • N=20 • Y=平均200,標準偏差1の正規乱数が20個 格納されたベクトル MCMCの結果… ほぼ実データ通り!
  24. 24. 4.3 Stanのlp__とtarget model4-1を例に説明 24
  25. 25. 以下の資料を参考にさせていただきました 25http://www.slideshare.net/simizu706/stan-64926504 40-48枚目スライド参照
  26. 26. 26 ↑ これは何? Stanコードでは,そのような “パラメータ”は宣言していないはず…
  27. 27. 27 ↑ これは何? 実はこの背後で計算されている! lp: log posterior(対数事後確率)の略
  28. 28. 復習 • そもそもMCMCとは何をするものか  知りたいのは左辺𝑝 𝜃 𝑌  でも正規化定数𝑝 𝑌 が邪魔で計算できない  𝑝 𝑌 は定数なのだから, 𝑝 𝜃 𝑌 ∝ 𝑝 𝑌 𝜃 𝑝 𝜃  𝑝 𝑌 𝜃 𝑝 𝜃 に従う乱数を生成して事後分布を近似 28 𝑝 𝜃 𝑌 = 𝑝 𝑌 𝜃 𝑝 𝜃 𝑝 𝑌 ベイズの定理
  29. 29. 効率よく𝜃を推定するには • 事後確率 𝑝 𝜃 𝑌 ∝ 𝑝 𝑌 𝜃 𝑝 𝜃 が大きくなるよ うな𝜃の付近で,たくさんサンプリングしたい  ステップごとに,パラメータ𝜃について偏微分  なお,計算を簡単にするために,両辺対数をとる 29 log 𝑝 𝜃 𝑌 = log 𝑝 𝑌 𝜃 𝑝 𝜃 + 𝑐𝑜𝑛𝑠𝑡. = log 𝑝 𝑌 𝜃 + log 𝑝 𝜃 + 𝑐𝑜𝑛𝑠𝑡.
  30. 30. • 事後確率 • 対数事後確率 30 = 𝑛=1 20 𝑁𝑜𝑟𝑚𝑎𝑙 𝑌 𝑛 | 𝜇, 1 × 𝑁𝑜𝑟𝑚𝑎𝑙 𝜇 | 0, 100 = 𝑛=1 20 log 𝑁𝑜𝑟𝑚𝑎𝑙 𝑌 𝑛 | 𝜇, 1 + log 𝑁𝑜𝑟𝑚𝑎𝑙 𝜇 | 0, 100 (式4.3) 𝑝 𝜃 𝑌 ※偏微分で消える定数項は省略 負の値の足し算になるlog 𝑝 𝜃 𝑌 (一般的に)1より小さい値の積
  31. 31. 31 sampling statement form (簡略的コード) explicit increment form (lpを正確に計算する版) 𝑛=1 20 log 𝑁𝑜𝑟𝑚𝑎𝑙 𝑌 𝑛 | 𝜇, 1 + log 𝑁𝑜𝑟𝑚𝑎𝑙 𝜇 | 0, 100 そのまま 表現しただけ! • targetはlpのニックネーム • 予約語なので宣言不要
  32. 32. 32http://www.slideshare.net/simizu706/stan-64926504 確率密度/質量関数 については本書 Chapter 2, p7参照
  33. 33. 4.4 単回帰 33
  34. 34. 本題に入る前に復習 • 解析の手順(Chapter3, p18-19)  データをとる前 - 問題設定:何を知りたいのか - 解析計画:どの手法を使うのか  データをとった後 - データの分布の確認:データ生成メカニズムの 想像が可能 • 本書ではggplot2パッケージを使用 - 解析 34
  35. 35. ggplot2について知りたい方は 35 この順に読むのが分かりやすいと思います
  36. 36. http://ggplot2.org/簡単に・多層的にデータを視覚化できる 36
  37. 37. 37 重ね着するイメージで
  38. 38. 基本的な書き方 • 基本レイヤー  このなかで指定したdataや変数が,以降のgeomや statに持ち越される - data:描画用データが含まれるデータフレーム - aes():データをグラフにmappingさせる関数 • この変数はX軸に,この変数はY軸に,この変数で識別して…  ggplot()内で指定しなければ,以降の各geomやstat内 で指定する必要がある 38
  39. 39. 基本的な書き方 • geom_やstat_  描画形式を指定(例:散布図,棒グラフ…)  今回は,1行目でデータや変数を指定済みなので, これらをgeom内やstat内で指定する必要がない  geom内やstat内で,別のデータフレームや別の変数 を指定することも可能 39
  40. 40. 困ったときのチートシート
  41. 41. Data Visualization with ggplot2 Cheat Sheet
  42. 42. データセット(年齢と年収)を利用 • 𝑋:B社の社員の年齢(歳) • 𝑌 :年収(万円)  年収𝑌 = 基本年収𝑌𝑏𝑎𝑠𝑒 + それ以外の影響𝜀 • 分析の目的  𝑋歳時点での年収の予測 - 応答変数 = 年収,説明変数 = 年齢の,単回帰分析 42 年齢𝑋に正比例 平均0の正規分布に従う (例:ランダムな業績のばらつき)
  43. 43. データの分布の確認 43
  44. 44. もっと詳しく確認したいなら 44 GGallyパッケージは, 本書5.1.2で初登場します どうやら,年収を年齢で 直線回帰してもよさそう
  45. 45. 4.4.3 モデル式の記述 モデル式4-2  𝑌 𝑛 = 𝑌𝑏𝑎𝑠𝑒 𝑛 + 𝜀 𝑛  𝑌𝑏𝑎𝑠𝑒 𝑛 = 𝑎 + 𝑏𝑋 𝑛  𝜀 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 0, 𝜎 45 𝑛 = 1, 2, … , 𝑁 𝑛 = 1, 2, … , 𝑁 𝑛 = 1, 2, … , 𝑁 全員に共通の線形式𝑎 + 𝑏𝑋があり, そこに個人ごとに独立のノイズ𝜀が乗ることで, 年収𝑌が決まる
  46. 46. • モデル式4-2  𝑌 𝑛 = 𝑌𝑏𝑎𝑠𝑒 𝑛 + 𝜀 𝑛  𝑌𝑏𝑎𝑠𝑒 𝑛 = 𝑎 + 𝑏𝑋 𝑛  𝜀 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 0, 𝜎 • モデル式4-3  𝑌 𝑛 = 𝑎 + 𝑏𝑋 𝑛 + 𝜀 𝑛  𝜀 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 0, 𝜎 • モデル式4-4  𝑌𝑏𝑎𝑠𝑒 𝑛 = 𝑎 + 𝑏𝑋 𝑛  𝑌 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝑌𝑏𝑎𝑠𝑒 𝑛 , 𝜎 • モデル式4-5  𝑌 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝑎 + 𝑏𝑋 𝑛 , 𝜎 46 𝑛 = 1, 2, … , 𝑁 どのモデルも等価!
  47. 47. 47 Stan超初心者講習より http://www.slideshare.net/simizu706/stan-62042940 (モデル式4-5は)
  48. 48. 4.4.4 Rのlm関数で推定 lm.Rファイルより 48 年齢が一つ増えるごとに, 基本年収が21.9万円上昇
  49. 49. 先ほど求めた回帰式res_lmに,X_new歳を代入し,95%信頼区間を推定 予測値 −119.7 + 21.9 ∗ 𝑋歳 49 年齢 95%信頼区間の 下限と上限
  50. 50. 信頼区間の求め方 予測値 ± t値 × 予測値のばらつき ↓ 追記する 例えば23歳の年収の,95%信頼区間上限なら 50 予測値のばらつき ↓ ↓ 誤差の自由度
  51. 51. 51 直線:23~60歳での推定年収 薄い灰帯:95%信頼区間 濃い灰帯:50%信頼区間 fig4-3.Rファイルより
  52. 52. 52 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 基本レイヤー の作成 (データなし) 背景テーマと 文字サイズの変更 上限下限を指定 (95%CI) その範囲内 を塗りつぶす ③と同様 (50%CI) 区別のため 色の透過度を調整 直線回帰 Raw dataの プロット 軸ラベルの 変更 データ表示 範囲の変更 見栄えよく! ⑨ ⑨ 出来上がったら,好きな形式で保存 Y軸は 予測値fit なので一直線 目盛間隔を 調整し
  53. 53. 53 引数が多いから難しそうに見えるが… 最低限必要なのは,これだけ その他のコードは見栄えを調整しているだけ 大丈夫,こわくない!
  54. 54. 54 ローデータのXの範囲(24~59歳)で 構わないなら,信頼区間に関しては こういう書き方も可能
  55. 55. 予測区間の場合 55 予測値 ± t値 ×(予測値のばらつき+ 予測値からのばらつき) 予測値からのばらつきのぶん,信頼区間よりも広い
  56. 56. 56 ↓ 追記する 例えば23歳の年収の,95%予測区間上限なら ↓予測値の ばらつき ↓予測値からの ばらつき
  57. 57. 57 直線:23~60歳での推定年収 薄い灰帯:95%予測区間 濃い灰帯:50%予測区間 ※予測区間に関しては geom_smooth()は使えない fig4-3.Rファイルを極力短縮化
  58. 58. 参考にさせていただきました • predict関数と数式の対応、グラフの描き方 (信頼区間・予測区間編)  http://crayfish44.hatenablog.jp/entry/20160223/1456220882 • Excelで回帰分析の予測区間を描く  http://qiita.com/ksksk/items/75ba95337ccdb32e7cb1 58
  59. 59. 4.4.5 Stanで実装 59 model4-5.stanファイルに説明追記 今回は無情報事前分布を採用するので,事前分布は省略可能 (自動的に,十分に広い一様分布が適用される)
  60. 60. 4.4.6 Rからの実行方法 60 run-model4-5.Rを改変(書き方が違うだけで内容は同一) コンパイル済みのStanモデルファイルを参照できるので, サンプリングだけを行えばよい場合は速い(4.4.9(p44)参照) 乱数の種。指定しておくと,乱数が再現可能
  61. 61. 4.4.7 RStanの結果の見方 • まずは,lp__を含む全パラメータが収束しているか確認  n_eff:実効的と判断されたMCMCサンプル数 - 小さいと,分布や統計量の推定が不正確になる  Rhat:Chain間の一致度の指標 - 本書では,Chain数が3以上で,全パラメータのRhat < 1.1が収束 の基準 61 デフォルトの設定
  62. 62. 4.4.7 Rstanの結果の見方 62 MCMCサンプルの分位点 分位点や小数点以下桁数は 変更可能
  63. 63. 4.4.8 収束診断をファイルへ出力する • ggmcmcパッケージを使用  収束診断に有用なグラフを自動で描いてくれる, ggplot2のラッパー 63https://cran.r-project.org/web/packages/ggmcmc/ggmcmc.pdf
  64. 64. 64 rstan-save-diagnostics.R ファイルより グラフ指定 全部出力
  65. 65. 65 描画形式ごとに関数も存在する 自分でggplotオブジェクトを 改造することも可能!!
  66. 66. bayesplotパッケージも便利 66デフォルトで,基準位置を示してくれている
  67. 67. 4.4.9 MCMCの設定の変更 • Chains, iter, warmup, thinの目安  Chains - Stan開発チームは4を推奨(デフォルト)  iter - モデルの試行錯誤段階では500~1000(デフォルトは2000) - 最終モデルが決まったら大きくする  warmup - traceplotを見て判断(デフォルトは1000)  thin - デフォルトは1 - traceplotを見て自己相関が高そうなら,thinを増やして一時的 な影響を低減させる 67
  68. 68. 68 上手く収束した場合 自己相関が高そうな場合 一時的に極端な値が生成されている http://qiita.com/kyn02666/items/a26a389aa5bfc8682186
  69. 69. 4.4.10 並列計算の実行方法 • 通常は,複数のChainを逐次的 に走らせる(右図) • Chainを並列的に走らせて, サンプリングの計算時間を短縮 69 現時点では,並列化が必要なほど複雑なモデルは 組んでいないので,説明は割愛
  70. 70. 4.4.11 ベイズ信頼区間とベイズ予測区間 • 𝑋:B社の社員の年齢(歳) • 𝑌 :年収(万円)  年収𝑌 = 基本年収𝑌𝑏𝑎𝑠𝑒 + それ以外の影響𝜀 70 基本年収のベイズ信頼区間は? 年収のベイズ予測区間は?
  71. 71. 95%ベイズ信頼区間 71 rstan-extract-MCMCsamples.Rファイル
  72. 72. N歳のときの95%ベイズ信頼区間 72 rstan-extract-MCMCsamples.Rファイル・続き 例えば50歳の時なら… ↓ 推定したパラメータを用いて予測した, 50歳時点の基本年収 ←予測した50歳時点の基本年収を 平均とする,正規分布から発生 された年収
  73. 73. ベイズ信頼区間 73 大変そうに見える…が! fig4-8.Rより
  74. 74. 74 最低限必要なコードはこれだけ
  75. 75. dplyrパッケージを使っていいなら このほうが挙動がイメージしやすいかも 75 推定した回帰式に任意のXを代入して 予測値(の分布)を求めている
  76. 76. ベイズ予測区間 76 fig4-8.Rのうち最低限必要なコードはこれだけ
  77. 77. 77 fig4-8.Rを,dplyrパッケージを 使って書き換えた場合
  78. 78. 4.4.12 transformed parametersブロック generated quantitiesブロック 78 データ𝑌の宣言 サンプリングしたいパラメータ𝜃の宣言 ※Stanにおけるパラメータの定義:確率変数すべて 𝑝 𝜃 𝑌 = 𝑝 𝑌 𝜃 𝑝 𝜃 𝑝 𝑌 ← この部分を書く 最低限必要なブロック
  79. 79. • ここまでの説明  Stan上で確率モデルのパラメータを推定  MCMCサンプルを用いて, R上で様々な計算 • この方法の問題点  Rコードが複雑になりバグが入りやすくなる  計算速度が遅い  作業全体の見通しが悪い 79 可能な限りStan上で計算させたい!!
  80. 80. • transformed parametersブロック  dataブロックおよびparameterブロックで宣言された パラメータと,定数値が使用可能  四則演算とlogなどの関数を用いて,新たにサンプリ ングする変数を作成 - 例:条件Aの平均𝜇_𝐴と,条件Bの平均𝜇_𝐵の差 • generated quantitiesブロック  上記に加え,transformed parametersブロックで宣言 されたパラメータも使用可能!  事後確率とは完全に切り離されているため,計算が 速い 80
  81. 81. 81
  82. 82. 82model4-5.stan model4-4.stan ↑ 正規分布に従う乱数を生成
  83. 83. 83 (中略) run-model4-4.R R上での計算が不要!
  84. 84. 練習問題 84
  85. 85. ねらい t検定に相当することをStanで 85
  86. 86. 準備 まずはデータフレーム形式に加工 86 ※あらかじめ作業ディレクトリを 移動しておくこと 中略
  87. 87. Exercise (1) 各グループの値に差が認められるか,おおよそ 把握するために可視化 87 • ex1.Rファイル内の模範解答がこちら • group2は,若干分布が歪んでいる • 中央値はgroup2のほうが大きい • group2のほうが,若干分散が小さそう
  88. 88. 分布が知りたいなら… 88 • やはりgroup2のほうが分散は小さそう • 平均値(十字の中心)に差がありそう  縦線はSEを表す • 両群とも大雑把には正規分布のように みえる
  89. 89. Exercise (2) 各グループで標準偏差が等しいと仮定して, モデル式を書け(Studentのt検定) • 𝑌1 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝜇1, 𝜎 𝑛 = 1, … , 𝑁1 • 𝑌2 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝜇2, 𝜎 𝑛 = 1, … , 𝑁2 89
  90. 90. Exercise (3) • Stanで(2)のモデルファイルを作成して実行せよ  ただしgenerated quantitiesブロックは使用しない 90 Rコード(ex3.R)Stanコード(ex3.stan)
  91. 91. Exercise (3) 91 だいたい一致(sdが大きいから…)
  92. 92. Exercise (4) • MCMCサンプルからR側で𝑃𝑟𝑜𝑏[𝜇1 < 𝜇2]を計算  全MCMCのなかで, 𝜇1 < 𝜇2となる割合を求める 92 どちらの方法でもよい ex4.Rより 𝜇1 < 𝜇2 𝜇1 < 𝜇2 𝜇1 < 𝜇2 𝜇1 < 𝜇2 𝜇1 < 𝜇2 𝜇1 > 𝜇2
  93. 93. 93 generated quantitiesブロックを 使用した場合は… diffが0より大きい確率を求めればいい mean(rstan::extract(fit)$diff > 0)
  94. 94. Exercise (5) 94 各グループで標準偏差が異なると仮定して, モデル式を書け(Welchのt検定) • 𝑌1 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝜇1, 𝜎1 𝑛 = 1, … , 𝑁1 • 𝑌2 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝜇2, 𝜎2 𝑛 = 1, … , 𝑁2 添え字が付いただけ!
  95. 95. 95 ← 群の数だけ𝜎を宣言する
  96. 96. 𝑃𝑟𝑜𝑏[𝜇1 < 𝜇2]を計算 • Exercise(4)と同様なので省略 96
  97. 97. おわりに 今回説明を飛ばした点:p47  MCMCサンプルが,事後分布である,𝑝(𝑎, 𝑏, 𝜎|𝑋, 𝑌) からサンプリングされたことを確認する点  つまり,𝑎, 𝑏, 𝜎の同時分布であることを確認する点 fig4-7.Rだけでなく,以下のサイトが参考になります 散布図と周辺分布をあわせて描きたい http://qiita.com/hoxo_b/items/0382ae9055838b05ad9b 97

×