「ベイズ推定でパラメータリスクを捉える
&優れたサンプラーとしてのMCMC」
2014年3月13日
担当: 出井
1. ベイズ推定について
2
1. ベイズ推定について
パラメータの確率分布を求める一方法に「ベイズ推定」が
ある
条件付き確率が満たす式:
=	
( )
( )
上式で、 をパラメータ、 を観測されたデータとすると、
( )はデータの条件なしのパラメータの確率分布を、
はパラメータを条件としてデータが観測される確率
(つまり尤度)を、 はデータが得られた後のパラ
メータの確率分布を意味する
3
1. ベイズ推定について
つまり、
=	
( )
( )
( : パラメータ、 : 観測されたデータ)
さらに、 ( )はパラメータ によらない数なので、
∝ 	 (ただし = 1)
データを与えた時のパラメータの確率分布
「事後分布」
パラメータを与えた時のデータの確率
「尤度」
条件なしのパラメータの確率分布
「事前分布」
「事後分布」 「尤度」 「事前分布」
4
1. ベイズ推定について
【例】ある年度の死亡保険契約者4人の内、生存3人死亡
1人というデータが得られた。この場合死亡率 の分布をベ
イズ推定で出力することを考える
① 事前分布 ( )の設定: = 1	(0 ≤ ≤ 1)
② 尤度 の設定: 二項分布から4人中3人死亡が観
察されたと仮定して、 = (1 − )
③ よって ∝ 	 = (1 − )
事後分布は = 20 (1 − ) (ベータ分布 (2,4))
5
1. ベイズ推定について
0
0.5
1
1.5
2
2.5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
事前分布
事後分布
結果、事前確率分布から事後確率分布は以下のように変化
6
1. ベイズ推定について
ところで ∝ 	 のパラメータAの分布
や とは何を意味するのか?
ベイズの教科書ではこれらは「確信度」といわれ、頻度論
をベースにする最尤法で漸近正規性を仮定したパラメータ
分布とは発想が違うようだ
– :データが手に入る前の、パラメータが何であるかにつ
いての確信度
– :データが手に入った後の、パラメータが何であるか
についての確信度
今回発表では定性的に「パラメータリスク」が表されたも
のと理解した
7
1. ベイズ推定について
一方で最尤法とベイズ推定は数理的には以下の関係がある
– 最尤法:観察データの尤度を最大化するパラメータを推定値
として点推定する(頻度主義)
– ベイズ推定:事後確率=尤度×事前確率としてパラメータの事
後確率を推定する(ベイズ主義)
事前分布として何らかのピークを持つ分布を指定しない場
合(「無情報事前分布」(例えばほぼ無限に平べったい正
規分布)である場合)、ベイズ推定で得られた事後確率を
最大とするパラメータ値は最尤推定の結果と一致する
– 事後確率を最大とするパラメータ推定をMAP推定(Maximum
A-Posteriori Estimation)と呼ぶ
8
1. ベイズ推定について
よく「ベイズ推定は事前分布に主観性が入るから問題だ」
と批判されるが、前頁のとおり無情報事前分布を選ぶと最
尤法の発想と大差ないことを考えるとベイズ推定そのもの
への正しい批判とは言えない
逆に、最初は経験のない事象でもエキスパートジャッジメ
ントで主観的に事前分布を決めることができ、データが得
られるたびに客観的に更新していけるというある種の融通
が利く点を利用した活用手法も考えられており特徴を理解
した上で選択肢の一つと考えるべき
– スパムメールフィルター
• ある単語を含むメールがスパムかは最初は分からないので主観的に決めるがデータで随時スパムである確率を
更新することでスパムか否かの判断の精度を上げていく
– シナリオVaR
• 金融危機などのストレス事象をテールに含む例えば株価収益の確率分布を事前分布として主観的に与え、デー
タで更新していくことで評価したいテール事象の情報を含む確率分布を作成、それでVaRを評価する
2. MCMC(Markov Chain
Monte Carlo)について
10
2. MCMC(Markov Chain Monte Carlo)について
ベイズ推定では、「事後分布∝尤度×事前分布」で計算す
るが、特定の尤度と事前分布の組み合わせを選んだ場合を
除いて通常は事後分布が複雑な形式に変化してしまい解析
的に求まらない
これをモンテカルロシミュレーションで求める手法として
MCMCがある
MCMCではランダムに与えた初期値パラメータを一定の手
順に従って更新していくことで事後分布に従ったパラメー
タサンプルを得る手法
11
2. MCMC(Markov Chain Monte Carlo)について
シミュレーションシナリオを更新する際に事後確率(図で
は対数尤度)の高い方だけでなく低い方も一定ルール
(「詳細釣合の条件」)で選択させる
引用元: http://hosho.ees.hokudai.ac.jp/~kubo/stat/2013/ou3/kubostat2013ou3.pdf
12
2. MCMC(Markov Chain Monte Carlo)について
結果的に事後分布をなぞるようなサンプリングがおこなわ
れパラメータの事後分布 のサンプリングが得られる
(図ではq: パラメータ)
引用元: http://hosho.ees.hokudai.ac.jp/~kubo/stat/2013/ou3/kubostat2013ou3.pdf
13
2. MCMC(Markov Chain Monte Carlo)について
利点 欠点
• 解析的に解けない複雑な
モデルでパラメータ推定
できる
• 多峰の分布で局所解に偏
りにくい(勾配法と違い
解付近を「ふらつく」)
• 事後分布に従うパラメー
タの乱数が手に入り再利
用が容易(この利点につ
いてはブートストラップ
法でも同様)
• 計算に時間がかかること
もある
• 手法が一般的でなくコー
ディングの文法も学習す
る必要があるので担当者
間での再現性が低い
• ソフトウェアを使用する
場合は理論的には可能で
もソフトで対応していな
かったりする
14
2. MCMC(Markov Chain Monte Carlo)について
MCMCを実装するにはツール(サンプラー)の使用が最適
以下のような候補がある
– R:ライブラリMCMCPackやその他
– BUGS(OpenBUGS, WinBUGSなど): インタプリター
– stan: コンパイラなのでBUGSよりずっと早い。行列計算にfor
文なしで対応できる
– JAGS
特に近年の計算速度の進化で一般的になってきた
15
2. MCMC(Markov Chain Monte Carlo)について
stanコードの書き方例:事前分布を(0,1)の一様分布とする
θをパラメータとするN件のベルヌーイ試行のデータyが得
られた場合のθの事後分布を出したい
data {
int<lower=0> N;
int<lower=0,upper=1> y[N];
}
parameters {
real<lower=0,upper=1> theta;
}
model {
theta ~ uniform(0,1);
for (n in 1:N)
y[n] ~ bernoulli(theta);
}
ただの入力データ形式の宣言
(データは別途入力)
ただのパラメータの宣言
事前分布の設定
尤度を計算するためのデータ
発生のメカニズムの設定
16
2. MCMC(Markov Chain Monte Carlo)について
モデル上で様々な変数を様々な形で導入してもサンプリン
グを実行することができる(医療系の場合に健康診断結果、
病歴などの共変量を入れる、交差項を入れる、状態空間
(うまく考えれば「レジーム変化を含む推定」のようなも
のもできるか(明示的にパラメータリスクIIを出力))
データが少なく「個体差」がデータに表れる場合や潜在変
数による効果があるモデルで測定したい場合
– 固定効果:
年齢、年度、商品、コーホートなど観察変数を要因に含む分析
– ランダム効果:
UWの質の差によるブレなどの潜在要因をメタなある分布からラン
ダムに発生した効果として含める分析 (階層ベイズ)
17
2. MCMC(Markov Chain Monte Carlo)について
固定効果の反映例
– 例えばLee Carterモデルln , = + + , 	にコーホート効果
を反映させてln , = , + , + , 	などとしたい場合はstanを
使ったMCMCでは尤度の設定部分:
をたとえば以下のように変更すれば対応可能
for (x in 1:41){ //コメント:50歳~90歳
for (t in 1:61){ //コメント:1950年~2010年
mxt <- exp(ax[x]+ bx[x] * kt[t]);
rxt[x,t] ~ binomial(nxt[x,t],mxt);
}
}
for (x in 1:41){ //コメント: 50歳~90歳
for (t in 1:61){ //コメント: 1950年~2010年
mxt <- exp(ax[x,t]+ bx[x,t] * kt[t]);
rxt[x,t] ~ binomial(nxt[x,t],mxt);
}
}
※実際は変数宣言部分等も変更必要のためこの例は手順のイメージと考えてください
18
2. MCMC(Markov Chain Monte Carlo)について
ランダム効果の反映例
– 例えばLee CarterモデルにUWの質の差など未観察の要因により平均
を0とするランダム効果!"が加わりln , ," = + !" + + , ,"	(#
はランダム効果の番号)かつ !"~正規分布(平均 = 0, 標準偏差 =
!%&)などとしたい場合はstanを使ったMCMCではたとえば以下のよ
うにコードを変更すれば対応可能(「階層ベイズ」)
ri ~ normal(0,rdx); //ランダム効果のメタ分布
rdx ~ uniform(0,1.0E3);
for (x in 1:41){ //50歳~90歳
for (t in 1:61){ //1950年~2010年
for (i in 1:10){ //ランダム効果が発生した単位として10区分あり、
//それぞれ効果が独立に発生したとする
mxt <- exp(ax[x]+ri[i]+ bx[x] * kt[t]);
rxt[x,t,i] ~ binomial(nxt[x,t,i],mxt);
}
}
}
※実際は変数宣言部分等も変更必要のためこの例は手順のイメージと考えてください
3. MCMCの実装例
20
3. MCMCの実装例
MCMCの実装を試してみる
使用ツール: stanをR上でrstanを通して実行
やり方:
① Lee-Carterモデルのパラメータにある値を与えてそれが真の
パラメータであるとする
② それから計算される死亡率から死亡者数が2項分布に従う
として乱数サンプリングしデータを生成、それを観察デー
タとする
③ 観測されたデータをモデルへの入力値としてMCMCを行う
ことで①の真のパラメータとMCMCによる推定を比較する
結果の見方:赤線が真のパラメータ、黒い帯は500本のシミュ
レーション結果が束になったもの
21
3. MCMCの実装例
例1 (LCモデルのパラメータ推定)
Lee Carterモデルln , = + + , 	を前提 (∑ = 1, ∑ = 0)
• 1 ≤ & ≤ 40: 年齢50~90歳
• 1 ≤ ( ≤ 61: 年度1950~2010年
• エクスポージャーは各年齢、各年10,000人ずつとする
• パラメータ ,	 , に真の値を与えそこから計算される死亡率から10,000人
に2項分布で死亡者数を乱数で与えて、エクスポージャーと死亡者数からパ
ラメータ推定を行う(500本のシュミレーション)
• 結果かかったランタイム:581秒
管理用メモ:
モデル#102 “LC_stan.R”
22
3. MCMCの実装例
例1 結果 ln , = + + , 	
管理用メモ:
モデル#102 “LC_stan.R”
23
3. MCMCの実装例
例1 結果 ln , = + + , 	
管理用メモ:
モデル#102 “LC_stan.R”
24
3. MCMCの実装例
例1 結果 ln , = + + , 	
管理用メモ:
モデル#102 “LC_stan.R”
25
3. MCMCの実装例
例2 (例2と同じ条件でN=100の場合)
Lee Carterモデルln , = + + , 	を前提 (∑ = 1, ∑ = 0)
• 1 ≤ & ≤ 40: 年齢50~90歳
• 1 ≤ ( ≤ 61: 年度1950~2010年
• エクスポージャーは各年齢、各年100人ずつとする
• パラメータ ,	 , に真の値を与えそこから計算される死亡率から100人に2
項分布で死亡者数を乱数で与えて、エクスポージャーと死亡者数からパラ
メータ推定を行う(500本のシュミレーション)
• 結果かかったランタイム:220秒
管理用メモ:
モデル#103 “LC_stan.R”
26
3. MCMCの実装例
例2 結果 ln , = + + , 	
管理用メモ:
モデル#103 “LC_stan.R”
27
3. MCMCの実装例
例2 結果 ln , = + + , 	
管理用メモ:
モデル#103“LC_stan.R”
28
3. MCMCの実装例
例2 結果 ln , = + + , 	
管理用メモ:
モデル#103 “LC_stan.R”
29
3. MCMCの実装例
例3 (ランダム効果を入れたモデル)
Lee Carterモデルから簡単のため死亡率改善の項を除いたln = + , 	を
前提するが、 何らかの理由によりに死亡率の水準を変える項!"を含む式
ln ," = + !" + , 	を真のモデル考える。この時さらにランダム効果項は
!"~正規分布(平均 = 0, 分散 = *+
)というメタな分布に従うとする階層ベイズモ
デルを考える。
• 1 ≤ & ≤ 40: 年齢50~90歳
• 1 ≤ ( ≤ 3: データ3年分
• 1 ≤ # ≤ 10: ランダム効果項は同一の分布(正規分布(平均 = 0, 分散 = *+
))
から10個出力されるとする
• エクスポージャーは各年齢、各年、各ランダム効果100人ずつとする
• パラメータ ,	*+
に真の値を与えそこから計算される死亡率から100人に2項
分布で死亡者数を乱数で与えて、エクスポージャーと死亡者数からパラ
メータ推定を行う(500本のシュミレーション)
• 結果かかったランタイム:6秒
管理用メモ:
モデル#8 “LC_stan_mixed4.R”,
ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
30
3. MCMCの実装例
例3 結果 ln ," = + !" + , 	、!"~正規分布(平均 = 0, 分散 = *+)
(!"の事後分布の平均がゼロでないシナリオはその分を調整)
管理用メモ:
モデル#8 “LC_stan_mixed4.R”,
ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
31
3. MCMCの実装例
例3 結果 ln ," = + !" + , 	、!"~正規分布(平均 = 0, 分散 = *+)
(!"の事後分布の平均がゼロでないシナリオはその分を調整)
管理用メモ:
モデル#8 “LC_stan_mixed4.R”,
ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
32
3. MCMCの実装例
例3 結果 ln ," = + !" + , 	、!"~正規分布(平均 = 0, 分散 = *+)
管理用メモ:
モデル#8 “LC_stan_mixed4.R”,
ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
33
3. MCMCの実装例
例3 参考結果
ランダム効果の項を省いた ln = + , 	をモデルにしてパラメータ推定行っ
た場合の (一部の死亡率が高いグループ(# = 5)に引っ張られ推定がずれる)
管理用メモ:
モデル#8 “LC_stan_mixed4.R”,
ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
34
3. MCMCの実装例
リスク量の試算
– 1年の「死亡率」で計測(リスク量(%)=1年の死亡数÷N)
– 年齢=85歳(& = 36)、年度=2000年(t = 51)、ランダム効果番号=1(i = 1)の組み合わせのみを対象
– 平均はMCMCからの500本のパラメータサンプリングの平均による死亡率
– パラメータリスクはMCMCからの500本のサンプリングを用いて99.5%tileで評価
– プロセスリスクは、Nと死亡率から2項分布の乱数をパラメータリスクとは独立に発生させ死亡数
をサンプリングして99.5%tileで評価
– (なおこのリスク定義では、パラvs.プロは元の乱数は独立でもリスク量は相関する)
実装例# N 平均 平均
+パラリスク
平均
+パラリスク
+プロリスク
例1 10,000 6.6% 6.7%
(+0.1%)
7.3%
(+0.6%)
例2 100 6.8% 8.5%
(+1.7%)
14.0%
(+5.5%)
例3 100 6.7% 8.0%
(+1.3%)
14.0%
(+6.0%)
4. まとめ
36
4. まとめ
ベイズ推定でパラメータの分布を算出できる
– つまりパラメータリスク(?)
MCMCはこわくない
– 複雑なモデル(階層化したパラメータ、状態空間系)でもパ
ラメータ推定してくれる
– パラメータの分布付きの推定とそのランダムサンプリングが
同時にできるというライフハック
– 優秀なサンプラーのおかげであなたも思いついた項を追加し
てすぐにシミュレーションしたくなる!(できてしまうので
やりたくなってしまう)
37
(参考)MCMCについてさらに調査したい個所
モデル選択をしたい場合はどうすればよいか?
– 赤池ベイズ情報量基準(ABIC)
ベイズベースでのパラメータの事後確率分布 の広が
りと頻度論ベースのフィッシャー情報行列に基づく信頼区
間との定量的な比較
パラメータ間の相関について

ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC

  • 1.
  • 2.
  • 3.
    2 1. ベイズ推定について パラメータの確率分布を求める一方法に「ベイズ推定」が ある 条件付き確率が満たす式: = ( ) () 上式で、 をパラメータ、 を観測されたデータとすると、 ( )はデータの条件なしのパラメータの確率分布を、 はパラメータを条件としてデータが観測される確率 (つまり尤度)を、 はデータが得られた後のパラ メータの確率分布を意味する
  • 4.
    3 1. ベイズ推定について つまり、 = ( ) () ( : パラメータ、 : 観測されたデータ) さらに、 ( )はパラメータ によらない数なので、 ∝ (ただし = 1) データを与えた時のパラメータの確率分布 「事後分布」 パラメータを与えた時のデータの確率 「尤度」 条件なしのパラメータの確率分布 「事前分布」 「事後分布」 「尤度」 「事前分布」
  • 5.
    4 1. ベイズ推定について 【例】ある年度の死亡保険契約者4人の内、生存3人死亡 1人というデータが得られた。この場合死亡率 の分布をベ イズ推定で出力することを考える ①事前分布 ( )の設定: = 1 (0 ≤ ≤ 1) ② 尤度 の設定: 二項分布から4人中3人死亡が観 察されたと仮定して、 = (1 − ) ③ よって ∝ = (1 − ) 事後分布は = 20 (1 − ) (ベータ分布 (2,4))
  • 6.
    5 1. ベイズ推定について 0 0.5 1 1.5 2 2.5 0 0.10.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 事前分布 事後分布 結果、事前確率分布から事後確率分布は以下のように変化
  • 7.
    6 1. ベイズ推定について ところで ∝ のパラメータAの分布 や とは何を意味するのか? ベイズの教科書ではこれらは「確信度」といわれ、頻度論 をベースにする最尤法で漸近正規性を仮定したパラメータ 分布とは発想が違うようだ – :データが手に入る前の、パラメータが何であるかにつ いての確信度 – :データが手に入った後の、パラメータが何であるか についての確信度 今回発表では定性的に「パラメータリスク」が表されたも のと理解した
  • 8.
    7 1. ベイズ推定について 一方で最尤法とベイズ推定は数理的には以下の関係がある – 最尤法:観察データの尤度を最大化するパラメータを推定値 として点推定する(頻度主義) –ベイズ推定:事後確率=尤度×事前確率としてパラメータの事 後確率を推定する(ベイズ主義) 事前分布として何らかのピークを持つ分布を指定しない場 合(「無情報事前分布」(例えばほぼ無限に平べったい正 規分布)である場合)、ベイズ推定で得られた事後確率を 最大とするパラメータ値は最尤推定の結果と一致する – 事後確率を最大とするパラメータ推定をMAP推定(Maximum A-Posteriori Estimation)と呼ぶ
  • 9.
    8 1. ベイズ推定について よく「ベイズ推定は事前分布に主観性が入るから問題だ」 と批判されるが、前頁のとおり無情報事前分布を選ぶと最 尤法の発想と大差ないことを考えるとベイズ推定そのもの への正しい批判とは言えない 逆に、最初は経験のない事象でもエキスパートジャッジメ ントで主観的に事前分布を決めることができ、データが得 られるたびに客観的に更新していけるというある種の融通 が利く点を利用した活用手法も考えられており特徴を理解 した上で選択肢の一つと考えるべき – スパムメールフィルター •ある単語を含むメールがスパムかは最初は分からないので主観的に決めるがデータで随時スパムである確率を 更新することでスパムか否かの判断の精度を上げていく – シナリオVaR • 金融危機などのストレス事象をテールに含む例えば株価収益の確率分布を事前分布として主観的に与え、デー タで更新していくことで評価したいテール事象の情報を含む確率分布を作成、それでVaRを評価する
  • 10.
    2. MCMC(Markov Chain MonteCarlo)について
  • 11.
    10 2. MCMC(Markov ChainMonte Carlo)について ベイズ推定では、「事後分布∝尤度×事前分布」で計算す るが、特定の尤度と事前分布の組み合わせを選んだ場合を 除いて通常は事後分布が複雑な形式に変化してしまい解析 的に求まらない これをモンテカルロシミュレーションで求める手法として MCMCがある MCMCではランダムに与えた初期値パラメータを一定の手 順に従って更新していくことで事後分布に従ったパラメー タサンプルを得る手法
  • 12.
    11 2. MCMC(Markov ChainMonte Carlo)について シミュレーションシナリオを更新する際に事後確率(図で は対数尤度)の高い方だけでなく低い方も一定ルール (「詳細釣合の条件」)で選択させる 引用元: http://hosho.ees.hokudai.ac.jp/~kubo/stat/2013/ou3/kubostat2013ou3.pdf
  • 13.
    12 2. MCMC(Markov ChainMonte Carlo)について 結果的に事後分布をなぞるようなサンプリングがおこなわ れパラメータの事後分布 のサンプリングが得られる (図ではq: パラメータ) 引用元: http://hosho.ees.hokudai.ac.jp/~kubo/stat/2013/ou3/kubostat2013ou3.pdf
  • 14.
    13 2. MCMC(Markov ChainMonte Carlo)について 利点 欠点 • 解析的に解けない複雑な モデルでパラメータ推定 できる • 多峰の分布で局所解に偏 りにくい(勾配法と違い 解付近を「ふらつく」) • 事後分布に従うパラメー タの乱数が手に入り再利 用が容易(この利点につ いてはブートストラップ 法でも同様) • 計算に時間がかかること もある • 手法が一般的でなくコー ディングの文法も学習す る必要があるので担当者 間での再現性が低い • ソフトウェアを使用する 場合は理論的には可能で もソフトで対応していな かったりする
  • 15.
    14 2. MCMC(Markov ChainMonte Carlo)について MCMCを実装するにはツール(サンプラー)の使用が最適 以下のような候補がある – R:ライブラリMCMCPackやその他 – BUGS(OpenBUGS, WinBUGSなど): インタプリター – stan: コンパイラなのでBUGSよりずっと早い。行列計算にfor 文なしで対応できる – JAGS 特に近年の計算速度の進化で一般的になってきた
  • 16.
    15 2. MCMC(Markov ChainMonte Carlo)について stanコードの書き方例:事前分布を(0,1)の一様分布とする θをパラメータとするN件のベルヌーイ試行のデータyが得 られた場合のθの事後分布を出したい data { int<lower=0> N; int<lower=0,upper=1> y[N]; } parameters { real<lower=0,upper=1> theta; } model { theta ~ uniform(0,1); for (n in 1:N) y[n] ~ bernoulli(theta); } ただの入力データ形式の宣言 (データは別途入力) ただのパラメータの宣言 事前分布の設定 尤度を計算するためのデータ 発生のメカニズムの設定
  • 17.
    16 2. MCMC(Markov ChainMonte Carlo)について モデル上で様々な変数を様々な形で導入してもサンプリン グを実行することができる(医療系の場合に健康診断結果、 病歴などの共変量を入れる、交差項を入れる、状態空間 (うまく考えれば「レジーム変化を含む推定」のようなも のもできるか(明示的にパラメータリスクIIを出力)) データが少なく「個体差」がデータに表れる場合や潜在変 数による効果があるモデルで測定したい場合 – 固定効果: 年齢、年度、商品、コーホートなど観察変数を要因に含む分析 – ランダム効果: UWの質の差によるブレなどの潜在要因をメタなある分布からラン ダムに発生した効果として含める分析 (階層ベイズ)
  • 18.
    17 2. MCMC(Markov ChainMonte Carlo)について 固定効果の反映例 – 例えばLee Carterモデルln , = + + , にコーホート効果 を反映させてln , = , + , + , などとしたい場合はstanを 使ったMCMCでは尤度の設定部分: をたとえば以下のように変更すれば対応可能 for (x in 1:41){ //コメント:50歳~90歳 for (t in 1:61){ //コメント:1950年~2010年 mxt <- exp(ax[x]+ bx[x] * kt[t]); rxt[x,t] ~ binomial(nxt[x,t],mxt); } } for (x in 1:41){ //コメント: 50歳~90歳 for (t in 1:61){ //コメント: 1950年~2010年 mxt <- exp(ax[x,t]+ bx[x,t] * kt[t]); rxt[x,t] ~ binomial(nxt[x,t],mxt); } } ※実際は変数宣言部分等も変更必要のためこの例は手順のイメージと考えてください
  • 19.
    18 2. MCMC(Markov ChainMonte Carlo)について ランダム効果の反映例 – 例えばLee CarterモデルにUWの質の差など未観察の要因により平均 を0とするランダム効果!"が加わりln , ," = + !" + + , ," (# はランダム効果の番号)かつ !"~正規分布(平均 = 0, 標準偏差 = !%&)などとしたい場合はstanを使ったMCMCではたとえば以下のよ うにコードを変更すれば対応可能(「階層ベイズ」) ri ~ normal(0,rdx); //ランダム効果のメタ分布 rdx ~ uniform(0,1.0E3); for (x in 1:41){ //50歳~90歳 for (t in 1:61){ //1950年~2010年 for (i in 1:10){ //ランダム効果が発生した単位として10区分あり、 //それぞれ効果が独立に発生したとする mxt <- exp(ax[x]+ri[i]+ bx[x] * kt[t]); rxt[x,t,i] ~ binomial(nxt[x,t,i],mxt); } } } ※実際は変数宣言部分等も変更必要のためこの例は手順のイメージと考えてください
  • 20.
  • 21.
    20 3. MCMCの実装例 MCMCの実装を試してみる 使用ツール: stanをR上でrstanを通して実行 やり方: ①Lee-Carterモデルのパラメータにある値を与えてそれが真の パラメータであるとする ② それから計算される死亡率から死亡者数が2項分布に従う として乱数サンプリングしデータを生成、それを観察デー タとする ③ 観測されたデータをモデルへの入力値としてMCMCを行う ことで①の真のパラメータとMCMCによる推定を比較する 結果の見方:赤線が真のパラメータ、黒い帯は500本のシミュ レーション結果が束になったもの
  • 22.
    21 3. MCMCの実装例 例1 (LCモデルのパラメータ推定) LeeCarterモデルln , = + + , を前提 (∑ = 1, ∑ = 0) • 1 ≤ & ≤ 40: 年齢50~90歳 • 1 ≤ ( ≤ 61: 年度1950~2010年 • エクスポージャーは各年齢、各年10,000人ずつとする • パラメータ , , に真の値を与えそこから計算される死亡率から10,000人 に2項分布で死亡者数を乱数で与えて、エクスポージャーと死亡者数からパ ラメータ推定を行う(500本のシュミレーション) • 結果かかったランタイム:581秒 管理用メモ: モデル#102 “LC_stan.R”
  • 23.
    22 3. MCMCの実装例 例1 結果ln , = + + , 管理用メモ: モデル#102 “LC_stan.R”
  • 24.
    23 3. MCMCの実装例 例1 結果ln , = + + , 管理用メモ: モデル#102 “LC_stan.R”
  • 25.
    24 3. MCMCの実装例 例1 結果ln , = + + , 管理用メモ: モデル#102 “LC_stan.R”
  • 26.
    25 3. MCMCの実装例 例2 (例2と同じ条件でN=100の場合) LeeCarterモデルln , = + + , を前提 (∑ = 1, ∑ = 0) • 1 ≤ & ≤ 40: 年齢50~90歳 • 1 ≤ ( ≤ 61: 年度1950~2010年 • エクスポージャーは各年齢、各年100人ずつとする • パラメータ , , に真の値を与えそこから計算される死亡率から100人に2 項分布で死亡者数を乱数で与えて、エクスポージャーと死亡者数からパラ メータ推定を行う(500本のシュミレーション) • 結果かかったランタイム:220秒 管理用メモ: モデル#103 “LC_stan.R”
  • 27.
    26 3. MCMCの実装例 例2 結果ln , = + + , 管理用メモ: モデル#103 “LC_stan.R”
  • 28.
    27 3. MCMCの実装例 例2 結果ln , = + + , 管理用メモ: モデル#103“LC_stan.R”
  • 29.
    28 3. MCMCの実装例 例2 結果ln , = + + , 管理用メモ: モデル#103 “LC_stan.R”
  • 30.
    29 3. MCMCの実装例 例3 (ランダム効果を入れたモデル) LeeCarterモデルから簡単のため死亡率改善の項を除いたln = + , を 前提するが、 何らかの理由によりに死亡率の水準を変える項!"を含む式 ln ," = + !" + , を真のモデル考える。この時さらにランダム効果項は !"~正規分布(平均 = 0, 分散 = *+ )というメタな分布に従うとする階層ベイズモ デルを考える。 • 1 ≤ & ≤ 40: 年齢50~90歳 • 1 ≤ ( ≤ 3: データ3年分 • 1 ≤ # ≤ 10: ランダム効果項は同一の分布(正規分布(平均 = 0, 分散 = *+ )) から10個出力されるとする • エクスポージャーは各年齢、各年、各ランダム効果100人ずつとする • パラメータ , *+ に真の値を与えそこから計算される死亡率から100人に2項 分布で死亡者数を乱数で与えて、エクスポージャーと死亡者数からパラ メータ推定を行う(500本のシュミレーション) • 結果かかったランタイム:6秒 管理用メモ: モデル#8 “LC_stan_mixed4.R”, ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
  • 31.
    30 3. MCMCの実装例 例3 結果ln ," = + !" + , 、!"~正規分布(平均 = 0, 分散 = *+) (!"の事後分布の平均がゼロでないシナリオはその分を調整) 管理用メモ: モデル#8 “LC_stan_mixed4.R”, ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
  • 32.
    31 3. MCMCの実装例 例3 結果ln ," = + !" + , 、!"~正規分布(平均 = 0, 分散 = *+) (!"の事後分布の平均がゼロでないシナリオはその分を調整) 管理用メモ: モデル#8 “LC_stan_mixed4.R”, ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
  • 33.
    32 3. MCMCの実装例 例3 結果ln ," = + !" + , 、!"~正規分布(平均 = 0, 分散 = *+) 管理用メモ: モデル#8 “LC_stan_mixed4.R”, ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
  • 34.
    33 3. MCMCの実装例 例3 参考結果 ランダム効果の項を省いたln = + , をモデルにしてパラメータ推定行っ た場合の (一部の死亡率が高いグループ(# = 5)に引っ張られ推定がずれる) 管理用メモ: モデル#8 “LC_stan_mixed4.R”, ランダム効果項なし#9 “LC_stan_mixed4_noRE.R”
  • 35.
    34 3. MCMCの実装例 リスク量の試算 – 1年の「死亡率」で計測(リスク量(%)=1年の死亡数÷N) –年齢=85歳(& = 36)、年度=2000年(t = 51)、ランダム効果番号=1(i = 1)の組み合わせのみを対象 – 平均はMCMCからの500本のパラメータサンプリングの平均による死亡率 – パラメータリスクはMCMCからの500本のサンプリングを用いて99.5%tileで評価 – プロセスリスクは、Nと死亡率から2項分布の乱数をパラメータリスクとは独立に発生させ死亡数 をサンプリングして99.5%tileで評価 – (なおこのリスク定義では、パラvs.プロは元の乱数は独立でもリスク量は相関する) 実装例# N 平均 平均 +パラリスク 平均 +パラリスク +プロリスク 例1 10,000 6.6% 6.7% (+0.1%) 7.3% (+0.6%) 例2 100 6.8% 8.5% (+1.7%) 14.0% (+5.5%) 例3 100 6.7% 8.0% (+1.3%) 14.0% (+6.0%)
  • 36.
  • 37.
    36 4. まとめ ベイズ推定でパラメータの分布を算出できる – つまりパラメータリスク(?) MCMCはこわくない –複雑なモデル(階層化したパラメータ、状態空間系)でもパ ラメータ推定してくれる – パラメータの分布付きの推定とそのランダムサンプリングが 同時にできるというライフハック – 優秀なサンプラーのおかげであなたも思いついた項を追加し てすぐにシミュレーションしたくなる!(できてしまうので やりたくなってしまう)
  • 38.