Top Banner
モンテカルロサンプリング kos59125 [2011-08-27] Nagoya.R#6 © RecycleBin
73

モンテカルロサンプリング

Jun 28, 2015

Download

Education

Kosei ABE

First part shows several methods to sample points from arbitrary distributions. Second part shows application to population genetics to infer population size and divergence time using obtained sequence data.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: モンテカルロサンプリング

モンテカルロサンプリング

kos59125

[2011-08-27] Nagoya.R#6

© RecycleBin

Page 2: モンテカルロサンプリング

レジュメ

• 自己紹介

• モンテカルロサンプリングの概要説明

• 具体的な方法の紹介

–直接的方法

–間接的方法

• 集団遺伝学での応用例

© RecycleBin

Page 3: モンテカルロサンプリング

自己紹介

• 専門: 集団遺伝学

• 趣味プログラマ

• R の位置づけ

– DIS ■■□□□□□□□□ LOVE

© RecycleBin

Page 4: モンテカルロサンプリング

R コミュニティ活動

• Nagoya.R: 発表 4 回

–今回で 5 回目

• Tokyo.R: 発表 1 回

• R.NET: コーディネーター

–開発協力者募集中

© RecycleBin

Page 5: モンテカルロサンプリング

モンテカルロサンプリング

© RecycleBin

Page 6: モンテカルロサンプリング

モンテカルロ法

• 乱数を用いる数値計算法の総称

• カジノの街モンテカルロ (Monte Carlo) に由来

– 英語では Monte Carlo method と MC が大文字

Wikimedia Commons より引用

© RecycleBin

Page 7: モンテカルロサンプリング

モンテカルロ法

• 計算時間が多項式時間

• 得られた結果は必ずしも正しい答えではない

–試行回数を増やすことで精度が上がる

© RecycleBin

Page 8: モンテカルロサンプリング

モンテカルロサンプリング

• モンテカルロ法を用いて目的とする確率分布からのサンプリングを行う

• 使いどころ

–確率分布の理論式が扱いづらい

–確率分布の理論式を知らない

© RecycleBin

Page 9: モンテカルロサンプリング

サンプリングの方法

© RecycleBin

Page 10: モンテカルロサンプリング

注意

• 本スライドではいくつかのサンプリングアルゴリズムを例示しますが,必ずしも最善の手法を示しているわけではありません

• R には様々な関数やパッケージが用意されているので,利用できるならそちらを利用しましょう

© RecycleBin

Page 11: モンテカルロサンプリング

直接的方法

© RecycleBin

Page 12: モンテカルロサンプリング

戦略

• ある分布にしたがう乱数は容易に得られる

–例えば一様分布 U(0, 1)

• 得られる乱数を用いて,目的分布からサンプリングを行う

© RecycleBin

Page 13: モンテカルロサンプリング

変換法

• 乱数: z

• 変換式: f

• f(z) は目的分布にしたがう

• サンプリング手順

1. 乱数 z を生成する

2. f(z) を得る

© RecycleBin

Page 14: モンテカルロサンプリング

例題

• 指数分布 Exp(1)

–密度関数: exp(–x)

© RecycleBin

Page 15: モンテカルロサンプリング

例題

• 指数分布 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

Page 16: モンテカルロサンプリング

図解

© RecycleBin

Page 17: モンテカルロサンプリング

R

u <- runif(1000)

x <- -log(1 - u)

© RecycleBin

Page 18: モンテカルロサンプリング

結果

© RecycleBin

Page 19: モンテカルロサンプリング

利点・欠点

利点

• 計算が軽い

– 無駄な計算がない

欠点

• 一般に累積分布関数の逆関数を求めることは困難

© RecycleBin

Page 20: モンテカルロサンプリング

棄却サンプリング法

• 目的分布の密度関数: π(x)

• 提案分布の密度関数: g(x)

• 定数 c が存在してすべての x で π(x) ≦ cg(x) が成り立つ

• サンプリング手順

1. x* ~ g(x) および u ~ U(0, 1) を生成

2. u ≦ π(x*)/cg(x*) なら x* を受容,そうでなければ棄却して 1 に戻る

© RecycleBin

Page 21: モンテカルロサンプリング

例題

• レイリー分布 Rayleigh(1)

–密度関数: π(x) = x exp(–x2/2)

© RecycleBin

Page 22: モンテカルロサンプリング

例題

• レイリー分布 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

Page 23: モンテカルロサンプリング

図解

