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.

NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料

1.082 visualizaciones

Publicado el

NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)の発表資料

NagoyaStat#7StanとRでベイズ統計モデリング(アヒル本) Chapter 4
https://atnd.org/events/91891
2017/11/02 ヤフー名古屋オフィスで開催

NagoyaStat#7で行った発表資料です
StanとRでベイズ統計モデリング(アヒル本) のChapter 4です
http://www.kyoritsu-pub.co.jp/bookdetail/9784320112421
NagoyaStat#7のイベント商法
https://atnd.org/events/91891
NagoyaStatとは
https://www.slideshare.net/itoyan110/nagoyastat-5
2017/11/02
@ヤフー名古屋オフィス

Publicado en: Ciencias
  • Sé el primero en comentar

NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料

  1. 1. StanとRでベイズ統計モデ リング(アヒル本) Chapter 4 NagoyaStat #7 @nishiokya
  2. 2. @nishiokya  近況 先月 Tableau Conference @ Las Vegasに行ってきました https://qiita.com/nishiokya/items/7736dc3c7add8f156940
  3. 3. StanとRでベイズ統計モデリング 目次  第I部 導入編  Chapter 1 統計モデリングとStanの概要  Chapter 2 ベイズ推定の復習  Chapter 3 統計モデリングをはじめる前に  第Ⅱ部 Stan入門編  Chapter 4 StanとRStanをはじめよう  Chapter 5 基本的な回帰とモデルのチェック  第III部 発展編  Chapter 6 統計モデリングの視点から確率分布の紹介  Chapter 7 回帰分析の悩みどころ  Chapter 8 階層モデル  Chapter 9 一歩進んだ文法  Chapter 10 収束しない場合の対処法  Chapter 11 離散値をとるパラメータを使う  Chapter 12 時間や空間を扱うモデル
  4. 4. StanとRでベイズ統計モデリング Chapter4 目次  4.1 StanとRStanの準備  4.2 Stanの基本的な文法  4.3 Stanのlp__とtarget  4.4 単回帰¶  補足と文献案内  練習問題
  5. 5. Chapter4 StanとRをはじめよう Chapter4で習うこと 1. Stanのインストール方法や、基本的な文法を説明 2. 単回帰の例題を通して実際にRStanを用いてRからStanを実行 3. MCMCサンプルを得る 4. ベイズ信頼区間・ベイズ予測区間を計算 5. 推定結果の見方とMCMCの設定変更
  6. 6. 今日の進め方  4章をChapterに従い説明します  4章で使うRStanコマンドの使い方をより詳しく説明します  stan  extract  ggmcmc  Stan fit
  7. 7. 4.1 StanとRStanの準備 必要なもの Windows 7,8,10 Mac R3.0.2以降 ○ ○ RStan ○ ○ RTools ○ ○ C++ Tools 不要 ○
  8. 8. 4.2 Stanの基本的な文法  4.2.1 ブロック構成  4.2.2 文法の基礎  4.2.3 コーディング規約
  9. 9. 4.2.1 ブロック構成 順番 ブロック名 説明 基本 目次 1 function ユーザーが独自関数を定義 11.2 2 data modelブロックで使う観測されたデータを記述 ○ 4.2.1 3 transformed data Rから渡すことが困難、加工したいデータを記述 10.1.4 4 parameters 推定すべきパラメータ(確率変数)を記述 ○ 4.2.1 5 transformed parameters dataまたはparameterブロックで宣言された値から新た推 定すべき変数を作ることができる 4.12 6 model 尤度、事前分布の記述 ○ 4.2.1 7 generated quantities Dataまたはparameterまたはtransformed paramtersブロッ クで宣言された値、定数から新たにサンプリングする変数 を作る 4.12  Stanのブロック一覧と最初にでてくる目次
  10. 10. 4.2.1 ブロック構成 基本的構造 data{ 観測されたデータ𝑌宣言 } parameters{ サンプリングしたいパラメータ𝜃の宣言 } model{ 尤度𝑝(𝑌|𝜃)の記述 事前分布𝑝(𝜃)の記述 } ブロック名 説明 data modelブロックで使う観測され たデータを記述 RからStanに渡される parameters 推定すべきパラメータ(確率変 数)を記述 値が決まっていない確率変数は すべてparametersに記載する model 尤度、事前分布の記述 事前分布が無情報の場合は省略 できる
  11. 11. 4.2.2 文法の基礎 2.3節で取り上げた例で文法を説明 「標準偏差が1の正規分布から独立に得られた20個のデータの平均𝜇」 モデル式4-1 Υ 𝑛 ~𝑁𝑜𝑟𝑚𝑎𝑙 𝜇, 1 𝑛 = 1,2, … , 20 𝜇 ~ Normal(0,100) 事後分布 𝑝 𝜃 𝑌 = 𝑝 𝑌 𝜃 p(𝜃) P(Y| 𝜇)p(𝜇) 𝑛 = 1,2, … , 20 平均:𝜇 分散:1 Υ 𝑛 グラフィカルモデル パラメータ𝜇の事前分布は無情報事前分布 (平均0、分散100)とする
  12. 12. 4.2.2 文法の基礎 数式 ブロック 書き方 Υ 𝑛 ~𝑁𝑜𝑟𝑚𝑎𝑙 𝜇, 1 model for( n in 1:N){ Y[n]~ normal(mu,1); } 𝜇 ~ Normal(0,100) model mu ~ normal(0,100) 𝑛 = 1,2, … , 20 data int N; Υ 𝑛 data real Y[N]; 𝜇 parameters real mu; data{ int N; real Y[N]; } parameters { real mu; } model{ for( n in 1:N){ Y[n]~ normal(mu,1); } mu ~ normal(0,100) } Stanコード 数式とStanでの書き方の対応
  13. 13. 4.2.2 文法の基礎 記述 説明 型・他 int N 整数 プリミティブ型 real Y 連続値 プリミティブ型 real Y[N] 添え字をつけて宣言 配列 for( n in 1:N) ループ 1からNになるまでnを繰り返す - mu ~ normal(0,100) 事前分布(mu)を生成 平均0、分散100の正規分布からmu を生成する - Y[n]~ normal(mu,1); 尤度を生成 Y[n]は、平均mu、分散100の正規分布か ら生成せれる - 数式の解説
  14. 14. 4.2.3 コーディング規約 # 規約 サンプル 1 インデントする int N; 2 データを表す変数は頭は大文字 int N; 3 パラメータを表す変数の頭は小文字 real mu; 4 各ブロック間は一行開ける } model{ 5 変数名はアンダーバーでつなぐ snake_case 6 「~」や「=」の前後は1文字開ける mu ~ normal(0,100)  アヒル本の規約
  15. 15. 4.3 Stanのlp__とtarget  Stanは事後確率の高いところを効率的に探索している  事後確率を効率的に探索するために対数事後確率を偏微分した値を使う  𝑙𝑜𝑔𝑝 𝜃 𝑌 = 𝑙𝑜𝑔𝑝 𝑌 𝜃 + 𝑙𝑜𝑔𝑝 𝜃 + 𝑐𝑜𝑛𝑠𝑡.  MCMCステップ毎の対数事後確率(lp__)というパラメータとして内部で保持している  𝑙𝑜𝑔𝑝 𝑌 𝜃∗ + 𝑙𝑜𝑔𝑝 𝜃∗  targetはlp__のエイリアス  targetは7.8節、11章で必要になる
  16. 16. 4.3 Stanのlp__とtarget model{ for(n in 1:N){ Y[n] ~ normal(mu, 1); } mu ~ normal( 0, 100) } model{ for(n in 1:N)){ target += normal_lpdf(Y[n]|mu, 1); } target += normal_lpdf(mu|0, 100) }  targetを使った記法(Explict incremetal form) 簡略的コード(sampling statement form) 同じ https://www.slideshare.net/simizu706/stan-64926504  視認性が高い  速い  target記法ではないと計算できない場合がある  遅い(定義された対数確率関数すべて計算) 𝑝 𝜇 𝑌 ∝ 𝑝 𝑌 𝜇 × 𝑝 𝜃 = 𝑛=1 20 𝑁𝑜𝑟𝑚𝑎𝑙 𝑌 𝑛 𝜇, 1 × 𝑁𝑜𝑟𝑚𝑎𝑙(𝜇|0,100) 𝒏=𝟏 𝟐𝟎 𝒍𝒐𝒈𝑵𝒐𝒓𝒎𝒂𝒍 𝒀 𝒏 𝝁, 𝟏 + 𝒍𝒐𝒈𝑵𝒐𝒓𝒎𝒂𝒍(𝝁|𝟎, 𝟏𝟎𝟎) 4.2.2のモデル式 4.2.2のモデル式の右辺を対数化
  17. 17. 4.4 単回帰  4.4.1 解析の目的  4.4.2 データの分布の確認  4.4.3 モデル式の記述  4.4.4 Rのlm関数で推定  4.4.5 Stanで実装  4.4.6 Rからの実行方法  4.4.7 RStanの結果の見方  4.4.8 収束診断をファイルへ出力する  4.4.9 MCMCの設定の変更  4.4.10 並列計算の実行方法  4.4.11 ベイズ信頼区間とベイズ予測区間の算出  4.4.12 transformed parametersブロックとgenerated quantitiesブロック
  18. 18. 4.4 単回帰  架空のデータとしてB社社員のデータを扱う # 1 2 3 4 5 6 7 8 9 10 X(歳) 24 24 26 32 33 35 38 40 40 43 Y(万円) 472 403 454 575 546 781 750 601 814 792 # 11 12 13 14 15 16 17 18 19 20 X(歳) 43 44 48 52 56 56 57 58 59 59 Y(万円) 745 837 868 988 1092 1007 1233 1202 1123 1314  データ件数20件 input/data-salary.txt
  19. 19. モデリングの手順の復習(Chapter.3) # 手順 概要 1 解析の目的 データで何を知りたいんか、何を主張したいのか 2 データの分布の確認 ヒストグラムの作成、散布図の作成、クロス集計 3 メカニズムの想像 データを生成するメカニズム、データをつなぐメカニズム を考える 4 モデル式の記述 メカニズムをモデル式に落とし込む 5 Rでシミュレーション シミュレーションでモデル式がどのような形式か確認する 6 Stanで実装 Stanのコードを書く、パラメータの推定を実行する 7 推定結果の解釈 推定結果やベイズ信頼区間をもとに解釈したり 8 図によりモデルのチェック モデルがうまく当てはまっていそうか図でチェックする  統計モデリングは一定の手順がある。アヒル本では以下の手順で進めます
  20. 20. 4.4.1 解析の目的  解析の目的は「50歳の人がB社に中途採用された場合の年収」を回答する 変数 変数 サンプル 他の呼び方 年齢 説明変数 50歳 予測変数、共変量、特徴量、独立変数 年収 応答変数 結果変数、従属変数 手順1. 解析の目的
  21. 21. 4.4.2 データ分布の確認 メカニズムの想像  年齢が増えると年収が直線で増え る関係がありそうと判断できる データの分布の確認 手順2. データの分布の確認 手順3. メカニズムの想像
  22. 22. 4.4.3 モデル式の記述 モデル式 Υ 𝑛 = 𝑦𝑏𝑎𝑠𝑒 𝑛 + 𝜀 𝑛 𝑛 = 1,2, … , 𝑁 𝑦𝑏𝑎𝑠𝑒 𝑛 = 𝑎 + 𝑏 𝑋[𝑛] 𝑛 = 1,2, … , 𝑁 𝜀 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙(0, 𝜎) 𝑛 = 1,2, … , 𝑁 ybaseを消去をしたモデル式 Υ 𝑛 = 𝑎 + 𝑏 𝑋 𝑛 + 𝜀 𝑛 𝑛 = 1,2, … , 𝑁 𝜀 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙(0, 𝜎) 𝑛 = 1,2, … , 𝑁 𝜀 𝑛 を消去をしたモデル式 𝑦𝑏𝑎𝑠𝑒 𝑛 = 𝑎 + 𝑏 𝑋 𝑛 𝑛 = 1,2, … , 𝑁 Υ 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙(𝑦𝑏𝑎𝑠𝑒 𝑛 , 𝜎) 𝑛 = 1,2, … , 𝑁 ybaseと 𝜀 𝑛 を消去をしたモデル式 Υ[𝑛]~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝑎 + 𝑏 𝑋 𝑛 , 𝜎 𝑛 = 1,2, … , 𝑁 年収はデータ1人分ごとに平均𝑎 + 𝑏𝑋[𝑛] /標準偏差𝜎の正規分布から独立に生成される データ/ パラメータ 説明 𝑁 人数 Υ 𝑛 年収 𝑦𝑏𝑎𝑠𝑒 𝑛 基本年収 𝜀 𝑛 基本年収以外の影 響 ノイズ項 𝑎 直線式の切片 𝑏 直線式の傾き 𝜎 標準偏差 手順4. モデル式の記述
  23. 23. 4.4.3 モデル式の記述 モデル式 Υ[𝑛]~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝑎 + 𝑏 𝑋 𝑛 , 𝜎 𝑛 = 1,2, … , 𝑁 𝑛 = 1,2, … , 20 正規分布 平均: a + b X n 分散:σ Υ 𝑛 グラフィカルモデル パラメータ𝑎, 𝑏 , 𝜎の事前分布は無情報事前分布とする 手順4. モデル式の記述
  24. 24. 4.4.4 Rのlm関数で推定  lmの出力結果抜粋 パラメータ Estimate Std. Error t value Pr(>|t|) Intercept -119.697 68.148 -1.756 0.096 X 21.904 1.518 14.428 2.47e-11 パラメータ 結果 補足 p-value 2.466e-11 有意確率 R-square 0.9204 目的決定係数 d <- read.csv(file='input/data-salary.txt') res_lm <- lm(Y ~ X ,data=d)  lmの出力結果つづき  Rのlm関数(線形モデルのあてはめ)の実行例  あてはめ結果を散布図に追加 手順5. Rでシミュレーション P40.lm.R(改造)
  25. 25. 4.4.4 Rのlm関数で推定 X_new <- data.frame(X=50) predict(res_lm,X_new,interval='confidence',level=0.95) predict(res_lm,X_new,interval='prediction',level=0.95) 手順5. Rでシミュレーション 区間名 信頼区間 予測区間 0.025 976万円 803万円 0.5 976万円 976万円 0.975 1,021万円 1,147万円  年齢50歳との時年収の信頼区間と予測区間
  26. 26. 4.4.5 Stanで実装 data{ int N; real X[N]; real Y[N]; } parameters { real a; real b; real<lower=0> sigma; } model{ for(n in 1:N){//尤度 Y[n] ~ normal(a + b *X[n], sigma); } } ' データ/ パラメータ 説明 int N; 人数 real X[N]; 年齢 real Y[N]; 年収 real a; 直線式の切片 real b; 直線式の傾き real<lower=0> sigma; 標準偏差 下限0  model4-5.stanの説明 model4-5.stan 手順6. Stanで実装
  27. 27. 4.4.6 Rからの実行方法 d <- read.csv(file='input/data-salary.txt') data <- list(N=nrow(d), X=d$X, Y=d$Y) fit <- stan(file='model4-5.stan', data=data, seed=1234)  stanを呼び出すことで、サンプリングを実行する パラメータ 結果 file stan形式で記載されたモデルファイル data データブロックで指定された変数のリスト seed 乱数ジェンレータの種 ◆ rstanでstanファイルを実行 stanの主なパラメータ(全パラメータはappendix参照) P40. run-model4-5.R(抜粋) 手順6. Stanで実装
  28. 28. 4.4.7 RStanの結果の見方 パラーメータ mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat a -125.65 1.92 73.18 -270.62 -174.77 -126.36 -75.76 13.87 1457 1 b 22.04 0.04 1.63 18.96 20.92 22.05 23.11 25.21 1504 1 sigma 84.35 0.38 14.73 60.99 73.7 82.61 92.83 117.42 1539 1 lp__ -93.57 0.03 1.23 -96.62 -94.15 -93.27 -92.65 -92.14 1296 1 summary(fit)$summary 値 説明 mean サンプルの平均値。事後平均(Posterior Mean)とよばれる se_mean 標準誤差 「MCMCサンプルの分散をn_effで割った値のルート」 sd MCMCの標準偏差 n_eff 実効的なMCMCサンプル数(100以上が望ましい) Rhat アールハット。MCMCが収束したかを示す指標の一つ。 アヒル本では「chain数が3以上ですべてのパラメータの Rhatが1.1以下」を収束とする 手順7. 推定結果の解釈 ◆ stanのサンプリング結果のサマリの見方® summaryの主な項目の説明
  29. 29. 4.4.8 収束診断をファイルへ出力する  収束と判断した根拠はファイルに保存す る  summaryやtrace plotが根拠になる  ggmcmcパッケージでtrace plotをpdf出 力できる  Rstanにも作図関数があるが、見栄えを 良くするには手間がかかる 出力 概要 save.image ワークスペースの保存 データやサンプリング結果を保存 write.table Datafreameの保存 summary(fit)$summary を保存する ggmcmc stanfitクラスからtrace plotなどの収束診 断結果をpdfに出力できる Chapter4 における収束診断を出力するRの関数 #R write.table( data.frame(summary(fit)$summary), file='fit-summary.txt',sep=’¥t',quote=FALSE,col.names=NA) 手順8. 図によるモデルのチェック ◆ summaryのtxtファイル出力例(R) P42. rstan-save-diagnostics.R(抜粋)
  30. 30. 4.4.8 収束診断をファイルへ出力する Trace Plotとは  横軸にステップ数、縦軸にパラメー タのMCMCサンプルの値をとった折 れ線グラフ  右の図はggmcmcの出力結果  Chain数は4  100ステップくらいで収束している 判断項目 基準 chainの比較 4つのchainの形状が同じ Warmup後 Warm up後のステップを繰り返 しても事後分布の形状が同じ 手順8. 図によるモデルのチェック Trace Plotの判断項目と基準 Trace Plot図
  31. 31. 4.4.8 収束診断をファイルへ出力する #library(ggmcmc) ggmcmc( ggs(fit,inc_warmup=TRUE,stan_include_auxiliar=TRUE), file='fit-traceplot.pdf', plot='traceplot') パラメータ 概要 D シミュレーション結果の DataFreameで設定 ,ggsがstanfitをDataFreameに変換 file 出力するpdfファイル名 plot 描画の内容。描画できる内容はTrace Plot以外にもヒストグラム、密度関数、事後 平均の推移、自己相関、パラメータ間の相関行列、収束診断用スコアなどがある ggmcmcは、ggplot2 を利用したMCMCの収束を診断するためのパッケージ 手順8. 図によるモデルのチェック ggmcmcの主なパラメータ(全パラメータはappendix参照) ggmcmcによるTrace Plot出力例(R) P42. rstan-save-diagnostics.R(抜粋)
  32. 32. 4.4.9 MCMCの設定の変更 パラメータ 初期値 説明 stanmodel - Stanのモデルクラス data - データブロックで指定された変数 seed random 乱数ジェンレータの種 init NA 初期値の設定 chains 4 MCMCサンプルする回数 iter 2000 chain内のステップ数。warmupを含む warmup iter/2 モデルに依存。100-500で良い場合が多い thin 1 保存するステップの間隔 stanmodel <- stan_model(model_code=stancode) fit <- sampling( stanmodel, data=data, pars=c('b','sigma'), init = function(){ list( a=runif(1,-10,10), b=runif(1,0,10), sigma=10 ) }, seed=123, chains=3, iter=1000, warmup=200, thin=2 ) パラメータ 説明 model_code stan形式で記載されたモデルファイル ◆STEP1. stan_model:stanのモデルクラスを構築 ◆STEP2. sampling:stanのモデルクラスからサンプリングを実施 P44. rstan-modify-MCMCsettings.R stan_modelの主なパラメータ samplingの主なパラメータ
  33. 33. 4.4.9 MCMCの設定の変更 seedの値が同じでもアヒル本と同じ結果にならないことが多い、著者松浦さんに 問い合わせたところ、回答をいただきました  Stanの結果は以下のすべての要素が一致しているときにのみ厳密に再現可能と なります:  Stanのバージョン  Stanのインターフェイス(Rstan, PyStan, CmdStan) およびそのバージョン, さらにイ ンターフェイス言語(R, Python, shell)のバージョン  インクルードされたライブラリのバージョン(BoostおよびEigen)  OSのバージョン  CPU, マザーボード, メモリを含むコンピュータのハードウェア  C++コンパイラのバージョン, コンパイル時のフラグ, リンクされたライブラリ  乱数の種, チェーンのID, 初期化およびデータを含むStan呼び出し時の設定 Stanのマニュアル「64.再現性(Reproducibility)について」抜粋 https://stan-ja.github.io/gh-pages-html/#再現性reproducibilityについて
  34. 34. 4.4.10 並列計算の実行方法  Stanでは、デフォルトではChainを逐次実行しているが、並列化することもできる  並列化の設定スクリプト rstan_options(auto_write=TRUE) #モデルをコンパイルした時に自動保存する options(mc.cores=parallel::detectCores()) #並列計算 メリット デメリット 計算時間の短縮 進捗状況が確認できない エラーメッセージが確認できない  並列化のメリット・デメリット stan(model_code=stancode, data=data, ,seed=1234,cores=4)  stan関数のcoresオプションでも可能(coresオプションが推奨らしい)
  35. 35. 4.4.10 並列計算の実行方法 stan(model_code=stancode, data=data, ,seed=1234,cores=4,open_progress=TRUE,diagnostic_file="aaa.txt",sample_file="bbb.txt")
  36. 36. 4.4.11 ベイズ信頼区間とベイズ予測区間の算出 区間名 数式 Rスクリプト ベイズ信頼区間 𝑝 𝜃 Υ ms$a + ms$b * X ベイズ予測区間 𝑝 𝑦 𝑋, Υ = 𝑝 𝑦 𝜃 𝑝 𝜃 Υ ⅆ𝜃 rnorm(n=サンプル数, mean=ms$a + ms$b * X,sd=ms$sigma) 区間名 ベイズ信頼区間 ベイズ予測区間 0.025 932万円 805万円 0.5 975万円 978万円 0.975 1,021万円 1,160万円 y50_base <- ms$a + ms$b * 50 y50 <- rnorm(n=length(ms$lp__),mean=y50_base,sd=ms$sigma) d_mcmc <- data.frame(a=ms$a,b=ms$b,sigma=ms$sigma,y50_base,y50) quantile(d_mcmc$y50_base,probs=c(0.025,0.5,0.975))#ベイズ信頼区間 quantile(d_mcmc$y50,probs=c(0.025,0.5,0.975))#ベイズ予測区間  50歳の人のベイズ信頼区間とベイズ予測区間をもとめるRスクリプト P49. rstan-etract-MCMCsamples.R(改変) 手順7. 推定結果の解釈
  37. 37. 4.4.12 transformed parametersブロック とgenerated quantitiesブロック data{ int N; real X[N]; real Y[N]; int X_new; #予測したい年齢 } parameters { real a; real b; real<lower=0> sigma; } generated quantities { real y_base_new; #基本年収 real y_new; #ノイズ項も考慮した年収 y_base_new = a + b * X_new; y_new = normal_rng(y_base_new,sigma); } transformed parameters{ real y_base; for( n in 1:N){ y_base[n] = a + b*X[n]; } } model{ for(n in 1:N){ Y[n] ~ normal(y_base[n] , sigma); } }  transformed parameters とgenerated quantities を用いたstanファイル P50. model4-4.stan(改変) Rでベイズ信頼区間とベイズ予測区間を求めると、コードが複雑になりバグが発生しやすい、 またパフォーマンスが悪い Stan側でベイズ信頼区間とベイズ予測区間を求めることができる 以下のモデル式に該当 𝑦𝑏𝑎𝑠𝑒 𝑛 = 𝑎 + 𝑏 𝑋 𝑛 Υ 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙(𝑦𝑏𝑎𝑠𝑒 𝑛 , 𝜎) y_base_new:基本年収 y_new :ノイズ項も考慮した年収
  38. 38. 4.4.12 transformed parametersブロック とgenerated quantitiesブロック data<- list(N=nrow(d),X=d$X,Y=d$Y,X_new=50)#X_newに50をセット fit <- stan(model_code=stancode, data=data, seed=1234) ms<-rstan::extract(fit) quantile(ms$y_base_new,probs=c(0.025,0.5,0.975)) quantile(ms$y_new,probs=c(0.025,0.5,0.975)) 区間名 R ベイズ信頼区間 Stan ベイズ信頼区間 R ベイズ予測区間 Stan ベイズ予測区間 0.025 932万円 931万円 805万円 806万円 0.5 975万円 976万円 978万円 976万円 0.975 1,021万円 1,022万円 1,160万円 1,158万円 50歳の人のベイズ信頼区間とベイズ予測区間をもとめるStan / RStan P51. run-model4-4.R(改変) generated quantities を用いることで2行でベイズ信頼区間とベイズ予測区間が取得できた
  39. 39. 4章まとめ 手順 今回の内容 解析の目的 「50歳の人がB社に中途採用された場合の年収」を 回答する データの分布の確認 散布図を描いた メカニズムの想像 年齢が増えると年収が直線で増える モデル式の記述 Υ 𝑛 ~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝑎 + 𝑏 𝑋 𝑛 , 𝜎 n = 1,…,N Rでシミュレーション lm(Y~X,data=d) Stanで実装 Chain数は3以上、step数は1,000以上 推定結果の解釈 n_effが100以上か、Rhatが1.1未満かなどを確認 図によりモデルのチェック Trace plotで収束しているかを確認  50歳の人がB社に入ると年収は976万円になる可能性が一番多い  97.5%以上の確率で806万円貰える  ベイズ信頼区間、ベイズ予測区間はstan側で実行したほうが良い
  40. 40. Chapter4で使うrstanコマンド:stan 引数 初期値 file stan形式で記載されたモデルファイルを指定 model_name モデルを表す文字名を指定 anon_model model_code stan形式で記載されたモデル文字列を指定 NA fit Stan Fitファイルを指定。コンパイルされたモデルで実行するため高速 NA data データブロックで指定された変数のリストを指定 pars サンプリング結果を出力するパラメータを指定 NA chains chainのステップ数を指定 4 iter iterのステップ数を指定 2000 warmup warmupのステップ数を指定 Iter/2 seed 乱数ジェンレータの種を指定 random StanでMCMCする 戻り値は、Stan Fitクラス
  41. 41. Chapter4で使うrstanコマンド:stan つづき 引数 説明 初期値 thin サンプリングを出力する頻度 1 init パラメータの初期値。デフォルトでは-2と2の間のランダムに生成 random algorithm アルゴリズムを指定.NUTS,HMC,Fixed_param NUTS sample_file sampleおよびquantileを出力する場合のファイル名を指定 NA diagnostic_file 診断を出力する場合のファイル名を指定 NA save_dso モデルをOSの共有メモリに保存するかを指定。次回高速に実行される TRUE verbose デバッグ用のメッセージを出力するかを指定 FALSE control サンプラーが制御するパラメータのリストを指定。 NULL include parsで指定したパラメータを含むか含まないかを指定 TRUE cores Chainを並列実行する時のコア数を指定。chain数まであげることができる 1 open_progress coresが1以上の場合にchainの進捗をファイルにリダイレクトするかを指定 TRUE? boost_lib ベクトル演算ライブラリBoostのパスを指定(変更したい場合) NA eigen_lib ベクトル演算ライブラリEigenのパスを指定(変更したい場合) NA
  42. 42. Chapter4で使うrstanコマンド:extract 引数 説明 初期値 object stanfitクラスを指定 pars 抽出するパラメータを指定する NULL permuted 抽出結果にMCMCサンプルを混ぜ合わせて並べ替えるか デフォルトでは、分析ミスを防止するために混ぜ合わせているとのこ と TRUE inc_warmup 抽出結果にwarmup期間のMCMCサンプルを含めるか FALSE include Parsで指定したパラメータを抽出結果に含めるか、除外するか TRUE Stan fitクラスからMCMCサンプルの結果をえる. P47,P51 戻り値は、名前付きリスト
  43. 43. Chapter4で使うrstanコマンド:ggmcmc 引数 説明 初期値 D シミュレーション結果の DataFreameを指定,ggsがstanfitを DataFreameに変換 file 出力するpdfファイル名を指定 plot 描画の内容を指定。描画できる内容はTrace Plot以外にもヒストグラム、 密度関数、事後平均の推移、自己相関、パラメータ間の相関行列、収 束診断用スコアなどがある family ファミリーとするパラメータを正規表現で指定する NULL param_page 1ページで表示するパラメータ数 5 width PDFの横幅を指定 7 height PDFの縦幅を指定 10 simplify_traceplot 時系列でイテレーションするパーセントを指定 dev_type_html HTML出力する出力タイプを指定 png MCMC(ハァハァ)した結果をplotする ggmcmc(D, file = "ggmcmc-output.pdf", family = NA, plot = NULL, param_page = 5, width = 7, height = 10, simplify_traceplot = NULL, dev_type_html = "png", ...)))
  44. 44. Chapter4で使うrstanのオブジェク ト:stanfit(S4 class) slot 説明 model_name モデル名 model_pars パラメータの名前が入った文字ベクトル per_dims すべてのパラメータの次元つき名前つきリスト mode Fitting modelの結果の整数(0:サンプリング、1:test gradient 、2:error) 0のとき他の有効 sim メタデータを含むシミュレーション結果のリスト inits chain毎のパラメータの初期値のリスト stan_args chain毎の引数のリスト stanmodel Stanmodelのインスタンス(S4 class) date Objectが作成された日時 .MISC: モデルに関する雑多な情報
  45. 45. Chapter4で使うrstanコマン ド:rstan_options 引数 plot_rhat_cols plot_rhat_breaks plot_rhat_nan_col plot_rhat_large_col rstan_alert_col rstan_chain_cols rstan_warmup_bg_col boost_lib auto_write

×