統計モデリング 第六回...
Transcript of 統計モデリング 第六回...
2017年5月23日@統計モデリング
担当:田中冬彦
統計モデリング 第六回 配布資料
文献: a) C. P. Robert and G. Casella: Monte Carlo Statistical Methods. 2nd ed., Springer, 2004.
配布資料の一部は以下からもDLできます. 短縮URL http://tinyurl.com/lxb7kb8
b) C. P. Robert and G. Casella: Introducing Monte Carlo Methods with R. Springer, 2010.
c) J. Albert: Bayesian Computation with R. 2nd ed. Springer, 2009
b,c は日本語訳 (ともに石田基広, 石田和枝訳, 丸善出版) あり
講義後, 修正あり!
理解度チェック:ベイズファクター 前回の講義内容に沿って〇か×をつけてください
ベイズファクターは定義から必ず1以上になる(数学的に示せる)
スポーツ関係のデータなど, 大量の情報が分析に使える場合, それらをすべて加味した統計モデルを最初に構築すべきである。
ベイズ統計でも, 通常の統計(頻度論的な統計)と同様にパラメータの推定や仮説検定などができる.
ベイズファクターでは3つ以上の統計モデルの比較も可能である.
尤度関数はデータが与えられた下でのパラメータの関数である.
今日の内容
1.導入 2.モンテカルロ法 3.マルコフ連鎖 4.定常分布 5.マルコフ連鎖モンテカルロ法 ~Metropolis-Hastings Method 6.マルコフ連鎖モンテカルロ法 ~Gibbs Sampler 7.WinBUGS
1. 導入
の関数形が簡単な形 )|( xθπ
事後分布に関する計算
これまで(第4回、第5回)
1次元のパラメータ θ
がんばれば手計算できるレベルだった・・・
次回以降 (第8回、第9回)
の関数形が簡単でない形 )|( xθπ 多次元のパラメータ θ
簡単な例でも実際のベイズ分析では計算機の使用が必須になる!
今日の題材
モンテカルロ法 (ベイズに限らず)乱数を利用して積分や最大値の探索などを行う数値手法全般
本講義でのMCMC法の位置づけ ・ベイズ分析ツールにある程度MCMC法が組み込まれているため(実装は目標とせず), 今回限り動作原理を紹介
・グループタスクとして必要に応じて, MCMC法を実装できると望ましい【主に 統計研究室の学生】
マルコフ連鎖モンテカルロ法(MCMC法) 乱数の生成にマルコフ連鎖を利用, ベイズ分析では必須
2. モンテカルロ法
モンテカルロサンプリング
条件 任意の初期値 からスタートして, の時に, そのヒストグラムがある特定の確率分布(ターゲット分布) に近づいていく.
モンテカルロサンプリング
一般に乱数を利用して, を以下を満たすように順次
生成する方法(簡単のため, 1次元として説明).
,,,, )()2()1( Mθθθ
∞→M)0(θ
実際のM 個の値 を(サイズMの)モンテカルロサンプル
(MCサンプル)という
)()2()1( ,,, Mθθθ
)(θp
モンテカルロサンプル (MCサンプル)
(理論上は からのIIDサンプル【後述】で十分だが, 応用上, 問題あり) )(θp
モンテカルロサンプルの重要性
-3 -2 -1 0 1 2
0.0
0.1
0.2
0.3
0.4
posterior distribution
theta
dist
ribut
ion
sample histogram
x
Freq
uenc
y
-2 -1 0 1 2
05
1015
∞→M
)()2()1( ,,, Mθθθ のヒストグラム ターゲット分布
(定義から) モンテカルロサンプルは, 十分 M を大きくとれば、
ターゲット分布の良い近似を与える. (多次元の分布でも同様)
要点
このことから、ターゲット分布の積分の近似計算が可能になる
モンテカルロサンプルを用いた積分の近似
モンテカルロサンプルを利用して積分の近似値を求める方法
)()2()1( ,,, Mθθθ
)|( xθπ
モンテカルロサンプル(MCサンプル)
モンテカルロ積分
モンテカルロ積分の例
(一般には高次元の積分で使うが, 説明のため1次元積分ですべて考える)
∑=
≈M
j
j
M 1
)(1 θ
]|[d)|( xEx θθθπθ =∫← MCサンプルの単純平均
ターゲット分布
histogram of x
x_norm
Den
sity
-4 -2 0 2 4
0.0
0.1
0.2
0.3
モンテカルロ積分の実装例
)()2()1( ,,, Mθθθ
Rの組み込み関数からIIDで発生 (M=10^6; 5ケタで表示)
-1.1788 0.8820 1.1108 -1.9134 0.1768
1.1042 -1.2245 1.0239 1.0574 -1.5943
.............
set.seed(61250); Nsim <- 10^6; x_norm <- rnorm(Nsim); print(mean(x_norm)); print(var(x_norm)); hist(x_norm, freq=F, breaks=20, xlim=c(-5,5), main="histogram of x", col=2); curve(dnorm(x), add=T);
実行結果; [1] -0.001283968 [1] 0.9992965
← 理論値は 0 ← 理論値は 1 0.1 % 程度の誤差
ターゲット分布: )1,0(~ NθMCサンプル:
][],[ 2θθ EE の近似値を計算
)|( xθπ )}|(,),|(),|(max{ )()2()1( xxx Mθπθπθπ の最大値 (xは固定)
考えてみよう
∫1
8.0d)|( θθπ x 0.8 から1の間に入る の数
M
)( jθ
問: 十分な数のMCサンプルがあれば, 事後分布に関する様々な量が簡単な近似計算で求められる. 以下の積分, 最大値はMCサンプル
を用いてどのように求めればよいか 【モンテカルロ法】
(a)
(b)
(c)
∑=
M
j
j
M 1
2)( )(1 θ≈∫ θθπθ d)|(2 x
≈
≈
)()2()1( ,,, Mθθθ
理想的なサンプリング
計算機上で, ターゲット分布 から毎回、独立に乱数を生成できるとする
)(~,,,...
)()2()1( θθθθ pdii
M
このとき, をIIDサンプルとよび最良の MCサンプル )()2()1( ,,, Mθθθ
1.1次元、もしくは多次元の有名な確率分布はIIDサンプルを効率よく生成できる.
2.1次元,2次元の場合は、変数変換と逆関数法(1次元)、棄却法などで、あらゆる確率分布でIIDサンプルを効率よく生成できる.
IIDサンプル利用の目安
)(θp
IIDサンプル
3.1, 2以外の場合は効率が悪いかも・・・・
ベイズ統計の難点 ターゲット分布
本当に欲しいもの (IIDサンプル)
サンプリング 効率悪すぎ・・・・
)|(~,,,...
)()2()1( xdii
M θπθθθ
(関数形が簡単な形でない;有名なタイプではない・・・) )|( xθπ← 高次元のパラメータ θ
計算機を利用しても事後分布のIIDサンプルは効率が悪すぎる!!
3. マルコフ連鎖
マルコフ核
以下を満たす条件付き分布の族をマルコフ核 (Markov kernel)という.
X: (簡単のため)有限集合
XyXx ∈∀∈∀ ,
1)|( =∑∈Xx
yxK
,0)|( ≥yxKXy∈∀
== ][ |yxKK
x
5/410/105/15/410/3
010/110/7y
マルコフ核の例: 行列として表示 y=3 の時の条件付き分布 { }3,2,1=X
マルコフ核の性質
マルコフ核はX 上の確率分布 (確率ベクトル)を確率分布に写す
∑∈
=Xy
ypyxKxp )()|()(~
1)( =∑∈Xx
xp
Kpp =~
=
)2()1(
pp
pXxxp ∈∀≥ ,0)(
以下の計算で, 新しい確率分布(確率ベクトル)が生じる
行列とベクトルの表記を用いると
練習してみよう 問:とうけい村の毎日の天気は, 以下のルールで確率的に定まるものとする.
== ][ |yxKK
5/410/105/15/410/3
010/110/7晴
ある日の天気がy の時, 翌日の天気がx になる(条件付き)確率は
1. 今日は「くもり」とする。明日、晴れる確率は?
),|( yxK
くもり 雨
晴
くもり
雨
ルール
2*.今日は「晴れ」とする。2日後、雨の確率は?
101
翌日の天気
となる.
1003
101
103
=×
マルコフ連鎖
初期値を としてマルコフ核から次のように乱数(確率変数)の列が得られる
(その意味で をマルコフ連鎖とよぶことも)
Xx ∈0
,,,, 21 txxxこのように生成する確率変数の列がマルコフ連鎖 (Markov Chain)
)|(~| 11 tttt xxKxx ++
XyxyxK ∈,)}|({
XyxyxK ∈,)}|({ X上のマルコフ核
マルコフ連鎖
例:1次元ランダムウオーク 簡単のため 1次元の座標を格子点にとる
00 =xtx
1次元格子点上のランダムウオーク ルール 1. 時刻 t=0 に原点からスタート 2. 各時刻(t=1,2,3,...)ごとに、1/2 の確率で右に、1/2の確率で左に1ステップ進む。 3. 各時刻ごとの位置(座標)を記録する
時刻 t (=0,1,2,3,...)での座標を とする.
,,,, 21 txxx
{ },2,1,0 ±±=X
(確率変数の列!)が マルコフ連鎖
1/2 1/2
例:1次元ランダムウオーク 簡単のため 1次元の座標を格子点にとる
マルコフ核による表現 ルール2を数式で表現(翻訳)する
21)|1( 1 ==+=+ jxjxK tt
0)|( 1 ===+ jxlxK tt
21)|1( 1 ==−=+ jxjxK tt
1±≠ jl の時
1/2 1/2
例:1次元ランダムウオーク
1/2
1/2
tx
0 200 400 600 800 1000
-30
-20
-10
010
2030
Random Walk
1:Nsim
x
time
例:1次元山登りウオーク
概略: 各時刻ごとに、以下の確率で右または左に1ステップ進む。
-30 -20 -10 0 10 20 30
02
46
810
Mountain
x
Prob
.
p(x)
)1()1()1(−++
+jpjp
jp==+=+ )|1( 1 jxjxK tt==−=+ )|1( 1 jxjxK tt )1()1(
)1(−++
−jpjp
jp
考えてみよう p(x)
-30 -20 -10 0 10 20 30
02
46
810
Mountain
x
Prob
.
問: 次のステップ、 確率が高いのはどっち?
左に移動(山を登る) ・ 右に移動(山をくだる)
0 2000 4000 6000 8000 10000
-20
-10
010
20
Get-Higher Walk
time
x
例:1次元山登りウオーク
tx
最初のランダムウオークよりも. 原点(山の頂上)付近をうろうろしている!
0 200 400 600 800 1000
-30
-20
-10
010
2030
Random Walk
1:Nsim
x
例:1次元山登りウオーク
(山の曲線 p(x) と似た形になっている・・・)
実際のデータ値 (1ずつ変化!) x1 =-1 x2 =-2 x3 =-1 x4 =0 ..... x9998 =12 x9999 =13 x10000=12
histogram of x
x
Den
sity
-30 -20 -10 0 10 20 30
0.00
0.01
0.02
0.03
0.04
0.05
p(x)
各時刻ごとの位置 を標本とみなしてヒストグラムを作成 ,,,, 21 txxx
ここまでのまとめ
数学的にはマルコフ核で表現
,,,, 21 txxx
XyxyxK ∈,)}|({今いる場所 ( ) に応じて, 次の場所 を適当な確率で選んで移動
各時刻 t ごとの場所(座標)
tx 1+tx
マルコフ連鎖(アルゴリズムとして表現)
1次元山登りウオーク
独立同一(IID)にある分布から発生 ・ そうではない
,,,, 21 txxx
マルコフ核に従って発生 ・ そうではない
山の標高に相当する正の関数 が与えられている. )(xp
ヒストグラム → なんらかの確率分布の形にみえる!
4. 定常分布
定常分布
,,,, 21 txxxのヒストグラムは
この確率分布を
∞→t
マルコフ連鎖の性質
定常分布 という.
マルコフ連鎖から発生させたデータ
で, ある確率分布 に近づく
-3 -2 -1 0 1 2
0.0
0.1
0.2
0.3
0.4
posterior distribution
theta
dist
ribut
ion
sample histogram
x
Freq
uenc
y
-2 -1 0 1 2
05
1015
∞→t
のヒストグラム の関数形 ,,,, 21 txxx )(xp∞
)(xp∞
例:1次元山登りウオーク ,,,, 21 txxxマルコフ連鎖から発生させたデータ
1回1回のシミュレーションで発生する経路(サンプルパス)は異なるが・・・
0 2000 6000 10000
-20
-10
010
20Get-Higher Walk
time
x
0 2000 6000 10000
-20
-10
010
20
Get-Higher Walk
time
x
0 2000 6000 10000
-20
-10
010
20
Get-Higher Walk
time
x
0 2000 6000 10000
-20
-10
010
20Get-Higher Walk
time
x
例:1次元山登りウオーク ,,,, 21 txxxマルコフ連鎖から発生させたデータ
ヒストグラムを作ってみると同じ形状(→ 定常分布に近づいている風) histogram of x
x_path
Den
sity
-30 -10 0 10 20 30
0.00
0.02
0.04
0.06
histogram of x
x_path
Den
sity
-30 -10 0 10 20 30
0.00
0.02
0.04
0.06
histogram of x
x_path
Den
sity
-30 -10 0 10 20 30
0.00
0.02
0.04
0.06
histogram of x
x_path
Den
sity
-30 -10 0 10 20 30
0.00
0.02
0.04
0.06
定常分布の数学的な定義
以下を満たす確率分布を定常分布という
XxxpypyxKXy
∈∀=∑∈
),()()|(
XyxyxK ∈,)}|({ X上のマルコフ核
XxxpdyypyxK ∈∀=∫ ),()()|(1.連続値の場合
定常分布をもたないマルコフ核や複数存在することもある. しかし, この後は唯一存在すると仮定して話を進める.
補足
2.定常分布の存在
計算してみよう 問*: 3つの状態を遷移するマルコフ核K が以下の行列で与えられている.
(a) 行列K、ベクトルα について, Kα を求めてみよ.
=
5/410/105/15/410/3
010/110/7K
=
362
α
また, なんとな~く, ベクトルα を右に与えておく.
本日のラッキーナンバー
は2,6,3 であります!
αα =
=
362
K
*(文系学部出身などで) 3×3の行列を習ってない場合は, やらなくてよい.
計算してみよう
,pKp =(b) 以下を満たす確率ベクトル p を求めよ. (これが定常分布!)
(c) (状態数有限の)マルコフ連鎖(マルコフ核K)が与えられたときに、
定常分布を求める問題は, 線形代数のどのような問題に対応しているか.
むむ!! これは難しい線形代数の問題であります!
=
)3()2()1(
ppp
p
=
11/311/611/2
p0)3(),2(),1(
,1)3()2()1(≥=++
pppppp
固有値問題(固有値1をもつ固有ベクトルを求める問題)
MCMC法の核心
,,,, 21 txxxのヒストグラムは ∞→t
マルコフ連鎖の性質
は定常分布 からの
マルコフ連鎖から発生させたデータ
で, 定常分布 に近づく )(xp∞
,,,, 21 txxx )(xp∞
モンテカルロサンプル (これを用いて積分計算できる).
マルコフ連鎖によるモンテカルロサンプルの生成方法
)(xq モンテカルロサンプルを生成したい確率分布(=ターゲット分布)
を 定常分布 にもつような )(xqマルコフ核(マルコフ連鎖) を構成すればよい
ヒントらしき補足の話
行列 K が与えられたとき, 以下を満たす固有ベクトル を求める.
行列 K を求める.
応用での問題
数学 (線形代数)の問題
ppK =
ベクトル が先に与えられて, これを固有ベクトルにもつような p
p
*文系の方や, ヒントとしての意味合いがつかめてない方は、統計研究室の学生に後で聞いてください.
この後紹介するアルゴリズム
代表的な2つ - MH法 (Metropolis-Hastings Method) - Gibbs Sampler (Gibbs Sampling)
マルコフ連鎖を利用したモンテカルロサンプル (MCMCサンプル)を生成する方法
MCMC (Markov Chain Monte Carlo)法
理解してほしいこと 1. ターゲット分布 (事後分布)のモンテカルロサンプルをどのように 出力するか【だいたいの流れ】 2. IIDサンプルとの違い (どこらへんがマルコフ連鎖??) 3. その他、特徴やポイント
4.【統計研究室のみ】 収束証明の論理
5. マルコフ連鎖モンテカルロ法 ~ Metropolis-Hastings Method
MH法のアルゴリズム (1/2)
2.
(a) 行き先候補を確率的に選ぶ
tz 1+tz
)|(~ tprop zzqz
にいるとして, 次の行き先 を以下の手順で定める.
(b) 本当に移動するか踏みとどまるかある方法で決める
: 提案分布 (自由に設定)
移動する場合: propt zz =+1
とどまる場合: tt zz =+1
)|( yzq
を定常分布(事後分布)からの Mzzz ,,, 21
補足: 実際には前半のサンプルは初期値依存性が強いため捨てる(M/2 程度).
モンテカルロサンプルとする
3.
(MCMCサンプルともよぶ.)
1. 初期値 を適当に定める. 1z
MH法の実装例
ターゲット分布 プログラム例
set.seed(1234); a <- 2.7; b <- 6.3; c <- 2.669; Nsim <- 5000; X <- rep(runif(1), Nsim); for (i in 2:Nsim){ Y <- runif(1); rho <- dbeta(Y, a, b)/dbeta(X[i-1], a, b) ; X[i] <- X[i-1] + (Y - X[i-1] )* (runif(1) < rho); }
> round(X, 4) [1] 0.5529 0.5513 0.5513 0.5513 0.3947 0.3947 0.1566 0.5105 0.3486 0.3486 [11] 0.3486 0.3993 0.3993 0.3993 0.3742 0.2580 0.2580 0.2580 0.2580 0.2580 ........
モンテカルロサンプル
踏みとどまったため, 同じ値が連続して出現!
)3.6,7.2(~ BetaX
3.57.1 )1()( xCxxf −=
4500 4550 4600 4650 4700 4750 4800
0.00.2
0.40.6
0.81.0
Trace Plot
time
X
MH法で生成した点をつなげたもの(トレースプロット)
MH法でのトレースプロット
> plot(X, type="l", xlim=c(4500,4800), ylim=c(0,1), main="Trace Plot", xlab="time")
histogram of MCMC
X
Freq
uenc
y
0.0 0.2 0.4 0.6 0.80
5010
020
030
0
histogram of rbeta
hikaku
Freq
uenc
y
0.0 0.2 0.4 0.6 0.8
050
100
200
300
MCMCサンプル(MH法)とRの組み込み関数rbeta() による独立同一サンプルの比較
MCMCサンプルと独立同一サンプルの比較
同じ場所 (値)を繰り返すが, IIDサンプルと同等のサンプル! (MCMCサンプルで積分計算してもOK)
MH法のアルゴリズム (2/2)
2.
(a) 行き先候補を確率的に選ぶ
tz 1+tz
)|(~ tprop zzqz
にいるとして, 次の行き先 を以下の手順で定める.
: 提案分布 (自由に設定) )|( yzq
を定常分布(事後分布)からの Mzzz ,,, 21 モンテカルロサンプルとする
3.
1. 初期値 を適当に定める. 1z
(b) 以下の遷移確率 で移動
)()|()()|(
ttprop
proppropt
zpzzqzpzzq
=ρ
( なら必ず移動) 1>ρ
ターゲット分布 ( 事後分布などを想定) )(zp
参考:MH法の収束性
)()|()()|( ypyxKxpxyK = yx∀∀
詳細つりあい条件を満たす分布 は, マルコフ核Kの定常分布になる.
p
*MH法の(a), (b) のやたら複雑な式 → ターゲット分布についてDBCを満たすようなマルコフ核K を作るため
詳細つり合い条件 (Detailed Balance Condition; DBC)
証明の方針
マルコフ連鎖 ,,,..., )1()()0( +tt xxx のマルコフ核Kを具体的に書き ターゲット分布 p(x) が上の条件を満たしていることを示す. (詳細は文献参照)
MH法を用いるにあたって 難点: 思い通りに動き回らない (一か所に居続ける)
MH法は万能な方法だが難点も多く, 最後の手段 → 次に紹介するGSが使える場合は、GSも利用.
・初期値の設定や提案分布など個別の調整
GSとの併用
・結局は プログラミング!( デバッグ能力)
(数学的な意味での「収束」は例えば一兆ステップくらい必要かも.)
4500 4550 4600 4650 4700 4750 4800
0.00.2
0.40.6
0.81.0
Trace Plot
time
X
理解度チェック:MCMC法
MH法では, まず、次のステップの移動先として、適当な確率分布を用いて提案する必要がある.
MCMC法(MH法)で発生させたモンテカルロサンプルのヒストグラムは定常分布へ収束するが, 早く収束させる工夫は個別に必要である
MCMC法でサンプル数を増やしていくと, ほとんど一定の値しか出てこなくなり, 収束していく。
MH法では同じ値が連続して出てくるが、ターゲット分布への収束が確認できれば問題ない.
6. マルコフ連鎖モンテカルロ法 ~ Gibbs Sampler
*Gibbs Sampling ともいう
Gibbs Sampler
Gibbs Sampling を紹介, 統計学者の間で認知され広まる
応用でGibbs Samplerを使った
周辺分布や同時分布が簡単に書けない(サンプリングが難しい)が、条件付き分布はサンプリングしやすい(正規分布など)場合に使う
使用の目安
向いている人 条件付き密度の計算(積分計算)に慣れている人向け
ツールの有無 BUGS, Stanなどで使用可. 商用ツールでベイズ分析用のモデルに組み込まれている
歴史的経緯 Geman and Geman (1984)
Gelfand and Smith (1990)
Two Stage Gibbs Sampling ターゲット分布 (x, yの同時分布)
1. 初期値を選ぶ
)|(~| 1|11 −−− ⋅= tXYttt xfxXY
アルゴリズム
2. 条件付き分布から逐次的に を生成
),( yxfGSで使う分布: 条件付き分布 (こちらは比較的簡単な形)
)|(),|( || yxfxyf YXXY
00 xX =
)|(~| | tYXttt yfyYX ⋅=
tt yx ,
補足: 周辺分布 のモンテカルロサンプルは単に, を捨てればよい. )(xf X ty
3. がモンテカルロサンプル ( ) ( ) ( )MM yxyxyx ,,,,,, 2211
(*この例は人工的な例)
Gibbs Samplingの実装例 (1/2) ターゲット分布
+−−= ηθθηθ
21exp)2/exp(),(
22Df
∞<<η0
∞<<∞− θ
本当に欲しいもの (IID のモンテカルロサンプル)
多次元分布から、毎回、独立にサンプルを取り出すのは難しい
サンプリング むずかしそう・・・・
( ) ( ) ( ) ),(~,,,,,,...
2211 ηθηθηθηθ fdii
MM
Gibbs Samplingの実装例 (2/2) 条件付分布は1次元の確率分布(正規分布& 指数分布)
+η
ηθ1
1,0~| N
+2
1~|2θθη Exp
1. 初期値を選ぶ
+ −− 2
)(1~|2
11
ttt Exp θθη
アルゴリズム
2. 条件付き分布から逐次的に を生成
)1,0(~0 Nθ( )tt ηθ ,
(a)
(b)
+ t
tt Nη
ηθ1
1,0~|
分布はなんでもよい
有名な1次元分布なので 組み込み関数で済む (次のスライド)
Gibbs Samplingの実装
1. 初期値を選ぶ
)|(~| 1|11 −−− ⋅= tXYttt xfxXY
アルゴリズム(再掲)
2. 条件付き分布から逐次的に を生成
00 xX =
)|(~| | tYXttt yfyYX ⋅=
tt yx ,
Nsim <- 5000; theta <- eta <- array(0, dim=Nsim); #1. 初期値 theta_0 <- rnorm(1); # 2 (a) eta[1] <- rgamma(1, shape=1, rate= (1+theta_0^2)/2); # 2 (b) theta[1] <- rnorm(1, mean=0, sd=1/sqrt( 1 + eta[1])); for (t in 2:Nsim){ # 2 (a) eta[t] <- rgamma(1, shape=1, rate= (1+theta[t-1]^2)/2); # 2 (b) theta[t] <- rnorm(1, mean=0, sd=1/sqrt( 1 + eta[t]));}
プログラム例
半信半疑でしたが思ってたより 簡単でした!! (板橋区・TKさん*)
* レビューはあくまで個人の感想です. 効果には個人差があります.
Histogram of eta
eta
Den
sity
0 5 10 15
0.0
0.1
0.2
0.3
0.4
0.5
Gibbs Samplingの実行結果
Histogram of theta
theta
Den
sity
-3 -2 -1 0 1 2 3
0.0
0.1
0.2
0.3
0.4
0.5
> param <- cbind(theta, eta) > param[50:100,] theta eta [1,] -1.495317163 0.57113836 [2,] -0.256467877 1.49928143 [3,] -0.931856340 1.50184380 ........... > hist(theta, col=2, breaks=12, freq=F) > hist(eta, col=2, breaks=12, freq=F)
← モンテカルロサンプルを表示
↑ のみのヒストグラムを表示 (周辺分布 の近似) θ
)(θf↑ のみのヒストグラムを表示 (周辺分布 の近似) η
)(ηf
Multi Stage Gibbs Sampling ターゲット分布
1. 初期値を選ぶ
),,|(~ )1()1(21
)(1
−−⋅ tp
tt xxfx
アルゴリズム
2. 条件付き分布から逐次的に を生成
),,,( 21 pxxxf
条件付き分布
),,,|(),,,|( 31221 pp xxxyfxxyf
)0()0(1 ,, pxx
)()(2
)(1 ,,, t
ptt xxx
),,,|(,, 121 −pp xxxyf
),,,|(~ )1()1(3
)(12
)(2
−−⋅ tp
ttt xxxfx
),,,|(~ )(1
)(2
)(1
)( tp
ttp
tp xxxfx −⋅
3. (p 次元ベクトルがM個) がモンテカルロサンプル )()2()1( ,,, Mxxx
),,,( 21 pxxxx =ただし,
参考:Gibbs Samplingの収束性 証明の方針
マルコフ連鎖
Gibbs sampler で生成される は以下のマルコフ核をもつマルコフ連鎖
※GSのマルコフ核は一般に詳細つりあい条件は満たしてない
)(zf
p=3 の場合(一般の場合も同様)
,,,..., )1()()0( +tt xxx のマルコフ核Kについて
ターゲット分布 f が定常分布であることを示す. (詳細は文献参照)
),|(),|(),|()|( 321131222133 yyzfyzzfzzzfyzK =
)(tx
また, )(~ yfy の時, z の分布は
∫= dyyfyzKzgz )()|()(~ところが g(z) はがんばって計算すると に一致する.
したがって, f はマルコフ連鎖の定常分布
理解度チェック:MCMC法2
高次元のパラメータに関する積分であっても、組み込み関数で簡単に独立乱数を発生できるなら、MCMC法は必要ない
Two Stage Gibbs Sampling では、同時分布f(x,y)からのサンプリングを利用して、条件付分布のモンテカルロサンプルを求める
Two Stage, Multi Stage Gibbs Sampling は, 条件付分布を利用して、逐次的にサンプリングするという点が同じである。
条件付き確率分布が簡単な形で書けない場合、MH法が使えないため、Gibbs Sampling を利用するしかない
7. WinBUGS
BUGS
WinBUGS = Windows上で動くバイナリー (closed source)
BUGS=Bayesian inference Using Gibbs Sampling
メジャーな確率分布を複数組み合わせて解析する場合に使う (たとえば正規分布のみでも複数組み合わせると条件付き分布の計算が面倒になってくる)
基本的な使用の方針
・統計モデル ・事前分布 ・データ ・初期値 ・固定パラメータ
MCMCサンプル 0.05155622 0.07840824 0.06736837 0.08869456 0.03744929 0.02129103 0.08448234 0.05873367 0.02704619 ....
*Open SourceのBUGSもある(OpenBUGS)
Rとの連携
Rプログラムの中で呼び出して使うことができる
(管理者として実行しないとエラーになることも)
・付属のGUIが使いにくい
・MCMC出力を使った処理が自由にできない
・統計モデル ・事前分布 ・データ ・初期値 ・固定パラメータ
MCMCサンプル 0.05155622 0.07840824 0.06736837 0.08869456 0.03744929 0.02129103 0.08448234 0.05873367 0.02704619 ....
WinBUGSの欠点
Rのインターフェース利用
ExcelやMATLAB, Stata, etc. からも使える
例: 炭鉱災害数と変化点検出
2つの独立なポアソンモデルからのデータ発生とみなして, その変化点を探索する (今回はWinBUGSの使用方法の説明用)
> N <- 112; > D <- c(4,5,4,1,0, 4,3,4,0,6, 3,3,4,0,2, 6,3,3,5,4, 5,3,1,4,4, 1,5,5,3,4, 2,5,2,2,3, 4,2,1,3,2, 1,1,1,1,1, 3,0,0,1,0, 1,1,0,0,3, 1,0,3,2,2, 0,1,1,1,0, 1,0,1,0,0, 0,2,1,0,0, 0,1,1,0,2,2,3,1,1,2, 1,1,1,1,2, 4,2,0,0,0, 1,4,0,0,0,1,0,0,0,0, 0,1,0,0,1, 0,0); > plot(1851:1962, D, main="Example of Poisson Change Point Model", xlab="Year", ylab="Num. of Accident")
1860 1880 1900 1920 1940 1960
01
23
45
6
Example of Poisson Change Point
Year
Num
. of A
ccid
ent
データ イギリスの炭鉱での災害数 1851年~1962年 (Carlin et al., 1992)
0,,5,4 11221 === DDD
↑モデルの変化点?
)( afterPo µ)( beforePo µ
統計モデルと事前分布
),10,0(~),10,0(~ 62
61 NbNb
)(~ tt PoD µ
model のBUGS言語での記述例 (coalmining.txt)
model { for(year in 1:N){ D[year] ~ dpois(mu[year]) log(mu[year]) <- b[1] + step(year - changeyear) * b[2] } for(j in 1:2){ b[j] ~ dnorm(0.0, 1.0E-6) } changeyear ~ dunif(1, N) }
21 )(log btHbt τµ −+=
)112,1(~ Uτ
人が準備する部分
BUGS コードでは, 分散の逆数を指定するので が出てくる(無情報事前分布) 610−
変化点は本来、離散値だが、連続値として一様分布をふっている
WinBUGSがやってくれること
炭鉱のデータ (R経由で受け渡し)
MCMCサンプル 0.05155622 0.07840824 0.06736837 0.08869456 0.03744929 0.02129103 0.08448234 0.05873367 0.02704619 ....
coalmining.txt
・統計モデル ・事前分布 ・初期値 ・固定パラメータ
3つのパラメータについて, 以下の事後分布をターゲットとする モンテカルロサンプルを生成!
( ) ( )11212121 ,,|,,~,, DDbbbb τπτ
以下のような各パラメータの周辺分布も表示
( ) ( ) ( )11211121211211 ,,|,,,|,,,| DDDDbDDb τπππ
R+WinBUGSの実行結果 実装例: ・ bugs 関数 (codaPkg=TRUE)でWinBUGSを実行、さらに read.bugs ・ plot でトレースプロットと事後分布(を推定したもの)が表示される.
data <- list("N", "D"); parameters <- c("changeyear", "b"); inits <- function(){ list(b=c(0,0), changeyear=50) }; coalmining.sim <- bugs(data, inits, parameters, "coalmining.txt", n.chains=3, n.iter=1000, bugs.directory="c:/Program Files/WinBUGS14/", codaPkg=TRUE); coalmining.coda <- read.bugs(coalmining.sim); plot(coalmining.coda); summary(coalmining.coda);
500 600 700 800 900 1000
0.9
1.1
1.3
Iterations
Trace of b[1]
0.8 1.0 1.2 1.4
01
23
4
Density of b[1]
N = 500 Bandw idth = 0.02272
500 600 700 800 900 1000-1
.8-1
.2-0
.6
Iterations
Trace of b[2]
-1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6
0.0
1.0
2.0
Density of b[2]
N = 500 Bandw idth = 0.03829
500 600 700 800 900 1000
3540
45
Iterations
Trace of changeyear
35 40 45
0.00
0.10
0.20
Density of changeyear
N = 500 Bandw idth = 0.5065
500 600 700 800 900 1000
335
345
355
Iterations
Trace of deviance
335 340 345 350 355
0.00
0.10
0.20
Density of deviance
N = 500 Bandw idth = 0.5497
今回はWinBUGSの紹介用なので 分析結果の考察は省略!!
1. フリー・商用 ともに, まずは類似の解析例を探す!
まとめ MCMCでの分析が必要になったら
1.まずはシンプルな統計モデルで!(&共役事前分布を用いるなど) 2.階層ベイズモデルなどMCMC前提のモデル
2. 類似例が見つからない、もしくはうまくいかない場合 → 自分で統計モデルをたてる もしくは, 雇う?!
ベイズモデリングの指針
*最近, Stan (& Rから呼び出すRStan) も使われるようになっており, 日本語の文献, web上の情報も増えてきた感がある. (→ 参考: 松浦健太郎著: StanとRでベイズ統計モデリング, 共立出版)
いよいよ, 第8・9回で本格的なベイズ分析を紹介(MH, GS なども利用.)