© RecycleBin

Page 24: モンテカルロサンプリング

図解

© RecycleBin

Page 25: モンテカルロサンプリング

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

Page 26: モンテカルロサンプリング

結果

© RecycleBin

Page 27: モンテカルロサンプリング

利点・欠点

利点

• 実装が容易

欠点

• π(x)/cg(x) が小さいと受容率が低くなり,効率が悪くなる

– 分布の端

– 高次元

© RecycleBin

Page 28: モンテカルロサンプリング

マルコフ連鎖モンテカルロ法

• マルコフ連鎖

–直前の状態からのみ,次の状態が定まる

• 特定の条件を満たすマルコフ連鎖は,均衡分布に収束する

–均衡分布が目的分布となるようにマルコフ連鎖を設計

© RecycleBin

Page 29: モンテカルロサンプリング

マルコフ連鎖モンテカルロ法

• 連鎖の設計

– ギブスサンプラー

– メトロポリス・ヘイスティング法

• サンプリング手順

1. 初期値および連鎖を定める

2. 連鎖からサンプリング

• 初期値に依存する最初の何ステップかは棄てる

© RecycleBin

Page 30: モンテカルロサンプリング

例題

• 2 変量正規分布

–平均: (0, 0),分散: (12, 12),共分散: 0.7

© RecycleBin

Page 31: モンテカルロサンプリング

例題

• 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

Page 32: モンテカルロサンプリング

図解

© RecycleBin

Page 33: モンテカルロサンプリング

図解

© RecycleBin

Page 34: モンテカルロサンプリング

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

Page 35: モンテカルロサンプリング

結果

© RecycleBin

Page 36: モンテカルロサンプリング

利点・欠点

利点

• 高次元に対応可能

欠点

• 収束判定が必要

• 並列化が困難

© RecycleBin

Page 37: モンテカルロサンプリング

その他の方法

• 重点サンプリング法

• 逐次モンテカルロ法

© RecycleBin

Page 38: モンテカルロサンプリング

間接的方法

© RecycleBin

Page 39: モンテカルロサンプリング

戦略

• 真の分布からサンプリングを行いたいが,分布に関する知見が不足している

• 真の分布を近似するような分布を見つけ,その分布からサンプリングを行う

© RecycleBin

Page 40: モンテカルロサンプリング

シミュレーション

• 目的分布にしたがうサンプルが得られるようなシミュレーションを行う

• サンプリング手順

1. シミュレーションを行い,結果をサンプリング

© RecycleBin

Page 41: モンテカルロサンプリング

例題

• 正規分布 N(0, 12)

© RecycleBin

Page 42: モンテカルロサンプリング

例題

• 正規分布 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

Page 43: モンテカルロサンプリング

R

simulation <- function(...)

sum(runif(12)) - 6

x <- sapply(vector(length=1000), simulation)

© RecycleBin

Page 44: モンテカルロサンプリング

結果

© RecycleBin

Page 45: モンテカルロサンプリング

利点・欠点

利点

• 目的分布についての知見がほとんどいらない

欠点

• 計算が重い

© RecycleBin

Page 46: モンテカルロサンプリング

近似ベイズ計算

• 事後分布 f(θ|D) ∝ P(D|θ)π(θ) において尤度 P(D|θ) を求めることが困難

–解析的に求められない

–計算コストが大きすぎる

• θ を与えればシミュレーションデータ D’ が容易に生成できる

© RecycleBin

Page 47: モンテカルロサンプリング

近似ベイズ計算

• 尤度をシミュレーションで求める

– #(D = D’) / #(試行)

–現実的でない試行回数が必要

• データ間距離 ρ(D, D’) が小さければ良い

– f(θ|D = D’) を f(θ|ρ(D, D’) ≦ ε) で近似

–普通は ρ(D, D’) が定義しづらいので D の代わりに適当な統計量 S(D) を用いる

© RecycleBin

Page 48: モンテカルロサンプリング

近似ベイズ計算

• サンプリング法

–棄却サンプリング法

– マルコフ連鎖モンテカルロ法

• サンプリング手順 (棄却サンプリング)

1. 事前分布からサンプリング

2. データをシミュレーション (統計値を計算)

3. ρ≦ε なら受容,そうでなければ棄却して 1 に戻る

© RecycleBin

Page 49: モンテカルロサンプリング

例題

• 混合正規分布

– 密度関数: 0.5 * φ(–2, 12) + 0.5 * φ(2, 12)

