SlideShare a Scribd company logo
1 of 45
StanとRでベイズ統計モデ
リング(アヒル本)
Chapter 4
NagoyaStat #7
@nishiokya
@nishiokya
 近況
先月 Tableau Conference @ Las Vegasに行ってきました
https://qiita.com/nishiokya/items/7736dc3c7add8f156940
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 時間や空間を扱うモデル
StanとRでベイズ統計モデリング
Chapter4 目次
 4.1 StanとRStanの準備
 4.2 Stanの基本的な文法
 4.3 Stanのlp__とtarget
 4.4 単回帰¶
 補足と文献案内
 練習問題
Chapter4 StanとRをはじめよう
Chapter4で習うこと
1. Stanのインストール方法や、基本的な文法を説明
2. 単回帰の例題を通して実際にRStanを用いてRからStanを実行
3. MCMCサンプルを得る
4. ベイズ信頼区間・ベイズ予測区間を計算
5. 推定結果の見方とMCMCの設定変更
今日の進め方
 4章をChapterに従い説明します
 4章で使うRStanコマンドの使い方をより詳しく説明します
 stan
 extract
 ggmcmc
 Stan fit
4.1 StanとRStanの準備
必要なもの Windows 7,8,10 Mac
R3.0.2以降 ○ ○
RStan ○ ○
RTools ○ ○
C++ Tools 不要 ○
4.2 Stanの基本的な文法
 4.2.1 ブロック構成
 4.2.2 文法の基礎
 4.2.3 コーディング規約
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のブロック一覧と最初にでてくる目次
4.2.1 ブロック構成
基本的構造
data{
観測されたデータ𝑌宣言
}
parameters{
サンプリングしたいパラメータ𝜃の宣言
}
model{
尤度𝑝(𝑌|𝜃)の記述
事前分布𝑝(𝜃)の記述
}
ブロック名 説明
data modelブロックで使う観測され
たデータを記述
RからStanに渡される
parameters 推定すべきパラメータ(確率変
数)を記述
値が決まっていない確率変数は
すべてparametersに記載する
model 尤度、事前分布の記述
事前分布が無情報の場合は省略
できる
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)とする
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での書き方の対応
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の正規分布か
ら生成せれる
-
数式の解説
4.2.3 コーディング規約
# 規約 サンプル
1 インデントする int N;
2 データを表す変数は頭は大文字 int N;
3 パラメータを表す変数の頭は小文字 real mu;
4 各ブロック間は一行開ける }
model{
5 変数名はアンダーバーでつなぐ snake_case
6 「~」や「=」の前後は1文字開ける mu ~ normal(0,100)
 アヒル本の規約
4.3 Stanのlp__とtarget
 Stanは事後確率の高いところを効率的に探索している
 事後確率を効率的に探索するために対数事後確率を偏微分した値を使う
 𝑙𝑜𝑔𝑝 𝜃 𝑌 = 𝑙𝑜𝑔𝑝 𝑌 𝜃 + 𝑙𝑜𝑔𝑝 𝜃 + 𝑐𝑜𝑛𝑠𝑡.
 MCMCステップ毎の対数事後確率(lp__)というパラメータとして内部で保持している
 𝑙𝑜𝑔𝑝 𝑌 𝜃∗
+ 𝑙𝑜𝑔𝑝 𝜃∗
 targetはlp__のエイリアス
 targetは7.8節、11章で必要になる
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のモデル式の右辺を対数化
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ブロック
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
モデリングの手順の復習(Chapter.3)
# 手順 概要
1 解析の目的 データで何を知りたいんか、何を主張したいのか
2 データの分布の確認 ヒストグラムの作成、散布図の作成、クロス集計
3 メカニズムの想像 データを生成するメカニズム、データをつなぐメカニズム
を考える
4 モデル式の記述 メカニズムをモデル式に落とし込む
5 Rでシミュレーション シミュレーションでモデル式がどのような形式か確認する
6 Stanで実装 Stanのコードを書く、パラメータの推定を実行する
7 推定結果の解釈 推定結果やベイズ信頼区間をもとに解釈したり
8 図によりモデルのチェック モデルがうまく当てはまっていそうか図でチェックする
 統計モデリングは一定の手順がある。アヒル本では以下の手順で進めます
4.4.1 解析の目的
 解析の目的は「50歳の人がB社に中途採用された場合の年収」を回答する
変数 変数 サンプル 他の呼び方
年齢 説明変数 50歳 予測変数、共変量、特徴量、独立変数
年収 応答変数 結果変数、従属変数
手順1. 解析の目的
4.4.2 データ分布の確認
メカニズムの想像
 年齢が増えると年収が直線で増え
る関係がありそうと判断できる
データの分布の確認
手順2. データの分布の確認
手順3. メカニズムの想像
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. モデル式の記述
4.4.3 モデル式の記述
モデル式
Υ[𝑛]~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝑎 + 𝑏 𝑋 𝑛 , 𝜎 𝑛 = 1,2, … , 𝑁
𝑛 = 1,2, … , 20
正規分布
平均: a
+ b X n
分散:σ
Υ 𝑛
グラフィカルモデル
パラメータ𝑎, 𝑏 , 𝜎の事前分布は無情報事前分布とする
手順4. モデル式の記述
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(改造)
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歳との時年収の信頼区間と予測区間
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で実装
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で実装
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の主な項目の説明
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(抜粋)
4.4.8 収束診断をファイルへ出力する
Trace Plotとは
 横軸にステップ数、縦軸にパラメー
タのMCMCサンプルの値をとった折
れ線グラフ
 右の図はggmcmcの出力結果
 Chain数は4
 100ステップくらいで収束している
判断項目 基準
chainの比較 4つのchainの形状が同じ
Warmup後 Warm up後のステップを繰り返
しても事後分布の形状が同じ
手順8. 図によるモデルのチェック
Trace Plotの判断項目と基準
Trace Plot図
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(抜粋)
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の主なパラメータ
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について
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オプションが推奨らしい)
4.4.10 並列計算の実行方法
stan(model_code=stancode,
data=data, ,seed=1234,cores=4,open_progress=TRUE,diagnostic_file="aaa.txt",sample_file="bbb.txt")
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. 推定結果の解釈
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 :ノイズ項も考慮した年収
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行でベイズ信頼区間とベイズ予測区間が取得できた
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側で実行したほうが良い
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クラス
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
Chapter4で使うrstanコマンド:extract
引数 説明 初期値
object stanfitクラスを指定
pars 抽出するパラメータを指定する NULL
permuted 抽出結果にMCMCサンプルを混ぜ合わせて並べ替えるか
デフォルトでは、分析ミスを防止するために混ぜ合わせているとのこ
と
TRUE
inc_warmup 抽出結果にwarmup期間のMCMCサンプルを含めるか FALSE
include Parsで指定したパラメータを抽出結果に含めるか、除外するか TRUE
Stan fitクラスからMCMCサンプルの結果をえる. P47,P51
戻り値は、名前付きリスト
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", ...)))
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: モデルに関する雑多な情報
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

