Hastings-Metropolis演算法(離散型)
1. 問題
給定 個正數 ,( 可以取無窮大)令 。一般來說 很大,這樣 就很難計算。如何模擬一個隨機變數其分布率為 ?
2.Hastings-Metropolis演算法
下面將我們構造一個可逆的馬爾科夫鏈,其極限分布為 。假設 為狀態空間 上的不可約隨機矩陣,即(1) ;(2) 。
生成一個可逆的馬爾科夫鏈 方法為:
(1) 假設 那麼根據分布 生成一個 ,
(2) 然後再以 的概率令 ,以 的概率令 ,其中 。
該方法稱為Hastings-Metropolis演算法。
3. 命題
是可逆的馬爾科夫鏈,其轉移矩陣為 ,其中 , 為的平穩分布。
4.Hastings-Metropolis演算法步驟
(1). 選擇一個狀態空間為 的不可約Markov轉移概率矩陣 ,從 中任選一個數 ;
(2). 令 ;
(3). 根據分布 生成一個隨機數 ,使得 ,並且生成一個隨機數 ;
(4). 如果 ,那麼 ;否則 ;
(5). ;
(6). 返回到(3).
5.例子
假設 為 的一個排列, 為滿足 的排列的個數,其中 為給定的常數,如何估計 的個數?下面我們利用Hastings-Metropolis演算法進行估計。
(1) 如何在排列集合上定義一個轉移矩陣為任意兩個排列?
首先我們先定義鄰域的概念。假設 是一個排列,若 為 上任意兩個位置的數交換後得到的排列,那麼稱 為 的鄰居。例如 就是 的一個鄰居。令 為 的鄰居 , 這樣我們定義 , ,即從 出發,等可能地達到它任意一個鄰居。
(2) 定義
因為極限分布為 ,這樣 .於是
.如果 ,則 .
(3) 演算法步驟
- 步驟1 任意選擇一個排列 ;
- 步驟2 令 ;
- 步驟3 從 的鄰域中隨機選取一個排列 ;
- 步驟4 如果 ,則 ;如果 ,則生成一個隨機數 ,若 ,則 ,否則 .
- 步驟5
- 步驟6 返回到步驟3
(4) 模擬的馬爾科夫鏈 的極限分布為 。
6.作業
(1)給出上面例子的R程序;
(2)假設 ,請利用Hastings-Metropolis演算法模擬分布 的方差。
解: , ,首先利用Hastings-Metropolis演算法模擬分布 .令 馬爾科夫鏈為 其極限分布為 ,那麼 的極限分布為 .
推薦閱讀:
※如何評價台灣新開唯一一家H&M引起轟動並趁機嘲笑大陸的事件?
※如何評價16年HM和Kenzo的聯名款?
※為什麼zara的衣服質量奇差,價格虛高,店員態度差,還有那麼多人排隊去買?