この勉強会に参加させていただきました: https://github.com/7shi/study/wiki/bayes_hmc
読んでいる本(出典): 基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門 | 豊田 秀樹 | 本 | Amazon.co.jp
前回: 基礎からのベイズ統計学 Skype読書会(10): 参加メモ - クッキーの日記
読んだ範囲: 115~125ページ
11、12回を欠席してしまったので流れがよくわかっていないけど後から読み返してメモ。
- リープフロッグ法(109ページ)
- ハミルトンの運動方程式を数値的に解くときに、中点差分をつかうやり方をこういうらしい。
- ハミルトニアンモンテカルロ法(112ページ)
- 事後分布にしたがう乱数がほしい。
- 事後分布と、それとは独立な標準正規分布との同時分布にしたがう乱数でも別に構わない。
- 事後分布と標準正規分布の同時分布を書き下すと以下のようになる(章末問題の 8 問目を見据えて、尤度が試行回数 の二項分布、事前分布が母数 のベータ分布の場合にしてみる)。
最後の解釈は、位置-運動量空間 母数-標準正規分布にしたがう確率変数空間 位置 母数 運動量 標準正規分布にしたがう確率変数 ハミルトニアン 同時分布の対数の-1倍 ポテンシャルエネルギー 事後分布の対数の-1倍 位置エネルギー 標準正規分布の対数の-1倍 - のとき を図示してみると以下。
- からリープフロッグ法で時間を何ステップか進めてみる(章末問題 8, 9)。
- なので、 を111ページの式にあてはめればよい。
- 章末問題 9 で指示されている方の をつかって、 ステップ動いた図が以下。上図では横のプロット範囲が狭かったので少し広げた。 では軌跡がもっとカクカクしていた。
- ステップ動いたらその点の受容/棄却を判断する(ほぼ受容されるはず)。新しい点 を受容したら、正規乱数 を発生させて にワープする。そこからまた ステップ動く。繰り返し。
のEAP推定値まで出してないけどお腹すいたので終わる。スクリプトは以下。
library(fields) p <- seq(-5.5, 5.5, length.out=100) theta <- seq(0.01, 0.99, length.out=100) # log(0) を避ける H <- c() for (i in 1:length(p)) { for (j in 1:length(theta)) { H <- c(H, 9.2 * log(theta[[j]]) + 4.8 * log(1 - theta[[j]]) - 0.5 * p[[i]] * p[[i]]) } } H <- exp(H) mycolors <- c(rgb(1,(84:256)/256,(84:256)/256), rgb((255:84)/256,(255:84)/256, 1)) # 赤~青グラデーション image.plot(p, theta, matrix(H, ncol=100, byrow=TRUE), col=mycolors) abline(v=c(-5.55), h=c(0.995)) # image.plot すると左辺と上辺の黒線が見えなくなるので描き足す苦肉の策 ### リープフロッグ法 L <- 15 epsilon <- 0.01 p <- 0 theta <- 0.1 p.trace <- c(p) theta.trace <- c(theta) for (i in 2:L) { p <- p - 0.5 * epsilon * (-9.2/theta + 4.8/(1-theta)) theta <- theta + epsilon * p p <- p - 0.5 * epsilon * (-9.2/theta + 4.8/(1-theta)) p.trace <- c(p.trace, p) theta.trace <- c(theta.trace, theta) } #図示 points(p.trace[1], theta.trace[1], cex=1.5, pch=19) lines(p.trace, theta.trace, lwd=2) points(p.trace[L], theta.trace[L], cex=1.5, pch=17)