日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

R语言 MCMC算法及其实现

發(fā)布時間:2023/12/9 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R语言 MCMC算法及其实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Metropolis-Hasting算法

Step 1: 選擇一個不可約Markov鏈轉移概率q(i,j),i,j∈\inS.再從S={1,2,… ,m}中選擇某個整數(shù).
Step 2: 令n=0以及x0=kx_0=kx0?=k.
Step 3: 產(chǎn)生一個隨機變量X使得P{X=j}=q(Xn,j)P\{X=j\}=q(X_n,j)P{X=j}=q(Xn?,j), 再產(chǎn)生一個隨機數(shù)U.
Step 4: 如果U<π(X)q(X,Xn)π(Xn)q(XN,X)U < \frac{\pi(X)q(X,X_n)}{\pi(X_n)q(X_N,X)}U<π(Xn?)q(XN?,X)π(X)q(X,Xn?)?, 則MH = X; 否則MH = XnX_nXn?.
Step 5:n←n+1,Xn=MHn\leftarrow n+1, X_n=MHnn+1,Xn?=MH.
Step 6: 返回Step 3.

建議分布的選擇方法:

(1)Metropolis選擇;(2)獨立抽樣;(3)單元素MH算法

舉例說明:

設觀測變量Y=(Y1,Y2,...,Yn)Y=(Y_1,Y_2,...,Y_n)Y=(Y1?,Y2?,...,Yn?)具有如下分布:
π(yi∣k,θ,λ)=θyie?θyi!,i=1,2,...,k,\pi(y_i|k,\theta,\lambda)=\frac{\theta^{y_i}e^{-\theta}}{y_{i}!},i=1,2,...,k,π(yi?k,θ,λ)=yi?!θyi?e?θ?,i=1,2,...,k,
π(yi∣k,θ,λ)=λyie?λyi!,i=k+1,k+2,...n.\pi(y_i|k,\theta,\lambda)=\frac{\lambda^{y_i}e^{-\lambda}}{y_i!}, i =k+1,k+2,...n.π(yi?k,θ,λ)=yi?!λyi?e?λ?,i=k+1,k+2,...n.
假定各參數(shù)的先驗分布為:
π(θ∣b1)=Gamma(0.5,b1),π(λ∣b2)=Gamma(0.5,b2),π(b1)=IG(0,1),π(b2)=IG(0,1),π(k)=Uniform(1,2,...,n),\pi(\theta|b_1)=Gamma(0.5,b_1),\\ \pi(\lambda|b_2)=Gamma(0.5,b_2),\\ \pi(b_1)=IG(0,1),\\ \pi(b_2)=IG(0,1),\\ \pi(k)=Uniform(1,2,...,n), π(θb1?)=Gamma(0.5,b1?),π(λb2?)=Gamma(0.5,b2?),π(b1?)=IG(0,1),π(b2?)=IG(0,1),π(k)=Uniform(1,2,...,n),
其中,k,θ,λk,\theta,\lambdak,θ,λ條件獨立,b1,b2b_1,b_2b1?,b2?獨立,以及\
Gamma(α,β)=1Γ(α)βαxα?1e?xβ,IG(α,β)=e?1βxΓ(α)βαxα+1,Uniform(1,2,...,n):P{X=j}=1/n,j=1,2,...,nGamma(\alpha,\beta)=\frac{1}{\Gamma(\alpha)\beta^{\alpha}}x^{\alpha-1}e^{-\frac{x}{\beta}},\\ IG(\alpha,\beta)=\frac{e^{-\frac{1}{\beta x}}}{\Gamma(\alpha)\beta^{\alpha}x^{\alpha+1}},\\ Uniform(1,2,...,n) : P\{X=j\}=1/n,j=1,2,...,nGamma(α,β)=Γ(α)βα1?xα?1e?βx?,IG(α,β)=Γ(α)βαxα+1e?βx1??,Uniform(1,2,...,n):P{X=j}=1/n,j=1,2,...,n
其中α\alphaα為形狀參數(shù),β\betaβ為刻度參數(shù)。
解答:
首先求解后驗分布:
π(k,θ,λ,b1,b2∣Y)=Πi=1kπ(Yi∣k,θ,λ)Πi=k+1nπ(Yi∣k,θ,λ)×π(θ∣b1)π(λ∣b2)π(b1)π(b2)π(k)=Πi=1kθYie?θYi!Πi=k+1nλYie?λYi!×1Γ(0.5)b1θ?0.5e?θb1×1Γ(0.5)b20.5λ?0.5e?λb2×e?1/b1e?1/b2b1b21n.\pi(k,\theta,\lambda,b_1,b_2|Y)=\Pi_{i=1}^k\pi(Y_i|k,\theta,\lambda)\Pi_{i=k+1}^{n}\pi(Y_i|k,\theta,\lambda)\\ \times\pi(\theta|b_1)\pi(\lambda|b_2)\pi(b_1)\pi(b_2)\pi(k)\\ =\Pi_{i=1}^k\frac{\theta^{Y_i}e^{-\theta}}{Y_i!}\Pi_{i=k+1}^n\frac{\lambda^{Y_i}e^{-\lambda}}{Y_i!}\times\frac{1}{\Gamma(0.5)b_1}\theta^{-0.5}e^{-\frac{\theta}{b_1}}\\ \times\frac{1}{\Gamma(0.5)b_2^{0.5}}\lambda^{-0.5}e^{-\frac{\lambda}{b_2}}\times\frac{e^{-1/b_1}e^{-1/b_2}}{b_1b_2}\frac{1}{n}.π(k,θ,λ,b1?,b2?Y)=Πi=1k?π(Yi?k,θ,λ)Πi=k+1n?π(Yi?k,θ,λ)×π(θb1?)π(λb2?)π(b1?)π(b2?)π(k)=Πi=1k?Yi?!θYi?e?θ?Πi=k+1n?Yi?!λYi?e?λ?×Γ(0.5)b1?1?θ?0.5e?b1?θ?×Γ(0.5)b20.5?1?λ?0.5e?b2?λ?×b1?b2?e?1/b1?e?1/b2??n1?.
各參數(shù)的滿條件分布為
π(θ∣k,λ,b1,b2,Y)∝Gamma(∑i=1kYi+0.5,b1kb1+1),π(λ∣k,θ,b1,b2,Y)∝Gamma(∑i=k+1nYi+0.5,b2(n?k)b2+1),π(k∣θ,λ,b1,b2,Y)∝θ∑i=1kYiλ∑i=k+1nYie?kθ?(n?k)λ,π(b1∣k,θ,λ,b2,Y)∝IG(0.5,11+θ),π(b1∣k,θ,λ,b1,Y)∝IG(0.5,11+λ).\pi(\theta|k,\lambda,b_1,b_2,Y)\propto Gamma(\sum_{i=1}^kY_i+0.5, \frac{b_1}{kb_1+1}),\\ \pi(\lambda|k,\theta,b_1,b_2,Y)\propto Gamma(\sum_{i=k+1}^nY_i+0.5,\frac{b_2}{(n-k)b_2+1}),\\ \pi(k|\theta,\lambda,b_1,b_2,Y)\propto\theta^{\sum_{i=1}^kY_i}\lambda^{\sum_{i=k+1}^nY_i}e^{-k\theta-(n-k)\lambda},\\ \pi(b_1|k,\theta,\lambda,b_2,Y)\propto IG(0.5,\frac{1}{1+\theta}),\\ \pi(b_1|k,\theta,\lambda,b_1,Y)\propto IG(0.5,\frac{1}{1+\lambda}).π(θk,λ,b1?,b2?,Y)Gamma(i=1k?Yi?+0.5,kb1?+1b1??),π(λk,θ,b1?,b2?,Y)Gamma(i=k+1n?Yi?+0.5,(n?k)b2?+1b2??),π(kθ,λ,b1?,b2?,Y)θi=1k?Yi?λi=k+1n?Yi?e?kθ?(n?k)λ,π(b1?k,θ,λ,b2?,Y)IG(0.5,1+θ1?),π(b1?k,θ,λ,b1?,Y)IG(0.5,1+λ1?).
<注:>由于編輯公式麻煩,只給出推導最后結果,中間步驟省略.
###Y的觀測數(shù)據(jù)


