モンテカルロサンプリング kos59125 [2011-08-27] Nagoya.R#6 © RecycleBin
モンテカルロサンプリング
kos59125
[2011-08-27] Nagoya.R#6
© RecycleBin
レジュメ
• 自己紹介
• モンテカルロサンプリングの概要説明
• 具体的な方法の紹介
–直接的方法
–間接的方法
• 集団遺伝学での応用例
© RecycleBin
自己紹介
• 専門: 集団遺伝学
• 趣味プログラマ
• R の位置づけ
– DIS ■■□□□□□□□□ LOVE
© RecycleBin
R コミュニティ活動
• Nagoya.R: 発表 4 回
–今回で 5 回目
• Tokyo.R: 発表 1 回
• R.NET: コーディネーター
–開発協力者募集中
© RecycleBin
モンテカルロサンプリング
© RecycleBin
モンテカルロ法
• 乱数を用いる数値計算法の総称
• カジノの街モンテカルロ (Monte Carlo) に由来
– 英語では Monte Carlo method と MC が大文字
Wikimedia Commons より引用
© RecycleBin
モンテカルロ法
• 計算時間が多項式時間
• 得られた結果は必ずしも正しい答えではない
–試行回数を増やすことで精度が上がる
© RecycleBin
モンテカルロサンプリング
• モンテカルロ法を用いて目的とする確率分布からのサンプリングを行う
• 使いどころ
–確率分布の理論式が扱いづらい
–確率分布の理論式を知らない
© RecycleBin
サンプリングの方法
© RecycleBin
注意
• 本スライドではいくつかのサンプリングアルゴリズムを例示しますが,必ずしも最善の手法を示しているわけではありません
• R には様々な関数やパッケージが用意されているので,利用できるならそちらを利用しましょう
© RecycleBin
直接的方法
© RecycleBin
戦略
• ある分布にしたがう乱数は容易に得られる
–例えば一様分布 U(0, 1)
• 得られる乱数を用いて,目的分布からサンプリングを行う
© RecycleBin
変換法
• 乱数: z
• 変換式: f
• f(z) は目的分布にしたがう
• サンプリング手順
1. 乱数 z を生成する
2. f(z) を得る
© RecycleBin
例題
• 指数分布 Exp(1)
–密度関数: exp(–x)
© RecycleBin
例題
• 指数分布 Exp(1)
–密度関数: exp(–x)
• 逆関数法
–一様乱数 u ~ U(0, 1)
–変換式 f(u) = –ln(1–u)
• Exp(1) の累積分布関数: 1 – exp(–x)
• u = 1–exp(–x) を x について解くと x = f(u)
© RecycleBin
図解
© RecycleBin
R
u <- runif(1000)
x <- -log(1 - u)
© RecycleBin
結果
© RecycleBin
利点・欠点
利点
• 計算が軽い
– 無駄な計算がない
欠点
• 一般に累積分布関数の逆関数を求めることは困難
© RecycleBin
棄却サンプリング法
• 目的分布の密度関数: π(x)
• 提案分布の密度関数: g(x)
• 定数 c が存在してすべての x で π(x) ≦ cg(x) が成り立つ
• サンプリング手順
1. x* ~ g(x) および u ~ U(0, 1) を生成
2. u ≦ π(x*)/cg(x*) なら x* を受容,そうでなければ棄却して 1 に戻る
© RecycleBin
例題
• レイリー分布 Rayleigh(1)
–密度関数: π(x) = x exp(–x2/2)
© RecycleBin
例題
• レイリー分布 Rayleigh(1)
–密度関数: π(x) = x exp(–x2/2)
• 提案分布: 指数分布 Exp(1)
–密度関数: g(x) = exp(–x)
• 定数: c = max π(x)/g(x) ≒ 2.2
– x = (1+√5)/2 で最大
© RecycleBin
図解
© RecycleBin
図解
© RecycleBin
R
drayleigh <- function(x) x * exp(-x*x/2)
argmax <- (1+sqrt(5)) / 2
k <- drayleigh(argmax) / dexp(argmax)
ratio <- function(x)
drayleigh(x) / (k * dexp(x))
proposal <- rexp(5000)
u <- runif(5000)
acceptance <- proposal[u <= ratio(proposal)]
© RecycleBin
結果
© RecycleBin
利点・欠点
利点
• 実装が容易
欠点
• π(x)/cg(x) が小さいと受容率が低くなり,効率が悪くなる
– 分布の端
– 高次元
© RecycleBin
マルコフ連鎖モンテカルロ法
• マルコフ連鎖
–直前の状態からのみ,次の状態が定まる
• 特定の条件を満たすマルコフ連鎖は,均衡分布に収束する
–均衡分布が目的分布となるようにマルコフ連鎖を設計
© RecycleBin
マルコフ連鎖モンテカルロ法
• 連鎖の設計
– ギブスサンプラー
– メトロポリス・ヘイスティング法
• サンプリング手順
1. 初期値および連鎖を定める
2. 連鎖からサンプリング
• 初期値に依存する最初の何ステップかは棄てる
© RecycleBin
例題
• 2 変量正規分布
–平均: (0, 0),分散: (12, 12),共分散: 0.7
© RecycleBin
例題
• 2 変量正規分布
–平均: (0, 0),分散: (12, 12),共分散: 0.7
• ギブスサンプラー
–初期値: (x1, y1) = (–10, –10)
– xt ~ N(0.7 yt–1, 12 – 0.72/12)
– yt ~ N(0.7 xt, 12 – 0.72/12)
–最初の 500 ステップを棄てて 500 ステップ
© RecycleBin
図解
© RecycleBin
図解
© RecycleBin
R
x <- vector("numeric", 1000)
y <- vector("numeric", 1000)
x[1] <- -10; y[1] <- -10
dev <- sqrt(1^2 - 0.7^2/1^2)
for (index in 2:1000) {
x[index] <- rnorm(1, 0.7*y[index-1], dev)
y[index] <- rnorm(1, 0.7*x[index], dev)
}
x <- x[-(1:500)]; y <- y[-(1:500)]
© RecycleBin
結果
© RecycleBin
利点・欠点
利点
• 高次元に対応可能
欠点
• 収束判定が必要
• 並列化が困難
© RecycleBin
その他の方法
• 重点サンプリング法
• 逐次モンテカルロ法
© RecycleBin
間接的方法
© RecycleBin
戦略
• 真の分布からサンプリングを行いたいが,分布に関する知見が不足している
• 真の分布を近似するような分布を見つけ,その分布からサンプリングを行う
© RecycleBin
シミュレーション
• 目的分布にしたがうサンプルが得られるようなシミュレーションを行う
• サンプリング手順
1. シミュレーションを行い,結果をサンプリング
© RecycleBin
例題
• 正規分布 N(0, 12)
© RecycleBin
例題
• 正規分布 N(0, 12)
• 中心極限定理の利用
1. 12 個の一様乱数 u1,..., u12 ~ i.i.d. U(0, 1)
• 平均 1/2,分散 1/12
• ū は近似的に N(6, 1/122) にしたがう
2. 合計から 6 を引いた値をサンプリング
• 12ū – 6 は近似的に N(0, 12) にしたがう
© RecycleBin
R
simulation <- function(...)
sum(runif(12)) - 6
x <- sapply(vector(length=1000), simulation)
© RecycleBin
結果
© RecycleBin
利点・欠点
利点
• 目的分布についての知見がほとんどいらない
欠点
• 計算が重い
© RecycleBin
近似ベイズ計算
• 事後分布 f(θ|D) ∝ P(D|θ)π(θ) において尤度 P(D|θ) を求めることが困難
–解析的に求められない
–計算コストが大きすぎる
• θ を与えればシミュレーションデータ D’ が容易に生成できる
© RecycleBin
近似ベイズ計算
• 尤度をシミュレーションで求める
– #(D = D’) / #(試行)
–現実的でない試行回数が必要
• データ間距離 ρ(D, D’) が小さければ良い
– f(θ|D = D’) を f(θ|ρ(D, D’) ≦ ε) で近似
–普通は ρ(D, D’) が定義しづらいので D の代わりに適当な統計量 S(D) を用いる
© RecycleBin
近似ベイズ計算
• サンプリング法
–棄却サンプリング法
– マルコフ連鎖モンテカルロ法
• サンプリング手順 (棄却サンプリング)
1. 事前分布からサンプリング
2. データをシミュレーション (統計値を計算)
3. ρ≦ε なら受容,そうでなければ棄却して 1 に戻る
© RecycleBin
例題
• 混合正規分布
– 密度関数: 0.5 * φ(–2, 12) + 0.5 * φ(2, 12)
© RecycleBin
例題
• 混合正規分布
– 密度関数: 0.5 * φ(–2, 12) + 0.5 * φ(2, 12)
• 事前分布: N(0, 52)
• 距離: |x – μ|
– x ~ N(θ, 12) | θ ~ 事前分布
– μ: –2 または 2 を等確率で採択
• 許容誤差: 0.01
© RecycleBin
R
x <- vector("numeric")
while(length(x) < 1000) {
n <- 1000 - length(x)
prior <- rnorm(n, 0, 5)
distance <- abs(
rnorm(n, prior)
- ifelse(runif(n) <= 0.5, -2, 2)
)
x <- c(x, prior[distance <= 0.01])
}
© RecycleBin
R (高速版)
x <- vector("numeric")
while(length(x) < 1000) {
n <- 1000 - length(x)
prior <- rnorm(n, 0, 5)
distance <- abs(
rnorm(n, prior)
+ 2 + (-2 - 2) * (runif(n) <= 0.5)
)
x <- c(x, prior[distance <= 0.01])
}
© RecycleBin
結果
© RecycleBin
利点・欠点
利点
• 目的分布についての知見がほとんどいらない
– 特に尤度が不要
欠点
• 上手に設計できないと,受容率は極端に低い
• 選んだ距離が解析結果に影響
© RecycleBin
おわりに
© RecycleBin
サンプリングの正しさ
• コーディングに人為的ミスはつきもの
• 統計的検定
– コルモゴロフ・スミルノフ検定
– シミュレーションによる方法
© RecycleBin
まとめ
• モンテカルロ法を用いて複雑な分布からのサンプリングが容易にできる
• さまざまな方法があるので,自分の目的にあった手法を選択する
© RecycleBin
集団遺伝学での応用例
© RecycleBin
集団遺伝学
• 生物集団
–単一種の生物個体の集まり
• 集団遺伝学
–集団における遺伝的組成 (対立遺伝子頻度など) の変化を研究する学問領域
© RecycleBin
コアレセント理論
• すべての対立遺伝子は,単一の祖先対立遺伝子に由来
: 突然変異
現在 過去 © RecycleBin
遺伝的分化
• 2 つの集団を比較すると,集団間には遺伝的組成に違いが観察される
© RecycleBin
コアレセントシミュレーション
• デモグラフィーの歴史を仮定することで,遺伝データをシミュレーションできる
現在 過去 分化 © RecycleBin
デモグラフィーの推定
• 近似ベイズ計算による推定
– シミュレーションして生成した遺伝データの統計量を計算して観察データと比較
–パラメーター
• 集団内の個体数 (集団サイズ)
• 分化時間
• 分集団間の遺伝的交流の程度 (移住)
• その他
© RecycleBin
例
© RecycleBin
材料種
• Hana mogera (Tamoreae) ※架空の生物
–移住なしの理想集団
T
2N
2rN
2aN
0
集団 1
集団 2
© RecycleBin
観察データ
• 自然選択に対して中立な 30 遺伝子座の塩基配列
–遺伝子座あたりの突然変異率: 10-5
–各集団 20 配列ずつ
• 集団ごとに多型サイト数 (S) および平均塩基相違数 (Π) を計算
© RecycleBin
観察データ
• 本スライドではコアレセントシミュレーションにより架空のデータを生成・利用
– (N, r, a, T) = (80000, 0.1, 3.0, 1.0)
– (S1, Π1, S2, Π2) = (15.4, 2.9, 8.9, 0.3)
© RecycleBin
サンプリングの手順
1. パラメーター (N, r, a, T) を生成
– N ~ U(0, 400000)
– r ~ U(0, 2)
– a ~ U(0, 5)
– T ~ U(0, 2)
2. コアレセントシミュレーションを行い,集団 1, 2 の遺伝データを生成
3.統計量 (S1’, Π1’, S2’, Π2’) を計算
© RecycleBin
サンプリングの手順
4. それぞれの統計量の誤差が 10% 以内ならパラメーターを受容
– S1: |15.4 – S1’| ≦ 1.54
– Π1: |2.9 – Π1’| ≦ 0.29
– S2: |8.9 – S2’| ≦ 0.89
– Π2: |0.3 – Π2’| ≦ 0.03
5. パラメーターが 1,001 組に達するまで繰り返す
© RecycleBin
結果
© RecycleBin
まとめ
• 集団遺伝の確率プロセスは複雑
– シミュレーションは容易
• 近似ベイズ計算を用いて尤度計算を回避することで,デモグラフィーの歴史が推定できる
© RecycleBin
主要参考文献
• 大森 (2001) 『マルコフ連鎖モンテカルロ法の最近の展開』
• Cosma & Evers (2010) Markov Chains and Monte Carlo Methods.
© RecycleBin
謝辞
• yatsuta 様
–本スライドをレビューしていただきました
© RecycleBin