二項分布からガウス分布:中心極限定理 ポアソン分布二項分布からガウス分布:中心極限定理, ポアソン分布 Masahiro Yamamoto Modi ed on May
バイオインフォマティクス特論 1回目tohhiro/bioinformatics19/bioinfo... · (3)...
Transcript of バイオインフォマティクス特論 1回目tohhiro/bioinformatics19/bioinfo... · (3)...
バイオインフォマティクス特論 1回目
ベイズ統計で実践モデリング 北大路書房
この本にある例題を使って、JAGSによる モデリングを勉強していく
1 ベイズ法のパラダイム
1.1 概要
統計的データ解析の2つの哲学(1) 頻度主義
パラメータ固定
尤度 p(D|θ) (2) ベイズ主義
パラメータ不確実
事後確率 p(θ |D)
1.1 概要
20世紀初頭のベイズ法の不人気の原因
(1) 哲学的問題:事前確率への依存性
(2) 計算上の問題:高次元数値積分
MCMC(マルコフ連鎖モンテカルロ)導入
により、最尤法では取り扱えなかった複雑でパラメータの 多いモデルを取り扱える
1990年代に熱狂的にベイズ法がもてはやされた
現在:落ち着く
一般的なアプローチとなったこと
MCMCのアルゴリズム開発、評価の複雑さ、困難さが認識された
1 ベイズ法のパラダイム1.2 ベイズの定理全確率の法則
事象Bの生起が事象Aが生じたか否かに依存する時
ベイズの定理(逆確率の定理)
集団中の伝染病の感染を検査する新しい方法が 開発された ・ 感染している人を検査した場合、99%は陽性反応 ・ 感染していない人については、2%が間違って 陽性反応 ・ 集団中の0.1%が感染しているとする A: 感染しているという事象 A: 感染していないという事象 B: 検査で陽性反応であること P(B|A) = 0.99, P(B|A)=0.02 P(A) = 0.001, P(A) = 0.999
Rで計算
pa <- 0.001 pna <- 0.999 pba <- 0.99 pbna <- 0.02 pb <- pba*pa+pbna*pna pb [1] 0.02097
pba*pa/pb [1] 0.0472103
全確率の法則
ベイズの定理
code0.R
1 ベイズ法のパラダイム
ベイズの定理をベイズ統計学に応用
AとAは異なる仮説 H1とH2に対応
Bは観察されるデータXに対応
P(H1), P(H2) 事前確率
P(H1 |X), P(H2 |X) 事後確率
仮説が未知の連続パラメータに関する場合のベイズの定理
事前分布事後分布
θに関する推定
事後分布が用いられる
点推定:
(1) 平均
(2) モード
(3) メジアン
区間推定: (1) 等幅信用区間
(2) 最高事後密度区間
95%等幅信用区間 (θL, θU)事後確率分布の2.5%分位点と97.5%分位点 を同定することで構築
95%最高事後密度 (highest posterior density, HPD)区間 その区画外のθよりも大きな事後密度を持つθの値で構成 され、確率95%の領域をカバーしている。 この例では、密度に複数のピークが存在するため、HPD領域は 連結されていない(θ1, θ2), (θ3, θ4)区画から構成されている
(1) 事後期待値
(2) 周辺化 局外パラメータを積分によって消去 λが関心のあるパラメータ、ηが局外パラメータの時 λとηの同時事後確率密度は
λの周辺事後密度は
2 事前分布
(1) 無情報事前分布
(2) 共役事前分布
(3) 超事前分布
(1) 無情報事前分布
利用できる情報がほとんどない場合m 個の可能なパラメータを取りうる離散パラメータ
各要素に1/mの確率を割り当てる連続パラメータについては,パラメータのとりうる範囲で一様分布を用いる.そのような事前分布は,無情報事前分布(noninformative prior)あるいは平坦事前分布(flat prior)とよばれてきたが,現在は拡散事前分布(diffuse prior)あるいは漠然事前分布(vague prior)とよばれている.
(2) 共役事前分布
事前分布と事後分布は同じ関数形の分布となり,データあるいは尤度の役割はその分布のパラメータを更新すること(i)確率パラメータpに関するベータ事前分布を用いたデータの2項分布B(n,p)(ii)速度パラメータλについてのガンマ事前分布を用いたデータのポアソン分布poisson(λ), (iii)平均μついての正規事前分布を用いたデータの正規分布N(μ,σ2)
ベータ事前分布beta(α,β)に含まれている情報ベータ分布:連続型の確率分布 pα−1(1− p)β−1
B(α,β)B(α, β)はベータ関数B(α,β) = pα−1(1− p)β−1 dp
0
1
∫
尤度は二項分布で表現されている場合
n!x!(n− x)!
px (1− p)n−x
事後確率は、事前確率×尤度に比例
P(p | x) = P(x | p)P(p)p(x)
=P(x | p)P(p)
P(x | p)P(p)dp0
1
∫
事前確率尤度
P(x | p)P(p) = n!x!(n− x)!
px (1− p)n−x × pα−1(1− p)β−1
B(α,β)
=px+α−1(1− p)n−x+β−1
x!(n− x)!B(α,β)ベータ関数の定義から
px+α−1(1− p)n−x+β−1 dp =0
1
∫ B(x +α,n− x +β)
よって
P(x | p)P(p)
P(x | p)P(p)dp0
1
∫=
px+α−1(1− p)n−x+β−1
x!(n− x)!B(α,β)B(x +α,n− x +β)x!(n− x)!B(α,β)
=px+α−1(1− p)n−x+β−1
B(x +α,n− x +β)= beta(x +α,n− x +β)
共役事前分布は,事前分布と尤度の特殊な組合せの場合にのみ成立する.共役事前分布は積分が解析的に取り扱えるので便利であるが,実際の問題に対しては現実的なモデルではないかもしれない.
(3) 超事前分布
事前分布が未知パラメータを含んでいるときには,それらに対する事前分布,すなわち超事前分布(hyper-prior)を割り当てる
階層的ベイズ(hierarchicalBayes, full Bayes)超事前分布中の未知パラメータは,それら自身についての事前分布を与える.あまり効果がないので,通常は2つあるいは3つを超えるレベルの階層を取り扱うことはない
経験的ベイズ(empiricalBayes)法周辺尤度から超パラメータを推定し,それらを関心のあるパラメータの事後確率の計算に使用する
3 マルコフ連鎖モンテカルロ法
3.1 モンテカルロ積分
シミュレーションにより多次元積分を計算 密度 の分布のもとで、 の期待値 を求める。 θは多次元変数.
π (θ ) h(θ )
I = h(θ )π (θ )dθ∫π (θ ) からN個独立にサンプリング θ1, θ2 ,θ3, ... θN
上式は次の形で近似できる。
I = h θi( )i=1
N
∑
h θi( ) は独立、同一分布に従うので
I は漸近的に
I平均 分散
var(I ) = 1N 2 h θi( )− I( )
i=1
N
∑2
の正規分布に従う
モンテカルロ積分の例
€
h(x) = [cos(50x)+ sin(20x)]2
xの[0, 1]の区間で積分する。 πは一様分布として、U(0,1)に従う独立なn個の乱数 U1, U2, …., Un を発生させる すると,積分は次のように近似できる。
€
h(x)dx =1n0
1∫ h(Ui )
i=1
n
∑
h<-function(x){(cos(50*x)+sin(20*x))^2} # 関数定義par(mar=c(2,2,2,1),mfrow=c(2,1)) curve(h,xlab="Function",ylab="",lwd=2) integrate(h,0,1) # 積分
x=h(runif(10^4)) # 一様乱数から10^4個発生させた乱数に対してhの値を求めたN次元ベクトルestint=cumsum(x)/(1:10^4) # 累積和を、そこまでの個数で割った平均を計算print(estint[10^4])esterr=sqrt(cumsum((x-estint)^2))/(1:10^4) plot(estint, xlab="Mean and Error Range",type="l",lwd=2, ylim=mean(x)+20*c(-esterr[10^4],esterr[10^4]),ylab="")lines(estint+2*esterr,col="gold",lwd=2)lines(estint-2*esterr,col="gold",lwd=2)
code1.R
par関数 mar(mar=...)というグラフィックスパラメータによってグラフ周りの マージンを指定してやる. mar=の後には4つの数値からなるベクトルを代入する. c(下,左,上,右)という対応なので, 例えばpar(mar=c(1,3,1,3))と 指定すれば左右のマージン3行,上下のマージン1行の状態で 描画される. par(mfrow=c(3,1))で描画領域を縦方向に3分割している. 例えばpar(mfrow=c(3,2))とやったら縦に3分割,横に2分割とかもできる. そのあとプロットを実行すると左上から埋まっていく.ただし 左と下は4行以上のマージンが無いと文字がはみ出るので注意.
curve関数 curve(関数, from=下限, to=上限, n = 点の数, add = FALSE, type = "l", xlim = NULL, ...)
plot : オプション
plot( x, #x座標 y, #y座標 xlim=range(x), #x軸範囲 ylim=range(y), #y軸範囲 type="p", #描写方法 log="x", #対数軸を指定 main="Title", #グラフのタイトル sub="Sub Title", #グラフのサブタイトル xlab="X", #x軸の名前 ylab="Y", #y軸の名前)
plot(c(0,0),xlim=c(0,10),ylim=c(0,8),type="n") text(5,1,'lwd=1,lty="solid",col="black"') lines(c(1,10),c(1,1),lwd=1,lty="solid",col="black") text(5,2,'lwd=2,lty="dashed",col="red"') lines(c(1,10),c(2,2),lwd=2,lty=="dashed",col="red"); text(5,3,'lwd=3,lty="longdash",col="green"') lines(c(1,10),c(3,3),lwd=3,lty=="longdash",col="green")
R言語で直線を描くには lines() を利用します。オプションとして lwd で線の太さを、col で線の色を、lty で線のタイプを 指定します。
3.2 マルコフ連鎖
天気:晴れ、曇り、雨 P(天気(今日)|天気(昨日)、天気(一昨日)、…) = P(天気(今日)|天気(昨日)) 一つ前のステップの状態にのみ依存 -à マルコフ連鎖
遷移確率行列
0.4 0.3 0.30.3 0.2 0.50.3 0.5 0.2
⎛
⎝
⎜⎜⎜
⎞
⎠
⎟⎟⎟
昨日
晴れ 曇り 雨
今日 晴れ 曇り 雨
P =P(S(t) | S(t −1)) P(C(t) | S(t −1)) P(R(t) | S(t −1))P(S(t) |C(t −1)) P(C(t) |C(t −1)) P(R(t) |C(t −1))P(S(t) | R(t −1)) P(C(t) | R(t −1)) P(R(t) | R(t −1))
⎛
⎝
⎜⎜⎜
⎞
⎠
⎟⎟⎟
遷移確率は条件付き確率 前のステップの状態が条件となる。
S(t) : 時点 tで晴れ C(t) : 時点 tで曇り R(t) : 時点 tで雨
今、時点t における天気の頻度v(t) を考える
v(t) = (p(S(t)), p(C(t)), p(R(t)))
すると、次の時点 t + 1 での天気の頻度は次の形でもとまる
v(t +1) = (p(S(t +1)), p(C(t +1)), p(R(t +1)))= v(t)P
p(S(t+1))を計算してみる
(p(S(t −1)), p(C(t −1)), p(R(t −1)))P(S(t) | S(t −1)) P(C(t) | S(t −1)) P(R(t) | S(t −1))P(S(t) |C(t −1)) P(C(t) |C(t −1)) P(R(t) |C(t −1))P(S(t) | R(t −1)) P(C(t) | R(t −1)) P(R(t) | R(t −1))
⎛
⎝
⎜⎜⎜
⎞
⎠
⎟⎟⎟
P(S(t) | S(t −1))p(S(t −1))+P(S(t) |C(t −1))p(C(t −1))+P(S(t) | R(t −1))p(R(t −1))= P(S(t),S(t −1))+P(S(t),C(t −1))+P(S(t),R(t −1))= P(S(t))
遷移確率行列に、ある時点での状態の頻度分布をかけると 次の時点での頻度分布がもとまる。
遷移確率行列をPとする。 Pnを考える。 Pn = P x P x … x P
定常分布(不変分布)
nが十分に大きいと、天気の頻度分布 v=(p(晴れ)、p(曇り)、p(雨)) (横ベクトル) が、どのような値であっても vPnはある定常分布に収束する。
code3.R
wether_p <- matrix(c(0.4,0.3,0.3,0.3,0.2,0.5,0.3,0.5,0.2),byrow=T,ncol=3)
n_wp <- wether_pfor (i in 1:10^4) {n_wp <- n_wp %*% wether_p}
c(1,0,0) %*% n_wp
c(0.2,0.5,0.3) %*% n_wp
c(0,0,1) %*% n_wp
3.3 Metropolis-Hastings アルゴリズム
コイントスを行い、表(1), 裏(0)が以下のように 観察された (66回中、1が45回) 1,1,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1… このコインの表を出す確率θを推定したい 最尤推定可能な簡単な問題だが、これを MH法で解いてみる。 最尤推定値=45/66=0.68182…
θは連続値をとるので、行列では表現できない が、適当な遷移確率を考え、θの事後分布を その不変分布になる形で推定する。 事後分布が求まれば、モンテカルロ積分で その事後平均などを計算できる。
α =min 1,π θ *( )π θ( )
×q θ |θ *( )q θ* |θ( )
⎛
⎝⎜⎜
⎞
⎠⎟⎟
=min 1,p θ *( )p θ( )
×ℓ X |θ *( )ℓ X |θ( )
×q θ |θ *( )q θ* |θ( )
⎛
⎝⎜⎜
⎞
⎠⎟⎟
= min(1, 事前確率比×尤度比×提案比)
α:採択率 π:目標分布 --à 事後分布 q: 提案密度関数
qから新しいθ(θ*)を提案 qは乱数を発生しやすいものを用いる θとθ*から、αを計算 α = 1 θ* を採択 < 1 αの確率でθ* を採択 そうでない場合はθのまま このようにしてサンプルされたθが事後分布になる
コイントスの問題に応用してみる
q(θ*|θ)は正規分布 N( θ,0.1)とする。 尤度はθを使った二項確率で表現 事前分布は正規分布N(0.5,1.0)とする。
code5.R
n <- 66 # コイントスの総数m <- 45 # 表が出た回数Nsim <- 50000 # シミュレーションのステップ数burn_in <- 500 # burn inのサイズthin <- 50 # thiningのサイズinitial_value1 <- 0.2 # theta 初期値1initial_value2 <- 0.8 # theta 初期値2
# accept_ratioは:採択率を計算する関数accept_ratio <- function(n, m, theta, theta2) { log_alpha <-log(dnorm(theta2,m=0.5,sd=1.0))-log(dnorm(theta,m=0.5,sd=1.0))+m*log(theta2)+(n-m)*log(1-theta2)-m*log(theta)-(n-m)*log(1-theta)+log(dnorm(theta,m=theta2,sd=0.1))-log(dnorm(theta2,m=theta,sd=0.1)) if (log_alpha >= 0.0) { alpha <- 1.0 } else { alpha <- exp(log_alpha) } return (alpha)}
X <- rep(0, Nsim)Y <- rep(0, Nsim)X[1] <- initial_value1Y[1] <- initial_value2for (i in 2:Nsim) {new_theta <- rnorm(1,m=X[i-1],sd=0.1)if (new_theta > 1.0) new_theta<-new_theta-1.0alpha <- accept_ratio(n, m, X[i-1],new_theta)X[i]<-X[i-1]+(new_theta-X[i-1])*(runif(1)<alpha)}for (i in 2:Nsim) {new_theta <- rnorm(1,m=Y[i-1],sd=0.1)if (new_theta > 1.0) new_theta<-new_theta-1.0alpha <- accept_ratio(n, m, Y[i-1],new_theta)Y[i]<-Y[i-1]+(new_theta-Y[i-1])*(runif(1)<alpha)}
plot(1:Nsim,X,ty="l",ylim=c(0.0,1.0))par(new=T)plot(1:Nsim,Y,col="red",ty="l",ylim=c(0.0,1.0))sample_pos <- seq(burn_in+1,Nsim,thin)XX <- X[sample_pos]YY <- Y[sample_pos]summary(XX)summary(YY)
burn-in
最初の500回は不変分布になっていない 可能性があるので捨てる
XとYのMCMCの過程をプロットし、ほぼ挙動が同じで あることを確認: mixing
thinning 50ステップごとにサンプリング マルコフ連鎖の自己相関を避け 近似的に独立なサンプルにする
> summary(XX) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.4754 0.6414 0.6799 0.6779 0.7160 0.8237 > summary(YY) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.4531 0.6383 0.6777 0.6766 0.7158 0.8497
事後分布
hist(XX, breaks="Scott", xlim=c(0.4,1.0))
次週までにやっておくこと (1) JAGSのインストール
(2) R2jagsのインストール
JAGSの導入 Macの場合
homebrewで導入できる
※ homebrew自体の導入は藤研究室HPの
リンク集参照
brew install jags
でインストールできる
R2jagsの導入
Rのパッケージインストーラーを使って R2jagsパッケージをインストール
ベイズ統計で実践モデリング 北大路書房
この本にある例題を使って、JAGSによる モデリングを勉強していく