Lorem Ipsum Dolor 
第9章「GLMのベイズモデル化と 
事後分布の推定」後半 
@「データ解析のための統計モデリング入門」読書会
お前だれよ 
❖ twitter:wwacky! 
! 
❖ 次回の会場係です! 
❖ 11月にサンフランシスコ行ってきます(仕事です)! 
❖ 普段はMac。Windowsは8しか持ってない(伏線)! 
! 
❖ 丸の内でデータ分析してます! 
❖ JOINしてくれる人。募集してます(マジで)
お品書き 
❖ MCMCサンプルで事後分布推定! 
❖ 複数パラメータのMCMCサンプリング! 
の2本立てです! 
! 
! 
! 
内容的には、ほとんどツール(WinBUGS)の説明
お断り 
❖ WinBUGSインストール出来ませんでしたー!!!! 
XPモードとかも 
試したがダメ。! 
WindowsMeで 
育った俺も匙投げ 
ました。
❖ 代わりにStanでやりました(流行ってるっぽいから)! 
! 
❖ 他の選択肢だとJAGSは割と好き! 
❖ OpenBUGSは前使った時に微妙だったから嫌い
9.5 
MCMCサンプルから事後分布推定
9.4までの推定をStanで実施 
Stanのコード(poisson_reg.stanで保存) Rのコード 
// 入力データ宣言! 
data {! 
! int<lower=0> N;! 
! real x[N];! 
! int y[N];! 
! real xmean;! 
}! 
! 
// パラメータの定義! 
parameters {! 
! real beta1;! 
! real beta2;! 
}! 
! 
//モデルの定義! 
model {! 
! beta1 ~ normal(0, 1000);! 
! beta2 ~ normal(0, 1000);! 
! for (i in 1:N)! 
! ! y[i] ~ poisson(exp(beta1 + beta2 * (x[i] - xmean)));! 
} 
#初回のみインストール! 
Sys.setenv(MAKEFLAGS = “-j4")! 
source('http://mc-stan.org/rstan/install.R', echo = TRUE, 
max.deparse.length = 2000)! 
install_rstan()! 
! 
#ライブラリ読み込み! 
library(rstan)! 
#データ読み込み! 
load(“/path/to/kubobook2012/chapter09/d.RData”)! 
#データを配列に変換しておく! 
d.list = list(! 
x = d$x,! 
y = d$y,! 
xmean = mean(d$x),! 
N = nrow(d)! 
)! 
# MCMCサンプリング! 
result.stan = stan(file="poisson_reg.stan", data=d.list, 
iter=1600, chains=3, warmup=100, thin=3)
9.4までの推定をStanで実施 
❖ こんなかんじで動く
サンプリング結果を可視化 
#codaを使ってプロット! 
library(coda)! 
result.coda = mcmc.list(lapply(1:ncol(result.stan),function(x) mcmc(as.array(result.stan)[,x,])))! 
plot(result.coda) 
lp__は対数尤度のプロット
で、どう見ればいいの?
サンプリング結果を可視化 
#codaを使ってプロット! 
library(coda)! 
result.coda = mcmc.list(lapply(1:ncol(result.stan),function(x) mcmc(as.array(result.stan)[,x,])))! 
plot(result.coda) 
❖ 3試行実施しているので、3色に 
分かれてプロットされる! 
❖ 試行回数間で比較しても、ほぼ 
サンプルの分布は一致している 
ので安定してそう 
lp__は対数尤度のプロット
サンプリング結果を可視化 
#codaを使ってプロット! 
library(coda)! 
result.coda = mcmc.list(lapply(1:ncol(result.stan),function(x) mcmc(as.array(result.stan)[,x,])))! 
plot(result.coda) 
lp__は対数尤度のプロット 
❖ β1とβ2の周辺事後分布p(β1|Y), p(β1|Y)! 
❖ サンプリングした値を使ってカー 
ネル密度推定した結果がプロット 
される! 
! 
周辺事後分布は、もう片方のパラメー 
タで周辺化してある!
サンプリング値 
❖ いろいろやりたい時は、サンプ 
ル値を取り出して使えばおk 
# 実行結果からサンプルを取り出し! 
post = extract (result.stan, permuted = F)! 
! 
#データフレームに変換! 
post.m = melt (post)
(周辺)事後分布の統計量 
❖ MCMCの結果を確認してみる 
n_eff : the effective sample size! 
se_mean : the standard error of the mean
(周辺)事後分布の統計量 
とりあえず、推定結果を見るだけなら! 
! 
β1=1.98 β2=0.09
他に何が分かるのか? 
❖ 試行毎のばらつき! 
❖  でサンプル列間の収束を確認する! 
❖ だいたい が1.0に近ければ収束できてる! 
❖ 1.1超えてるとヤバイ(9章前半参照)
他に何が分かるのか? 
❖ 信頼区間(e.g. 95%信頼区間)! 
❖ β1の95%信頼区間は1.81~2.13。β2は-0.05~0.22! 
❖ 即ち「β1の値は95%の事後確率で1.81~2.13になる」と 
解釈できる! 
!
信頼区間の解釈 
推定値が0から離れているかどうか! 
! β2の95%信頼区間が-0.05~0.22! 
! →信頼区間が0を挟んでいるので、0から離れているとは 
いえない! 
! 
こういう解釈に使ったこと無いんだけど、やってる人って多 
いのか?(一般的な手法なのか誰か知ってる?)
9.6 
複数パラメーターのMCMCサンプリング
複数パラメータのサンプリング 
❖ パラメータが複数存在する場合は、1パラメータずつサ 
ンプリングすればおk 
β1 
β2 
初期値step1 step2 step3 ・・・ 
β1,0 
β2,0 
β2,0を定数として! 
β1,1サンプリング 
β1,1を定数として! 
β2,1サンプリング 
β2,1を定数として! 
β1,2サンプリング 
β1,2を定数として! 
β2,2サンプリング 
β2,2を定数として! 
β1,3サンプリング 
β1,3を定数として! 
β2,3サンプリング 
サンプリングの順序(β1とβ2のどっちからやるか)はどっちでもいい。! 
定常分布であれば、部分的なサンプリングも許されている! 
(逆に言うと、定常でない場合には影響があるので、試行毎の違いはチェックした方がいい)
ギブスサンプリング 
❖ メトロポリス法(8章で出てきたやつ)! 
❖ 新しい値の候補を乱数で作り、それに変化するかどうかを決める! 
❖ 更新は尤度が上がる場合か、尤度が上がらなくても一定確率で行う! 
! 
❖ ギブスサンプリング! 
❖ 新しい値の確率分布を作り、その確率分布のランダムサンプルを新しい値とする! 
! 
❖ ギブスサンプリングは、こんなメリットが・・・! 
❖ MCMCステップで、「元の値」と「更新された値」の相関が比較的小さい! 
❖ 事前共役分布の場合に、事後分布のサンプリングが簡単
ギブスサンプリング 
❖ 今回のポアソン分布に従うモデル式の場合のギブスサンプリング 
①初期値をβ1=0, β2=0とする! 
! 
②β2=0を定数として、β1をサンプリングするための確率分布(全条件付確率)を作成する! 
! 
! 
λyi 
λi) 
! 
p(β1|Y,β2 = 0.0) ∝ 
i exp(−p(β1) 
yi! 
! 
i 
③p(β1|Y, β2=0.0)からβ1をサンプリングする(β1=2.052がサンプリングされたとする)! 
④β1=2.052を定数として、β2をサンプリングするための確率分布(全条件付確率)を作成する! 
! 
! 
! 
⑤p(β2|Y, β1=2.052)からβ2をサンプリング! 
! 
⑥β1とβ2を更新しながら②~⑤を繰り返す 
サンプリング1step分 
尤度✕事前分布からβ2を消しただけ
共役事前分布 
❖ ギブスサンプリングは、事前分布が尤度の持つ確率分布 
と共役の確率分布だと、計算速度が早くなる 
事後分布  ∝     尤度   ✕   事前分布 
ガンマ分布! 
ポアソン分布! 
ガンマ分布! 
ベータ分布! 
二項分布! 
ベータ分布! 
ディリクレ分布 
多項分布 
ディリクレ分布 
事前分布が尤度のパラメータと共役関係だと、事後分布の 
確率分布が決まるので、事後分布のサンプリングが楽
共役事前分布 
みどり本9章では事前分布が正規分布なので共役関係では 
ないが、事前分布がガンマ分布で共役関係だと以下の通り 
事後分布  ∝     尤度   ✕   事前分布 
平均λの! 
ポアソン分布 
パラメータα,βの! 
ガンマ分布 
証明書こうとしたが、LaTexiTが使いづらくて諦めた。すまん! 
パラメータα',β'の! 
ガンマ分布
共役分布って使ったほうがいいの? 
❖ 事後分布が確率分布に従っていると、演算が楽になる! 
→計算速度が上がる! 
! 
❖ かと言って、推定にかけれる時間とのトレードオフで使 
うかどうか考えれば良い! 
❖ モデルの分かりやすさを優先とかでも時間が許せば 
OK
発表後追記 
❖ 会場の方から伺ったのですが、Stanはギブスサンプリン 
グ使ってないらしいです(HMC – Hamiltonian Monte 
Carloらしい)

データ解析のための統計モデリング入門9章後半