© RecycleBin

Page 50: モンテカルロサンプリング

例題

• 混合正規分布

– 密度関数: 0.5 * φ(–2, 12) + 0.5 * φ(2, 12)

• 事前分布: N(0, 52)

• 距離: |x – μ|

– x ~ N(θ, 12) | θ ~ 事前分布

– μ: –2 または 2 を等確率で採択

• 許容誤差: 0.01

© RecycleBin

Page 51: モンテカルロサンプリング

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

Page 52: モンテカルロサンプリング

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

Page 53: モンテカルロサンプリング

結果

© RecycleBin

Page 54: モンテカルロサンプリング

利点・欠点

利点

• 目的分布についての知見がほとんどいらない

– 特に尤度が不要

欠点

• 上手に設計できないと,受容率は極端に低い

• 選んだ距離が解析結果に影響

© RecycleBin

Page 55: モンテカルロサンプリング

おわりに

© RecycleBin

Page 56: モンテカルロサンプリング

サンプリングの正しさ

• コーディングに人為的ミスはつきもの

• 統計的検定

– コルモゴロフ・スミルノフ検定

– シミュレーションによる方法

© RecycleBin

Page 57: モンテカルロサンプリング

まとめ

• モンテカルロ法を用いて複雑な分布からのサンプリングが容易にできる

• さまざまな方法があるので,自分の目的にあった手法を選択する

© RecycleBin

Page 58: モンテカルロサンプリング

集団遺伝学での応用例

© RecycleBin

Page 59: モンテカルロサンプリング

集団遺伝学

• 生物集団

–単一種の生物個体の集まり

• 集団遺伝学

–集団における遺伝的組成 (対立遺伝子頻度など) の変化を研究する学問領域

© RecycleBin

Page 60: モンテカルロサンプリング

コアレセント理論

• すべての対立遺伝子は,単一の祖先対立遺伝子に由来

: 突然変異

現在 過去 © RecycleBin

Page 61: モンテカルロサンプリング

遺伝的分化

• 2 つの集団を比較すると,集団間には遺伝的組成に違いが観察される

© RecycleBin

Page 62: モンテカルロサンプリング

コアレセントシミュレーション

• デモグラフィーの歴史を仮定することで,遺伝データをシミュレーションできる

現在 過去 分化 © RecycleBin

Page 63: モンテカルロサンプリング

デモグラフィーの推定

• 近似ベイズ計算による推定

– シミュレーションして生成した遺伝データの統計量を計算して観察データと比較

–パラメーター

• 集団内の個体数 (集団サイズ)

• 分化時間

• 分集団間の遺伝的交流の程度 (移住)

• その他

© RecycleBin

Page 64: モンテカルロサンプリング

© RecycleBin

Page 65: モンテカルロサンプリング

材料種

• Hana mogera (Tamoreae) ※架空の生物

–移住なしの理想集団

T

2N

2rN

2aN

0

集団 1

集団 2

© RecycleBin

Page 66: モンテカルロサンプリング

観察データ

• 自然選択に対して中立な 30 遺伝子座の塩基配列

–遺伝子座あたりの突然変異率: 10-5

–各集団 20 配列ずつ

• 集団ごとに多型サイト数 (S) および平均塩基相違数 (Π) を計算

© RecycleBin

Page 67: モンテカルロサンプリング

観察データ

• 本スライドではコアレセントシミュレーションにより架空のデータを生成・利用

– (N, r, a, T) = (80000, 0.1, 3.0, 1.0)

– (S1, Π1, S2, Π2) = (15.4, 2.9, 8.9, 0.3)

© RecycleBin

Page 68: モンテカルロサンプリング

サンプリングの手順

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

Page 69: モンテカルロサンプリング

サンプリングの手順

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

Page 70: モンテカルロサンプリング

結果

© RecycleBin

Page 71: モンテカルロサンプリング

まとめ

• 集団遺伝の確率プロセスは複雑

– シミュレーションは容易

• 近似ベイズ計算を用いて尤度計算を回避することで,デモグラフィーの歴史が推定できる

© RecycleBin

Page 72: モンテカルロサンプリング

主要参考文献

• 大森 (2001) 『マルコフ連鎖モンテカルロ法の最近の展開』

• Cosma & Evers (2010) Markov Chains and Monte Carlo Methods.

© RecycleBin

Page 73: モンテカルロサンプリング

謝辞

• yatsuta 様

–本スライドをレビューしていただきました

© RecycleBin