Loading [MathJax]/jax/output/HTML-CSS/jax.js

2016年8月29日 星期一

[貝氏] 有關ABC的一些筆記

ABC是Approximate Bayesian Computation的縮寫,名字真的還蠻俏皮的。由於實習的關係,目前為止已經被迫和這個東西相處了三個月,寫一篇筆記 。

與本文無關,純粹覺得好笑


基本上,貝氏統計基本上可以濃縮下面成一行:

π(θ|x)π(θ)p(y|θ)

π(θ|x)是所謂的後驗分配(posterior distribution),基本上是得用手算的,但通常來說不太可能,尤其是模型非常複雜的時候,於是就出現了MCMC (Monte-Carlo Markov chain)還有Variational Bayes之類的方法,讓大家日子在電腦的方著之下可以好過一點(應該說很多)。

但隨著大家的胃口越來越大,像是是在處理基因或是疾病散播問題時,很多時候模型已經複雜到連概似函數(likelihood function) p(y|θ) 都寫不出來。ABC就是為了這樣的情境而出現的。

Rejection sampling ABC


這是一個最基本的ABC演算法,假設我們有一個simulator S,基本上可以把S想成一個由參數空間 Θ 投射到資料空間 Y 的函數S:ΘY,如果Simulator S裡有潛在變數v的話simulator則寫成,S:Θ×VY

若是手上所收集到的資料是 y0 ,而先驗分配prior是 π(.) ,演算法的步驟如下

for i=1 to N do
    repeat
        從 π(.) 抽出θ
        由 S(θ) 產生 yθ
    until d(y0,yθ)<ϵ
    θ(i)θ
 end for

 d:Y×YR 是一個距離函數,用來定義生成的 yθ 和觀察到的 y0 兩筆資料的異同。這個函數可以是Mean square error或是其他特定的函數,而ϵ則是一個很小的容許值。值得注意的是,演算法中完全不需要定義所謂的likelihood函數。

由於likelihood函數的功能在上述的演算法中已經被d 函數所取代,所以如何定義一個好的d在ABC中就是一個非常重要的課題了。

普遍來說,直接比較兩筆資料很沒效率,所以一般而言會比較統計量,summary statistics sobsssimulated,而理論上,如果所選取的s是充分統計量(sufficient statistics)的話,p(θ|yobs)=p(θ|sobs)。而統計量的選曲又是一個很大的題目了,這裡先跳過哈哈哈哈。


MCMC-ABC


Rejection sampling是一個很直覺的做法,但是收斂速度往往很慢,因此MCMC-ABC之類方法就發展起來彌補其不足。

Metropolis-Hastings sampler

Metropolis-Hastings sampler [1] (以下簡稱MH)對熟悉貝氏統計的人應該都不算陌生,在進行MH的時候,必須要選定一個proposal distribution q(.|θ) 用以決定參數在抽樣時移動的行為。

設定起始值θ(0)

for t=1 to N do
    從 q(.|θ(t1)) 抽出θ
    計算 a=π(θ)p(y|θ)q(θ(t1)|θ)π(θ(t1))p(y|θ(t1))q(θ|θ(t1))
    抽出 uUniform(0,1)
    if u<a then
        θ(t)θ
    end if
    θ(t)θ(t1)
end for

MCMC-ABC


MCMC-ABC [2]等於模仿了MH只是用rejection sampling中比較生成資料的概念取代了需要概似函數的部分

for t=1 to N do
    從 q(.|θ(t1)) 抽出θ
    由 S(θ) 產生 yθ
    if d(y0,yθ)<ϵ then
        計算 a=π(θ)q(θ(t1)|θ)π(θ(t1))q(θ|θ(t1))
        抽出 uUniform(0,1)
        if u<a then
            θ(t)θ
        end if
    end if
    θ(t)θ(t1)
end for

搞了半天其實說穿了也沒什麼,呵呵。當然還有很多好事之徒發展了很多變形,這裡就不討論了。


提升效率


因為Simulator通常很複雜,也是最耗時的步驟,所以也有一些方法發展出來減少跑Simulator的次數以增進效率。這裡介紹Regression adjustment和BOLFI

Regression adjustment


一般來說,ϵ是越小越好,最好可以接近零。但是如果真的設定ϵ=0的話又很花時間,因為會製造成堆沒路用的simulated data。

因此,與其這樣,不如直接統計建模,描述探討θ和summery statistics s的關係。

θi=m(si)+ei

其中ei是error term。Beaumont [3]等人提出的方法是用一個簡單的線性回歸建模,

m(si)=α+βTsi

因此,在建模完成之後,就可以利用該模型回推回去若當 si=sobs 時, θ 會在哪裡,意即:

θi=m(sobs)+(ei)

而根據模型,可以估計ei

ei=θiˆm(si)

我們可以回推

θi=ˆm(sobs)+(θiˆm(si))

當然,市面上也有其他更複雜的模型用來描述 θs 的關係,這裡就不詳述了。

BOLFI


這個東西的全稱是叫做Bayesian Optimization for Likelihood-Free Inference of Simulator-Based Statistical Method [4]。個人目前不是很喜歡這個東西,但似乎大家都在用,所以稍微提一下(?)

其實就是使用Gaussian Process Optimisation的技巧,去針對θd(yθ,y0)的關係進行Gaussian process建模,並進行最佳化。

並且,在某些條件下,概似函數(likelihood)是可以由中央極限定理或是無母數的方法估計的,所以BOLFI也提供了一個直接由θ取得likelihood value的架構。


[1] Chib, Siddhartha, and Edward Greenberg. "Understanding the metropolis-hastings algorithm." The american statistician 49.4 (1995): 327-335.
[2] Marjoram, Paul, et al. "Markov chain Monte Carlo without likelihoods."Proceedings of the National Academy of Sciences 100.26 (2003): 15324-15328.
[3] Beaumont, Mark A., Wenyang Zhang, and David J. Balding. "Approximate Bayesian computation in population genetics." Genetics 162.4 (2002): 2025-2035.
[4] Gutmann, Michael U., and Jukka Corander. "Bayesian optimization for likelihood-free inference of simulator-based statistical models." arXiv preprint arXiv:1501.03291 (2015).