天天看點

R語言馬爾可夫MCMC中的Metropolis Hastings,MH算法抽樣(采樣)法可視化執行個體

介紹

Metropolis Hastings 算法是一種非常簡單的算法,用于從難以采樣的分布中生成樣本。

假設我們要從分布 π 中進行采樣,我們将其稱為“目标”分布。為簡單起見,我們假設 π是實線上的一維分布,盡管它很容易擴充到一維以上(見下文)。

MH 算法通過模拟​​馬爾可夫​​鍊來工作,其平穩分布為 π。這意味着,從長遠來看,來自馬爾可夫鍊的樣本看起來像來自 π的樣本。正如我們将看到的,該算法非常簡單和靈活。

MH算法

轉移核

要實作 MH 算法,使用者必須提供一個“轉移核”QQ。轉移核隻是一種在 給定目前位置(例如 xx)的情況下随機移動到空間中新位置(例如 y)的方式。也就是說,Q 是給定 x 在 y 上的分布,我們将其寫成 Q(y|x)。在許多應用中,Q将是一個連續分布,在這種情況下 Q(y|x) 将是 y 上的密度,是以∫Q(y|x)dy=1(對于所有 x)。

例如,從目前位置 x 生成新位置 y 的一種非常簡單的方法是向 x添加一個 N(0,1) 随機數。即設定y=x+N(0,1),或者轉移y|x∼N(x,1)。是以

R語言馬爾可夫MCMC中的Metropolis Hastings,MH算法抽樣(采樣)法可視化執行個體

這種在目前位置x加上一些随機數得到y的核,在實際中經常使用,被稱為“随機遊走”核。

MH算法

使用轉移核 Q 從目标分布 π 中采樣的 MH 算法包括以下步驟:

  • 初始化,X1=x1 。
  • 對于 t=1,2,…
  • 從 Q(y|xt)中采樣 y。将 y 視為 xt+1 的“建議”值。
  • 計算
  • AA通常被稱為“接受機率”。
  • 以機率 A“接受”提議的值,并設定 xt+1=y。否則設定 xt+1=xt。

Metropolis 算法

請注意,上面給出的示例随機遊走建議 Q 對于所有 x,y 滿足 Q(y|x)=Q(x|y) 任何滿足這一點的建議都稱為“對稱”。當 Q 是對稱時,MH 算法中 A 的公式 簡化為:

R語言馬爾可夫MCMC中的Metropolis Hastings,MH算法抽樣(采樣)法可視化執行個體

該算法的這種特殊情況,具有 Q 對稱,首先由 Metropolis 等人在 1953 年提出,是以它有時被稱為“Metropolis 算法”。

示例

為了幫助了解 MH 算法,我們現在做一個簡單的例子:我們實作算法以從指數分布中采樣:

R語言馬爾可夫MCMC中的Metropolis Hastings,MH算法抽樣(采樣)法可視化執行個體

當然,以其他方式從指數分布中采樣會容易得多;我們隻是用它來說明算法。

請記住,π 被稱為“目标”分布,是以我們調用函數來計算 π  ​

​target​

​:

現在我們實作 MH 算法,使用上面提到的簡單正态随機遊走轉移核 Q。

這是代碼:

1.  x = rep(0,10000)
2.  x[1] = 3 #初始化;我任意地将其設定為3
3.  for(i in 2:10000){
4.   
5.  if(){
6.  x[i] = proposed_x # 以最小(1,A)的機率接受移動。
7.  } else {
8.  x[i] = current_x # 否則就 "拒絕 "移動,并留在原地。
9.  }
10.  }      

運作此代碼後,我們可以繪制馬爾可夫鍊 x 通路的位置(有時稱為軌迹圖)。

R語言馬爾可夫MCMC中的Metropolis Hastings,MH算法抽樣(采樣)法可視化執行個體

請記住,我們設計此算法是為了從指數分布中采樣。這意味着(隻要我們運作算法足夠長的時間!)x 的直方圖應該看起來像一個指數分布。在這裡我們檢查一下:

1.  hist(x)
2.   
3.  lines      
R語言馬爾可夫MCMC中的Metropolis Hastings,MH算法抽樣(采樣)法可視化執行個體

x 中的值的直方圖确實提供了與指數分布的緊密拟合。

結束語

MH 算法的一個特别有用的特性是,即使 隻知道π 是一個常數,它也可以實作:也就是說,對于一些已知的 f,π(x)=cf(x) , 但未知常數 c。這是因為該算法僅通過比率

R語言馬爾可夫MCMC中的Metropolis Hastings,MH算法抽樣(采樣)法可視化執行個體

依賴于π 。