3 5 9 3 4 5 5 5 5 13 18 27 8 4 10 8 3 12 10 10 3 9 8 5 9 4 6 1 5 14 7 9 10 8 13 8 11 11 10 11 13 10 3 8 5

由于k滿條件分布不是標準分布,因此,用MH算法抽取ki+1k^{i+1}ki+1,而其他分部則使用Gibbs抽樣,其k的建議分布設為q(k,k′)=1m?1q(k,k')=\frac{1}{m-1}q(k,k)=m?11?.

使用R語言實現(xiàn)抽樣

mhsampler<-function(NUMIT=10000,dat=Y){n<-length(dat)mchain<-matrix(NA,nr=5,nc=NUMIT)kinit<-floor(n/2)mchain[,1]<-c(1,1,kinit,1,1)for(i in 2:NUMIT){currtheta<-mchain[1,i-1]currlambda<-mchain[2,i-1]currk<-mchain[3,i-1]currb1<-mchain[4,i-1]currb2<-mchain[5,i-1]##sample from full conditional distribution of theta(Gibbs update)currtheta<-rgamma(1,shape=sum(Y[1:currk])+.5,scale=currb1/(currk*currb1+1))##sample from full conditional distribution of lambda(Gibbs update)currlambda<-rgamma(1,shape=sum(Y[(currk+1):n])+.5,scale=currb2/((n-currk)*currb2+1))##sample from full conditional distribution of k(MH update)propk<-sample(x=seq(2,n-1),size=1) #draw one sample at random from uniform(2,..(n-1))##Matropolis accept-reject step(in log scale)logMHratio=sum(Y[1:propk])*log(currtheta)+sum(Y[(propk+1):n])*log(currlambda)-propk*currtheta-(n-propk)*currlambda-(sum(Y[1:currk])*log(currtheta)+sum(Y[(currk+1):n])*log(currlambda)-currk*currtheta-(n-currk)*currlambda)logalpha<-min(0,logMHratio) #alpha=min(1,MHratio)if (log(runif(1))<logalpha){currk<-propk}currk=currk #if we do not sample k (k fixed)## sample from full conditional distribution of b1 (Gibbs update: draw from inverse Gamma)currb1<-1/rgamma(1,shape=.5,scale=1/(currtheta+1))## sample from full conditional distribution of b2 (Gibbs update: draw from inverse Gamma)currb2<-1/rgamma(1,shape=.5,scale=1/(currlambda+1))## update chain with new valuesmchain[,i]=c(currtheta,currlambda,currk,currb1,currb2)}return(mchain) }

最后可以運行apply(mhsampler(),1,mean)獲得θ,λ,k,b1,b2\theta,\lambda,k,b_1,b_2θ,λ,k,b1?,b2?的后驗均值估計。

總結

以上是生活随笔為你收集整理的R语言 MCMC算法及其实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。