More Related Content

What's hot

階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門shima o
 
pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話Classi.corp
 
心理学におけるベイズ統計の流行を整理する
心理学におけるベイズ統計の流行を整理する心理学におけるベイズ統計の流行を整理する
心理学におけるベイズ統計の流行を整理するHiroshi Shimizu
 
2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデルlogics-of-blue
 
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章nocchi_airport
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデルYohei Sato
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介Naoki Hayashi
 
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!takehikoihayashi
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布についてHiroshi Shimizu
 
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~nocchi_airport
 
ベイズ統計入門
ベイズ統計入門ベイズ統計入門
ベイズ統計入門Miyoshi Yuya
 
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)Hiroshi Shimizu
 
心理学者のためのGlmm・階層ベイズ
心理学者のためのGlmm・階層ベイズ心理学者のためのGlmm・階層ベイズ
心理学者のためのGlmm・階層ベイズHiroshi Shimizu
 
Stan勉強会資料(前編)
Stan勉強会資料(前編) Stan勉強会資料(前編)
Stan勉強会資料(前編) daiki hojo
 
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)itoyan110
 
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題joisino
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門Kawamoto_Kazuhiko
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)Takao Yamanaka
 
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~. .
 

What's hot (20)

階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門
 
pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話
 
心理学におけるベイズ統計の流行を整理する
心理学におけるベイズ統計の流行を整理する心理学におけるベイズ統計の流行を整理する
心理学におけるベイズ統計の流行を整理する
 
2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル
 
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
 
2 3.GLMの基礎
2 3.GLMの基礎2 3.GLMの基礎
2 3.GLMの基礎
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデル
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
 
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布について
 
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
 
ベイズ統計入門
ベイズ統計入門ベイズ統計入門
ベイズ統計入門
 
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
 
心理学者のためのGlmm・階層ベイズ
心理学者のためのGlmm・階層ベイズ心理学者のためのGlmm・階層ベイズ
心理学者のためのGlmm・階層ベイズ
 
Stan勉強会資料(前編)
Stan勉強会資料(前編) Stan勉強会資料(前編)
Stan勉強会資料(前編)
 
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)
 
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
 

Viewers also liked

NagoyaStat #5 データ解析のための
統計モデリング入門 第10章
NagoyaStat #5 データ解析のための
統計モデリング入門 第10章NagoyaStat #5 データ解析のための
統計モデリング入門 第10章
NagoyaStat #5 データ解析のための
統計モデリング入門 第10章nishioka1
 
Osaka.Stan #3 Chapter 5-2
Osaka.Stan #3 Chapter 5-2Osaka.Stan #3 Chapter 5-2
Osaka.Stan #3 Chapter 5-2Takayuki Goto
 
Stanでpsychophysics──階層ベイズモデルで恒常法データを分析する──【※Docswellにも同じものを上げています】
Stanでpsychophysics──階層ベイズモデルで恒常法データを分析する──【※Docswellにも同じものを上げています】Stanでpsychophysics──階層ベイズモデルで恒常法データを分析する──【※Docswellにも同じものを上げています】
Stanでpsychophysics──階層ベイズモデルで恒常法データを分析する──【※Docswellにも同じものを上げています】Hiroyuki Muto
 
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】Hiroyuki Muto
 
データ解析のための統計モデリング入門 1~2章
データ解析のための統計モデリング入門 1~2章 データ解析のための統計モデリング入門 1~2章
データ解析のための統計モデリング入門 1~2章 itoyan110
 
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデルMasashi Komori
 
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章Shushi Namba
 

Viewers also liked (8)

NagoyaStat #5 データ解析のための
統計モデリング入門 第10章
NagoyaStat #5 データ解析のための
統計モデリング入門 第10章NagoyaStat #5 データ解析のための
統計モデリング入門 第10章
NagoyaStat #5 データ解析のための
統計モデリング入門 第10章
 
Osaka.Stan #3 Chapter 5-2
Osaka.Stan #3 Chapter 5-2Osaka.Stan #3 Chapter 5-2
Osaka.Stan #3 Chapter 5-2
 
Stanでpsychophysics──階層ベイズモデルで恒常法データを分析する──【※Docswellにも同じものを上げています】
Stanでpsychophysics──階層ベイズモデルで恒常法データを分析する──【※Docswellにも同じものを上げています】Stanでpsychophysics──階層ベイズモデルで恒常法データを分析する──【※Docswellにも同じものを上げています】
Stanでpsychophysics──階層ベイズモデルで恒常法データを分析する──【※Docswellにも同じものを上げています】
 
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
 
データ解析のための統計モデリング入門 1~2章
データ解析のための統計モデリング入門 1~2章 データ解析のための統計モデリング入門 1~2章
データ解析のための統計モデリング入門 1~2章
 
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
 
Osaka.stan#2 chap5-1
Osaka.stan#2 chap5-1Osaka.stan#2 chap5-1
Osaka.stan#2 chap5-1
 
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
 

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

Model seminar shibata_100710
Model seminar shibata_100710Model seminar shibata_100710
Model seminar shibata_100710Kazuya Nishina
 
第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)Yoshitake Takebayashi
 
みどりぼん読書会 第4章
みどりぼん読書会 第4章みどりぼん読書会 第4章
みどりぼん読書会 第4章Masanori Takano
 
みどりぼん9章前半
みどりぼん9章前半みどりぼん9章前半
みどりぼん9章前半Akifumi Eguchi
 
Analyze by StatsModels or Numpy
Analyze by StatsModels or NumpyAnalyze by StatsModels or Numpy
Analyze by StatsModels or NumpyToshiki NOGUCHI
 
基本統計量について
基本統計量について基本統計量について
基本統計量についてwada, kazumi
 
統計学における相関分析と仮説検定の基本的な考え方とその実践
統計学における相関分析と仮説検定の基本的な考え方とその実践統計学における相関分析と仮説検定の基本的な考え方とその実践
統計学における相関分析と仮説検定の基本的な考え方とその実践id774
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)Wataru Shito
 
StanとRでベイズ統計モデリング 1,2章
StanとRでベイズ統計モデリング 1,2章StanとRでベイズ統計モデリング 1,2章
StanとRでベイズ統計モデリング 1,2章Miki Katsuragi
 
Survival analysis0702 2
Survival analysis0702 2Survival analysis0702 2
Survival analysis0702 2Nobuaki Oshiro
 
データ入力が終わってから分析前にすること
データ入力が終わってから分析前にすることデータ入力が終わってから分析前にすること
データ入力が終わってから分析前にすることMasaru Tokuoka
 
データ解析のための統計モデリング入門10章前半
データ解析のための統計モデリング入門10章前半データ解析のための統計モデリング入門10章前半
データ解析のための統計モデリング入門10章前半Shinya Akiba
 
ベイズ統計学の概論的紹介-old
ベイズ統計学の概論的紹介-oldベイズ統計学の概論的紹介-old
ベイズ統計学の概論的紹介-oldNaoki Hayashi
 
効果測定入門 Rによる傾向スコア解析
効果測定入門  Rによる傾向スコア解析効果測定入門  Rによる傾向スコア解析
効果測定入門 Rによる傾向スコア解析aa_aa_aa
 
幾何を使った統計のはなし
幾何を使った統計のはなし幾何を使った統計のはなし
幾何を使った統計のはなしToru Imai
 
RStanとShinyStanによるベイズ統計モデリング入門
RStanとShinyStanによるベイズ統計モデリング入門RStanとShinyStanによるベイズ統計モデリング入門
RStanとShinyStanによるベイズ統計モデリング入門Masaki Tsuda
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017wada, kazumi
 
ビジネス活用事例で学ぶデータサイエンス入門 #2
ビジネス活用事例で学ぶデータサイエンス入門 #2ビジネス活用事例で学ぶデータサイエンス入門 #2
ビジネス活用事例で学ぶデータサイエンス入門 #2you shimajiro
 

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

Model seminar shibata_100710
Model seminar shibata_100710Model seminar shibata_100710
Model seminar shibata_100710
 
第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)
 
みどりぼん読書会 第4章
みどりぼん読書会 第4章みどりぼん読書会 第4章
みどりぼん読書会 第4章
 
みどりぼん9章前半
みどりぼん9章前半みどりぼん9章前半
みどりぼん9章前半
 
Analyze by StatsModels or Numpy
Analyze by StatsModels or NumpyAnalyze by StatsModels or Numpy
Analyze by StatsModels or Numpy
 
基本統計量について
基本統計量について基本統計量について
基本統計量について
 
Tokyo r7 sem_20100724
Tokyo r7 sem_20100724Tokyo r7 sem_20100724
Tokyo r7 sem_20100724
 
統計学における相関分析と仮説検定の基本的な考え方とその実践
統計学における相関分析と仮説検定の基本的な考え方とその実践統計学における相関分析と仮説検定の基本的な考え方とその実践
統計学における相関分析と仮説検定の基本的な考え方とその実践
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
 
StanとRでベイズ統計モデリング 1,2章
StanとRでベイズ統計モデリング 1,2章StanとRでベイズ統計モデリング 1,2章
StanとRでベイズ統計モデリング 1,2章
 
Survival analysis0702 2
Survival analysis0702 2Survival analysis0702 2
Survival analysis0702 2
 
Survival analysis0702
Survival analysis0702Survival analysis0702
Survival analysis0702
 
データ入力が終わってから分析前にすること
データ入力が終わってから分析前にすることデータ入力が終わってから分析前にすること
データ入力が終わってから分析前にすること
 
データ解析のための統計モデリング入門10章前半
データ解析のための統計モデリング入門10章前半データ解析のための統計モデリング入門10章前半
データ解析のための統計モデリング入門10章前半
 
ベイズ統計学の概論的紹介-old
ベイズ統計学の概論的紹介-oldベイズ統計学の概論的紹介-old
ベイズ統計学の概論的紹介-old
 
効果測定入門 Rによる傾向スコア解析
効果測定入門  Rによる傾向スコア解析効果測定入門  Rによる傾向スコア解析
効果測定入門 Rによる傾向スコア解析
 
幾何を使った統計のはなし
幾何を使った統計のはなし幾何を使った統計のはなし
幾何を使った統計のはなし
 
RStanとShinyStanによるベイズ統計モデリング入門
RStanとShinyStanによるベイズ統計モデリング入門RStanとShinyStanによるベイズ統計モデリング入門
RStanとShinyStanによるベイズ統計モデリング入門
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
 
ビジネス活用事例で学ぶデータサイエンス入門 #2
ビジネス活用事例で学ぶデータサイエンス入門 #2ビジネス活用事例で学ぶデータサイエンス入門 #2
ビジネス活用事例で学ぶデータサイエンス入門 #2
 

More from nishioka1

情報検索の基礎 #9適合フィードバックとクエリ拡張
情報検索の基礎 #9適合フィードバックとクエリ拡張情報検索の基礎 #9適合フィードバックとクエリ拡張
情報検索の基礎 #9適合フィードバックとクエリ拡張nishioka1
 
Information retrieval no1
Information retrieval no1Information retrieval no1
Information retrieval no1nishioka1
 
情報検索の基礎 第1章 論理検索
情報検索の基礎 第1章 論理検索情報検索の基礎 第1章 論理検索
情報検索の基礎 第1章 論理検索nishioka1
 
Azure MLによるWeb Serviceの作り方
Azure MLによるWeb Serviceの作り方Azure MLによるWeb Serviceの作り方
Azure MLによるWeb Serviceの作り方nishioka1
 
Azure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPSAzure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPSnishioka1
 
小学校学区検索の説明
小学校学区検索の説明小学校学区検索の説明
小学校学区検索の説明nishioka1
 
コマンドラインで使うAzure
コマンドラインで使うAzureコマンドラインで使うAzure
コマンドラインで使うAzurenishioka1
 

More from nishioka1 (7)

情報検索の基礎 #9適合フィードバックとクエリ拡張
情報検索の基礎 #9適合フィードバックとクエリ拡張情報検索の基礎 #9適合フィードバックとクエリ拡張
情報検索の基礎 #9適合フィードバックとクエリ拡張
 
Information retrieval no1
Information retrieval no1Information retrieval no1
Information retrieval no1
 
情報検索の基礎 第1章 論理検索
情報検索の基礎 第1章 論理検索情報検索の基礎 第1章 論理検索
情報検索の基礎 第1章 論理検索
 
Azure MLによるWeb Serviceの作り方
Azure MLによるWeb Serviceの作り方Azure MLによるWeb Serviceの作り方
Azure MLによるWeb Serviceの作り方
 
Azure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPSAzure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPS
 
小学校学区検索の説明
小学校学区検索の説明小学校学区検索の説明
小学校学区検索の説明
 
コマンドラインで使うAzure
コマンドラインで使うAzureコマンドラインで使うAzure
コマンドラインで使うAzure
 

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

  • 2. @nishiokya  近況 先月 Tableau Conference @ Las Vegasに行ってきました https://qiita.com/nishiokya/items/7736dc3c7add8f156940
  • 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. StanとRでベイズ統計モデリング Chapter4 目次  4.1 StanとRStanの準備  4.2 Stanの基本的な文法  4.3 Stanのlp__とtarget  4.4 単回帰¶  補足と文献案内  練習問題
  • 5. Chapter4 StanとRをはじめよう Chapter4で習うこと 1. Stanのインストール方法や、基本的な文法を説明 2. 単回帰の例題を通して実際にRStanを用いてRからStanを実行 3. MCMCサンプルを得る 4. ベイズ信頼区間・ベイズ予測区間を計算 5. 推定結果の見方とMCMCの設定変更
  • 7. 4.1 StanとRStanの準備 必要なもの Windows 7,8,10 Mac R3.0.2以降 ○ ○ RStan ○ ○ RTools ○ ○ C++ Tools 不要 ○
  • 8. 4.2 Stanの基本的な文法  4.2.1 ブロック構成  4.2.2 文法の基礎  4.2.3 コーディング規約
  • 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. 4.2.1 ブロック構成 基本的構造 data{ 観測されたデータ𝑌宣言 } parameters{ サンプリングしたいパラメータ𝜃の宣言 } model{ 尤度𝑝(𝑌|𝜃)の記述 事前分布𝑝(𝜃)の記述 } ブロック名 説明 data modelブロックで使う観測され たデータを記述 RからStanに渡される parameters 推定すべきパラメータ(確率変 数)を記述 値が決まっていない確率変数は すべてparametersに記載する model 尤度、事前分布の記述 事前分布が無情報の場合は省略 できる
  • 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. 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. 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. 4.2.3 コーディング規約 # 規約 サンプル 1 インデントする int N; 2 データを表す変数は頭は大文字 int N; 3 パラメータを表す変数の頭は小文字 real mu; 4 各ブロック間は一行開ける } model{ 5 変数名はアンダーバーでつなぐ snake_case 6 「~」や「=」の前後は1文字開ける mu ~ normal(0,100)  アヒル本の規約
  • 15. 4.3 Stanのlp__とtarget  Stanは事後確率の高いところを効率的に探索している  事後確率を効率的に探索するために対数事後確率を偏微分した値を使う  𝑙𝑜𝑔𝑝 𝜃 𝑌 = 𝑙𝑜𝑔𝑝 𝑌 𝜃 + 𝑙𝑜𝑔𝑝 𝜃 + 𝑐𝑜𝑛𝑠𝑡.  MCMCステップ毎の対数事後確率(lp__)というパラメータとして内部で保持している  𝑙𝑜𝑔𝑝 𝑌 𝜃∗ + 𝑙𝑜𝑔𝑝 𝜃∗  targetはlp__のエイリアス  targetは7.8節、11章で必要になる
  • 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. 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. 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. モデリングの手順の復習(Chapter.3) # 手順 概要 1 解析の目的 データで何を知りたいんか、何を主張したいのか 2 データの分布の確認 ヒストグラムの作成、散布図の作成、クロス集計 3 メカニズムの想像 データを生成するメカニズム、データをつなぐメカニズム を考える 4 モデル式の記述 メカニズムをモデル式に落とし込む 5 Rでシミュレーション シミュレーションでモデル式がどのような形式か確認する 6 Stanで実装 Stanのコードを書く、パラメータの推定を実行する 7 推定結果の解釈 推定結果やベイズ信頼区間をもとに解釈したり 8 図によりモデルのチェック モデルがうまく当てはまっていそうか図でチェックする  統計モデリングは一定の手順がある。アヒル本では以下の手順で進めます
  • 20. 4.4.1 解析の目的  解析の目的は「50歳の人がB社に中途採用された場合の年収」を回答する 変数 変数 サンプル 他の呼び方 年齢 説明変数 50歳 予測変数、共変量、特徴量、独立変数 年収 応答変数 結果変数、従属変数 手順1. 解析の目的
  • 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. 4.4.3 モデル式の記述 モデル式 Υ[𝑛]~ 𝑁𝑜𝑟𝑚𝑎𝑙 𝑎 + 𝑏 𝑋 𝑛 , 𝜎 𝑛 = 1,2, … , 𝑁 𝑛 = 1,2, … , 20 正規分布 平均: a + b X n 分散:σ Υ 𝑛 グラフィカルモデル パラメータ𝑎, 𝑏 , 𝜎の事前分布は無情報事前分布とする 手順4. モデル式の記述
  • 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. 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. 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. 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. 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. 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. 4.4.8 収束診断をファイルへ出力する Trace Plotとは  横軸にステップ数、縦軸にパラメー タのMCMCサンプルの値をとった折 れ線グラフ  右の図はggmcmcの出力結果  Chain数は4  100ステップくらいで収束している 判断項目 基準 chainの比較 4つのchainの形状が同じ Warmup後 Warm up後のステップを繰り返 しても事後分布の形状が同じ 手順8. 図によるモデルのチェック Trace Plotの判断項目と基準 Trace Plot図
  • 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. 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. 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. 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オプションが推奨らしい)
  • 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. 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. 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. 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. 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. 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. Chapter4で使うrstanコマンド:extract 引数 説明 初期値 object stanfitクラスを指定 pars 抽出するパラメータを指定する NULL permuted 抽出結果にMCMCサンプルを混ぜ合わせて並べ替えるか デフォルトでは、分析ミスを防止するために混ぜ合わせているとのこ と TRUE inc_warmup 抽出結果にwarmup期間のMCMCサンプルを含めるか FALSE include Parsで指定したパラメータを抽出結果に含めるか、除外するか TRUE Stan fitクラスからMCMCサンプルの結果をえる. P47,P51 戻り値は、名前付きリスト
  • 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. 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: モデルに関する雑多な情報