最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

R語言BUGS/JAGS貝葉斯分析: 馬爾科夫鏈蒙特卡洛方法(MCMC)采樣|附代碼數(shù)據(jù)

2023-08-21 21:58 作者:拓端tecdat  | 我要投稿

全文鏈接:http://tecdat.cn/?p=17884

最近我們被客戶要求撰寫關(guān)于BUGS/JAGS貝葉斯分析的研究報告,包括一些圖形和統(tǒng)計輸出。

在許多情況下,我們沒有足夠的計算能力評估空間中所有n維像素的后驗概率?。在這些情況下,我們傾向于利用稱為Markov-Chain Monte Carlo 算法的程序?。此方法使用參數(shù)空間中的隨機跳躍來(最終)確定后驗分布

相關(guān)視頻:馬爾可夫鏈原理可視化解釋與R語言區(qū)制轉(zhuǎn)換Markov regime switching實例

馬爾可夫鏈原理可視化解釋與R語言區(qū)制轉(zhuǎn)換Markov?regime?switching實例

相關(guān)視頻

馬爾可夫鏈蒙特卡羅方法MCMC原理與R語言實現(xiàn)

,時長08:47

馬爾科夫鏈蒙特卡洛方法

MCMC的關(guān)鍵如下:

跳躍概率的比例與后驗概率的比例成正比。

跳躍概率可以表征為:

概率(跳躍)*概率(接受)

從長遠來看,該鏈將花費大量時間在參數(shù)空間的高概率部分,從而實質(zhì)上捕獲了后驗分布。有了足夠的跳躍,長期分布將與聯(lián)合后驗概率分布匹配。

MCMC本質(zhì)上是一種特殊類型的隨機數(shù)生成器,旨在從難以描述(例如,多元,分層)的概率分布中采樣。在許多/大多數(shù)情況下,后驗分布是很難描述的概率分布。

MCMC使您可以從實際上不可能完全定義的概率分布中進行采樣!

令人驚訝的是,MCMC的核心并不難于描述或?qū)嵤?。讓我們看一個簡單的MCMC算法。

Metropolis-Hastings算法

該算法與模擬退火算法非常相似。

MH算法可以表示為:

Prob(acceptB | A)= min(1,Posterior(B)Posterior(A)?Prob(b→a)Prob(a→b))

請注意,從本質(zhì)上講,這與“ Metropolis”模擬退火算法相同,后驗概率代替了概率,并且?k?參數(shù)設(shè)置為1。

二元正態(tài)例子

請記住,MCMC采樣器只是隨機數(shù)生成器的一種。我們可以使用Metropolis-Hastings采樣器來開發(fā)自己的隨機數(shù)生成器,生成進行簡單的已知分布。在此示例中,我們使用MH采樣器從標準雙變量正態(tài)概率分布生成隨機數(shù)。

對于這個簡單的示例,我們不需要MCMC采樣器。一種實現(xiàn)方法是使用以下代碼,該代碼從具有相關(guān)參數(shù)ρ的雙變量標準正態(tài)分布中繪制并可視化任意數(shù)量的獨立樣本。

##################MCMC采樣的簡單示例########################### #首先,讓我們構(gòu)建一個從雙變量標準正態(tài)分布生成隨機數(shù)的函數(shù)rbvn<-function (n, rho) ? #用于從二元標準正態(tài)分布中提取任意數(shù)量的獨立樣本。{ ? ? ? ?x <- rnorm(n, 0, 1) ? ? ? ?y <- rnorm(n, rho * x, sqrt(1 - rho^2)) ? ? ? ?cbind(x, y)}########## 現(xiàn)在,從該分布圖中繪制隨機抽樣 bvn<-rbvn(10000,0.98)par(mfrow=c(3,2))plot(bvn,col=1:10000

################ #Metropolis-Hastings雙變量正態(tài)采樣器的實現(xiàn)...library(mvtnorm) ? ?# 加載一個包,該包使我們能夠計算mv正態(tài)分布的概率密度metropoli<- function (n, rho=0.98){ ? ?# 雙變量隨機數(shù)生成器的MCMC采樣器實現(xiàn) ? ?mat <- matrix(ncol = 2, nrow = n) ? # 用于存儲隨機樣本的矩陣 ? ?x <- 0 ? # 所有參數(shù)的初始值 ? ?prev <- dmvnorm(c(x,y),mean=c(0,0),sig # 起始位置分布的概率密度 ? ?mat[1, ] <- c(x, y) ? ? ? ?# 初始化馬爾可夫鏈 ? ? ?newx <- rnorm(1,x,0.5) ? ? # 進行跳轉(zhuǎn) ? ? ?newprob <- dmvnorm(c(newx,newy),sigma = ?# 評估跳轉(zhuǎn) ? ? ?ratio <- newprob/prev ? # 計算舊位置(跳出)和建議位置(跳到)的概率之比。 ? ? ?prob.accept <- min(1,ratio) ? ? # 決定接受新跳躍的概率! ? ? ?if(rand<=prob.accept){ ? ? ? ?x=newx;y=newy ? ?# 將x和y設(shè)置為新位置 ? ? ? ?mat[counter,] <- c(x,y) ? ?# 將其存儲在存儲陣列中 ? ? ? ?prev <- newprob ? ?# 準備下一次迭代

然后,我們可以使用MH采樣器從該已知分布中獲取隨機樣本…

############ 測試新的M-H采樣器bvn<-metropoli(10000,0.98)par(mfrow=c(3,2))plot(bvn,col=1:10000)plot(bvn,type=

點擊標題查閱往期內(nèi)容

R語言用WinBUGS 軟件對學(xué)術(shù)能力測驗建立層次(分層)貝葉斯模型

左右滑動查看更多

01

02

03

04

讓我們嘗試解決一個問題。

MCMC對粘液瘤病進行調(diào)查

#############黏液病示例的MCMC實現(xiàn)############

subset(MyxDat,grade==1

## ? grade day titer## 1 ? ? 1 ? 2 5.207## 2 ? ? 1 ? 2 5.734## 3 ? ? 1 ? 2 6.613## 4 ? ? 1 ? 3 5.997## 5 ? ? 1 ? 3 6.612## 6 ? ? 1 ? 3 6.810

選擇使用Gamma分布。這是經(jīng)驗分布:

############ 第100次可視化粘液病數(shù)據(jù)hist(Myx$titer,freq=FALSE)

我們需要估算最適合此經(jīng)驗分布的伽馬速率和形狀參數(shù)。這是適合此分布的Gamma的一個示例:

########## ...覆蓋生成模型的數(shù)據(jù)(伽瑪分布)curve(dgamma(x,shape=40,scale=0.15),add=T,col="red")

二維(對數(shù))似然面:

############### 定義二維參數(shù)空間##############shapevec <- seq(3,100,by=0.1) ? scalevec <- seq(0.01,0.5,by=0.001)############### #定義參數(shù)空間內(nèi)此網(wǎng)格上的似然面##############GammaLogLikelihoodFunction <- function(par}surface2D <- matrix(nrow=length(shapevec),ncol=length(scalevec)) ? #初始化存儲變量newparams <- c(sha ? ?surface2D[i,j] <- GammaLogLikelihoodFunction(newparams) ############# 可視化似然面############contour(x=shapevec,y=scalevec,z=surface2D,levels=c(-30,-40,-80,-500),add=T)

這是MH算法的實現(xiàn),用于找到后驗分布!

首先,我們需要一個似然函數(shù)–這次,我們將返回真實概率–而不是對數(shù)轉(zhuǎn)換的概率

#############編寫非對數(shù)轉(zhuǎn)換的似然函數(shù)GammaLike- function(params){ ?prod(dgamma(Myx$titer,shape=params['shape']params <- c(shape=40,

## shape scale ## 40.00 ?0.15

GammaLike(params)

## [1] 2.906766e-22

GammaLogLike(params)

## [1] -49.58983

然后,我們需要預(yù)先分配參數(shù)!在這種情況下,我們分配gamma(shape = 0.01,scale = 100)和gamma(shape = 0.1,scale = 10)的分布(均值為1且方差略低):

############## 函數(shù)返回參數(shù)空間中任意點的先驗概率密度GammaPriorFunction <- function(params){ ?prior <- c(shape=NA,scale=NA)],3,100) ? ? ? ? ?# prior['scale'] <- dunif(params['GammaLogPriorFunction <- function(params){ ?prior <- c(shape=NA,scale=NA)'],shape=0.001,scale=1000,log=T) ?# prior['shape'] <- dunif(params['shape'],3,100) ? ? ? ? ?# prior['scale'] <- dunif(params['curve(dgamma(x,shape=0.01,scale=1000),3,100)

params

## shape scale ## 40.00 ?0.15

GammaPrior(params)

## [1] 1.104038e-06

prior2D <- matrix(nrow=length(shapevec),ncol=length(scalevec)) ? # 初始化存儲變量newparams <- c(shape=50,scale=0 ?for(j in 1:length(scalevec)){ ? ?newparams['scale'] <- sca ############# 可視化似然面############image(x=shapevec,y=scalevec,z=prior2D,zlim

contour(x=shapevec,y=scalevec,z=prior2D,levels=c(-30,-40,-80,-500),add=T)

我們假設(shè)形狀和比例?在先驗中是?獨立的(聯(lián)合先驗的乘法概率)。然而,并沒有對后驗參數(shù)相關(guān)性提出相同的假設(shè),因為概率可以反映在后驗分布中。

然后,我們需要一個函數(shù),該函數(shù)可以計算參數(shù)空間中任何給定跳轉(zhuǎn)的后驗概率比率。因為我們正在處理?后驗概率的?比率,所以?我們不需要計算歸一化常數(shù)。

無需歸一化常數(shù),我們只需要計算加權(quán)似然比(即先驗加權(quán)的似然比)

############# 函數(shù)用于計算參數(shù)空間中任意兩點之間的后驗密度比PosteriorRatio <- function(oldguess,newguess ?oldLik <- max(1e-90,GammaLikelihoodFunction(oldguess)) ? # 計算舊猜測的可能性和先驗密度 ?newLik <- GammaLikelihoodFunction(newguess) ? ? ? ? ? ? # 在新的猜測值下計算可能性和先驗密度 ?return((newLik*newPrior)/(oldLik*oldPrior)) ? ? ? ? ?# 計算加權(quán)似然比}PosteriorRatio2 <- function(oldguess,newguess){ ?oldLogLik <- GammaLogLikelihoodFunction(oldguess) ? # 計算舊猜測的可能性和先驗密度 ?newLogLik <- GammaLogLikelihoodFunction(newguess) ? ? ? ? ? ? # 在新的猜測值下計算可能性和先驗密度 ?return(exp((newLogLik+newLogPrior)-(oldLogLik+oldLogPrior))) ? ? ? ? ?# 計算加權(quán)似然比}

## [1] 0.01436301

PosteriorRatio2(oldguess,newguess)

## [1] 0.01436301

然后,我們需要一個函數(shù)進行新的推測或在參數(shù)空間中跳轉(zhuǎn):

############# 為參數(shù)空間中的跳轉(zhuǎn)定義:使用正態(tài)分布函數(shù)進行新的推測newGuess <- function(oldguess) ?jump <- c(shape=rnorm(1,mean=0,sd=sdshapejump),scale=rnorm(1,0,sdscalejump)) ?newguess <- abs(oldguess + ju} ?# 在原始推測附近設(shè)置新的推測newGuess(oldguess=params) ?

## ? ? ?shape ? ? ?scale ## 35.7132110 ?0.1576337

newGuess(oldguess=params)

## ? ? ?shape ? ? ?scale ## 45.1202345 ?0.2094243

newGuess(oldguess=params)

## ? ? ? shape ? ? ? scale ## 42.87840436 ?0.08152061

現(xiàn)在,我們準備實現(xiàn)Metropolis-Hastings MCMC算法:

我們需要一個初始點:

########### 在參數(shù)spacer中設(shè)置起點startingvals <- c(shape=75,scale=0.28) ? ?# 算法的起點

測試函數(shù)

############ 嘗試我們的新函數(shù)newguess <- newGuess(startingvals) ? ?# 在參數(shù)空間中跳躍newguess

## ? ? ?shape ? ? ?scale ## 73.9663949 ?0.3149796

PosteriorRatio2(startingvals,newguess) ? # 后驗比例差異

## [1] 2.922783e-57

現(xiàn)在讓我們看一下Metropolis-Hastings:

################可視化Metropolis-Hastingschain.length <- 11gth,ncol=2)colnames(guesses) <- names(startingvals)guesses[1,] <- startingvalscounter <- 2 ?post.rat <- PosteriorRatio2(oldguess,newguess) ?prob.accept <- min(1,post ? ?oldguess <- newguess ? ?guesses[coun#可視化contour(x=shapevec,y=scal

我們運行更長的時間?

########### 獲取更多MCMC示例chain.length <- 100oldgucounter <- 2while(counter <= chain.length){ ?newguess <- newGuess(oldguess) ?post.rat <- Posterio ?rand <- runif(1) ?if(rand<=prob.accept){ewguess ? ?counter=counte#可視化image(x=shapevec,y=scalevec,z=suurface2D,levels=c(-30,-40,-80,-5lines(guesses,col="red")

更長的時間

#############更長的時間chain.length <- 1000oldguess <- startingvalschain.length,ncol=2)colnames(guesses) <- names(startingvals)guesses[1,] <- startingvaess) ?post.rat <- PosteriorRatio2(oldguess,newguess) ?prob.accept <- min(1,post.rat) ?rand <- runif(1) ? ?guesse#可視化image(x=shapevec,y=scalevec,rface2D,levels=c(-30,-40,-80,-500),a

看起來更好!搜索算法可以很好地找到參數(shù)空間的高似然部分!

現(xiàn)在,讓我們看一下“ shape”參數(shù)的鏈

############## 評估MCMC樣本的“軌跡圖” ...##### Shape 參數(shù)plot(1:chain.length,guesses[,'sha

對于比例參數(shù)?

###### 比例參數(shù)?plot(1:chain.length,guesses[,'scale'],type="l

我們可以說這些鏈已經(jīng)收斂于形狀參數(shù)的后驗分布嗎?

首先,鏈的起點“記住”起始值,因此不是固定分布。我們需要刪除鏈的第一部分。

############# 刪除預(yù)燒期(允許MCMC有一段時間達到后驗概率)burn.in <- 100MCMCsamples <- guesses[-c(1:burn.in),]


但這看起來還不是很好。讓我們運行更長的時間,看看是否得到的東西看起來更像是隨機數(shù)生成器(白噪聲)

########### 再試一次-運行更長的時間chain.length <- 20000oldguess <- startingvo2(oldguess,newguess) ?prob.accept <- mi

讓我們首先刪除前5000個樣本作為預(yù)燒期

############## 使用更長的“預(yù)燒”burn.in <- 5000MCMCsamples <- guesses[-c(1:bur

現(xiàn)在,讓我們再次看一下鏈條

在評估這些跡線圖時,我們希望看到看起來像白噪聲的“平穩(wěn)分布”。該軌跡圖看起來可能具有一些自相關(guān)。解決此問題的一種方法是稀疏MCMC樣本:

########### “稀疏” MCMC樣本thinnedMCMC <- MCMCsamples[seq(1,chain.length,by=5),]

現(xiàn)在我們可以檢查我們的后驗分布!

# 可視化后驗分布plot(density(thinnedMCMC[,'scale'])

我們可以像以前一樣可視化。

########## 更多后驗概率檢察par(mfrow=c(3,2))plot(thinnedMCMC,col=1:10000)plot(thinnedMCMC,type="l")

可以修改Metropolis-Hastings MCMC方法來擬合任意模型的任意數(shù)量的自由參數(shù)。但是,MH算法本身不一定是最有效和靈活的。在實驗中,我們使用吉布斯采樣,大多采用建模語言?BUGS?。

注意:BUGS實現(xiàn)(例如JAGS)實際上傾向于結(jié)合使用MH和Gibbs采樣,MH和Gibbs采樣器并不是唯一的MCMC例程。例如,“ stan”使用MH采樣的一種改進形式,稱為“ Hamiltonian Monte Carlo”。

吉布斯Gibbs采樣器

Gibbs采樣器非常簡單有效?;旧?,該算法從完整的條件?概率分布(即,?在模型中所有其他參數(shù)的已知值作為條件的條件下,對任意參數(shù)i的后驗分布)中進行?連續(xù)采樣?。

在很多情況下,我們不能直接制定出我們的模型后驗分布,但我們?可以?分析出條件后驗分布。盡管如此,即使它在分析上不易處理,我們也可以使用單變量MH程序作為最后方法。

問:為什么Gibbs采樣器通常比純MH采樣器效率更高?

二元正態(tài)例子

MCMC采樣器只是隨機數(shù)生成器的一種。我們可以使用Gibbs采樣器來開發(fā)自己的隨機數(shù)生成器,以實現(xiàn)相當(dāng)簡單的已知分布。在此示例中,我們使用Gibbs采樣器從標準雙變量正態(tài)概率分布生成隨機數(shù)。注意,吉布斯采樣器在許多方面都比MH算法更簡單明了。

##############Gibbs采樣器的簡單示例###################### 首先,回顧一下我們簡單的雙變量正態(tài)采樣器rbvn<-function (n, rho){ ?#f函數(shù)用于從雙變量標準正態(tài)分布中提取任意數(shù)量的獨立樣本。 ? ? ? ?x <- rnorm(n, 0, 1) ? ? ? ?y <- rnorm(n, rho * x, sqrt(1 - rho^2))

############## 現(xiàn)在構(gòu)造一個吉布斯采樣器gibbs<-function (n, rho){ ? ?# 雙變量隨機數(shù)生成器的gibbs采樣器實現(xiàn) ? ?mat <- matrix(ncol = 2, nrow = n) ? # 用于存儲隨機樣本的矩陣 ? ?mat[1, ] <- c(x, y) ? ? ? ?# initialize the markov chain ? ?for (i in 2:n) { ? ? ? ? ? ?x <- rnorm(1, rho * y, sqrt(1 - rho^2)) ? ? ? ?# 以y為條件的x中的樣本 ? ? ? ? ? ?y <- rnorm(1, rho * x, sqrt(1 - rho^2)) ? ? ? ?# 以x為條件的y中的樣本 ? ? ? ? ? ?mat[i, ] <- c(x, y)

然后,我們可以使用Gibbs采樣器從該已知分布中獲取隨機樣本…

########### 測試吉布斯采樣器plot(ts(bvn[,2]))hist(bvn[,1],40)hist(bvn[,2],40)

在這里,馬爾可夫鏈的樣本中有很多明顯的自相關(guān)。Gibbs采樣器經(jīng)常有此問題。

示例

BUGS語言

最后,讓我們?yōu)槲覀冏钕矚g的粘瘤病示例創(chuàng)建一個Gibbs采樣器,為此,我們將使用BUGS語言(在JAGS中實現(xiàn))來幫助我們!

JAGS,全稱是Just another Gibbs sampler,是基于BUGS語言開發(fā)的利用MCMC來進行貝葉斯建模的軟件包。它沒有提供建模所用的GUI以及MCMC抽樣的后處理,這些要在其它的程序軟件上來處理,比如說利用R包(rjags)來調(diào)用JAGS并后處理MCMC的輸出。JAGS相對于WinBUGS/OpenBUGS的主要優(yōu)點在于平臺的獨立性,可以應(yīng)用于各種操作系統(tǒng),而WinBUGS/OpenBUGS只能應(yīng)用于windows系統(tǒng);JAGS也可以在64-bit平臺上以64-bit應(yīng)用來進行編譯。

BUGS語言看起來與R類似,但是有幾個主要區(qū)別:

  • 首先,BUGS是一種編譯語言,因此代碼中的操作順序并不重要

  • BUGS不是矢量化的-您需要使用FOR循環(huán)

  • 在BUGS中,幾個概率分布的參數(shù)差異很大。值得注意的是,正態(tài)分布通過均值和精度(1 / Variance )進行參數(shù)化。

這是用BUGS語言實現(xiàn)的粘液病示例:

model { ?############# ?# 似然 ?############ ?for(obs in 1:n.observations){ ? ?titer[obs] ~ dgamma(shape,rate ?############# ?# 先驗 ?############ ?rate <- 1/scale ? # 將BUGS的scale參數(shù)轉(zhuǎn)換為“ rate”}

我們可以使用R中的“ cat”函數(shù)將此模型寫到您的工作目錄中的文本文件中:

############ BUGS建模語言中的粘液瘤示例########### 將BUGS模型寫入文件cat(" ?model { ? ?############# ? ?# 似然 ? ?############ ? ?for(obs in 1:n.observations){ ? ? ?titer[obs] ~ dgamma(shape,rate) ? ?############# ? ?# 先驗 ? ?############ ? ?shape ~ dgamma(0.001,0.001file="BUGSmodel.txt")

現(xiàn)在我們已經(jīng)將BUGS模型打包為文本文件,我們將數(shù)據(jù)捆綁到一個列表對象中,該列表對象包含BUGS代碼中引用的所有相關(guān)數(shù)據(jù):

############# 將數(shù)據(jù)封裝到單個“列表”對象中myx.data <- list( ?n.observations = length(Myx$titer

## $titer## ?[1] 5.207 5.734 6.613 5.997 6.612 6.810 5.930 6.501 7.182 7.292 7.819## [12] 7.489 6.918 6.808 6.235 6.916 4.196 7.682 8.189 7.707 7.597 7.112## [23] 7.354 7.158 7.466 7.927 8.499## ## $n.observations## [1] 27

然后,我們需要為所有參數(shù)定義初始值。將其定義為一個函數(shù)很方便,因此可以使用不同的起始值來初始化每個MCMC鏈。?

############ 用于為所有自由參數(shù)生成隨機初始值的函數(shù)init.vals.for.bugs()

## $shape## [1] 51.80414## ## $scale## [1] 0.2202549

init.vals.for.bugs()

## $shape## [1] 89.85618## ## $scale## [1] 0.2678733

init.vals.for.bugs()

## $shape## [1] 69.22457## ## $scale## [1] 0.1728908

現(xiàn)在我們可以調(diào)用JAGS!

############ 運行 JAGS ##########

## Loading required package: rjags

## The following object is masked from 'package:coda':## ## ? ? traceplot

jags.fit <- run.jags(model="BUGSmodel.txt",

## Compiling rjags model...## Calling the simulation using the rjags method...## Adapting the model for 100 iterations...## Running the model for 5000 iterations...## Simulation complete## Finished running the simulation

jags.fit) ? # 轉(zhuǎn)換為“ MCMC”對象(CODA包)

## ## Iterations = 101:5100## Thinning interval = 1 ## Number of chains = 3 ## Sample size per chain = 5000 ## ## 1. Empirical mean and standard deviation for each variable,## ? ?plus standard error of the mean:## ## ? ? ? ? ?Mean ? ? ? SD ?Naive SE Time-series SE## shape 51.6013 14.36711 0.1173070 ? ? ? 2.216657## scale ?0.1454 ?0.04405 0.0003597 ? ? ? 0.006722## ## 2. Quantiles for each variable:## ## ? ? ? ? ? 2.5% ? ? 25% ? ? 50% ? ? 75% ? 97.5%## shape 28.76333 40.9574 50.1722 60.2463 82.7532## scale ?0.08346 ?0.1148 ?0.1378 ?0.1687 ?0.2389

plot(jagsfit.mcmc)

評估收斂

第一步是視覺檢查-我們尋找以下內(nèi)容來評估收斂性:

  • 當(dāng)視為“軌跡圖”時,每個參數(shù)的鏈應(yīng)看起來像白噪聲(模糊的毛毛蟲)或類似的噪聲

  • 多個具有不同起始條件的鏈條看起來應(yīng)該相同

我們可能在這里可以做得更好的一種方法是使鏈條運行更長的時間,并丟棄初始樣本我們還可以。

通過細化鏈來嘗試減少自相關(guān),我們每20個樣本中僅保留1個。

#################運行鏈更長時間jags.fit <- sample = 10000,n.chains = 3,adapt = 1000,burnin = 1000, ? ? ? ? ? ? ? ? ? ? summarise = FALSE,thin=20,method = "parallel" )

## Calling 3 simulations using the parallel method...## Following the progress of chain 1 (the program will wait for all## chains to finish before continuing):## Welcome to JAGS 4.2.0 on Wed Oct 23 11:33:35 2019## JAGS is free software and comes with ABSOLUTELY NO WARRANTY## Loading module: basemod: ok## Loading module: bugs: ok## . . Reading data file data.txt## . Compiling model graph## ? ?Resolving undeclared variables## ? ?Allocating nodes## Graph information:## ? ?Observed stochastic nodes: 27## ? ?Unobserved stochastic nodes: 2## ? ?Total graph size: 37## . Reading parameter file inits1.txt## . Initializing model## . Adapting 1000## -------------------------------------------------| 1000## ++++++++++++++++++++++++++++++++++++++++++++++++++ 100%## Adaptation successful## . Updating 1000## -------------------------------------------------| 1000## ************************************************** 100%## . . . Updating 200000## -------------------------------------------------| 200000## ************************************************** 100%## . . . . Updating 0## . Deleting model## . ## All chains have finished## Simulation complete. ?Reading coda files...## Coda files loaded successfully## Finished running the simulation

jagsfit.mcmc <- as.mcmc.list ?# 轉(zhuǎn)換為“ MCMC”對象(CODA包)

## ## Iterations = 2001:201981## Thinning interval = 20 ## Number of chains = 3 ## Sample size per chain = 10000 ## ## 1. Empirical mean and standard deviation for each variable,## ? ?plus standard error of the mean:## ## ? ? ? ? ?Mean ? ? ?SD ?Naive SE Time-series SE## shape 47.1460 12.9801 0.0749404 ? ? ? 0.292218## scale ?0.1591 ?0.0482 0.0002783 ? ? ? 0.001075## ## 2. Quantiles for each variable:## ## ? ? ? ? ? 2.5% ? ? 25% ? ? 50% ? ? 75% ? 97.5%## shape 25.14757 37.9988 45.9142 55.1436 75.5850## scale ?0.09147 ?0.1256 ?0.1509 ?0.1825 ?0.2773

plot(jagsfit.mcmc)

從視覺上看,這看起來更好?,F(xiàn)在我們可以使用更多的定量收斂指標。

Gelman-Rubin診斷

一種簡單而直觀的收斂診斷程序是?Gelman-Rubin診斷程序,該診斷程序基于簡單的蒙特卡洛誤差來評估鏈之間是否比應(yīng)有的鏈距更大:

############### 運行收斂診斷gelman(jagsfit.mcmc)

## Potential scale reduction factors:## ## ? ? ? Point est. Upper C.I.## shape ? ? ? ? ?1 ? ? ? 1.00## scale ? ? ? ? ?1 ? ? ? 1.01## ## Multivariate psrf## ## 1

通常,1.1或更高的值被認為收斂不佳。為模型中的所有可用參數(shù)計算GR診斷。如果測試失敗,則應(yīng)嘗試運行更長的鏈!

所以這個模型看起來不錯!

點擊文末?“閱讀原文”

獲取全文完整代碼數(shù)據(jù)資料。

本文選自《R語言BUGS/JAGS貝葉斯分析: 馬爾科夫鏈蒙特卡洛方法(MCMC)采樣》。

點擊標題查閱往期內(nèi)容

R語言MCMC:Metropolis-Hastings采樣用于回歸的貝葉斯估計
Python用MCMC馬爾科夫鏈蒙特卡洛、拒絕抽樣和Metropolis-Hastings采樣算法
R語言貝葉斯METROPOLIS-HASTINGS GIBBS 吉布斯采樣器估計變點指數(shù)分布分析泊松過程車站等待時間
R語言馬爾可夫MCMC中的METROPOLIS HASTINGS,MH算法抽樣(采樣)法可視化實例
python貝葉斯隨機過程:馬爾可夫鏈Markov-Chain,MC和Metropolis-Hastings,MH采樣算法可視化
Python貝葉斯推斷Metropolis-Hastings(M-H)MCMC采樣算法的實現(xiàn)
Metropolis Hastings采樣和貝葉斯泊松回歸Poisson模型
Matlab用BUGS馬爾可夫區(qū)制轉(zhuǎn)換Markov switching隨機波動率模型、序列蒙特卡羅SMC、M H采樣分析時間序列R語言RSTAN MCMC:NUTS采樣算法用LASSO 構(gòu)建貝葉斯線性回歸模型分析職業(yè)聲望數(shù)據(jù)
R語言BUGS序列蒙特卡羅SMC、馬爾可夫轉(zhuǎn)換隨機波動率SV模型、粒子濾波、Metropolis Hasting采樣時間序列分析
R語言Metropolis Hastings采樣和貝葉斯泊松回歸Poisson模型
R語言貝葉斯MCMC:用rstan建立線性回歸模型分析汽車數(shù)據(jù)和可視化診斷
R語言貝葉斯MCMC:GLM邏輯回歸、Rstan線性回歸、Metropolis Hastings與Gibbs采樣算法實例
R語言貝葉斯Poisson泊松-正態(tài)分布模型分析職業(yè)足球比賽進球數(shù)
R語言用Rcpp加速Metropolis-Hastings抽樣估計貝葉斯邏輯回歸模型的參數(shù)
R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機森林算法預(yù)測心臟病
R語言中貝葉斯網(wǎng)絡(luò)(BN)、動態(tài)貝葉斯網(wǎng)絡(luò)、線性模型分析錯頜畸形數(shù)據(jù)
R語言中的block Gibbs吉布斯采樣貝葉斯多元線性回歸
Python貝葉斯回歸分析住房負擔(dān)能力數(shù)據(jù)集
R語言實現(xiàn)貝葉斯分位數(shù)回歸、lasso和自適應(yīng)lasso貝葉斯分位數(shù)回歸分析
Python用PyMC3實現(xiàn)貝葉斯線性回歸模型
R語言用WinBUGS 軟件對學(xué)術(shù)能力測驗建立層次(分層)貝葉斯模型
R語言Gibbs抽樣的貝葉斯簡單線性回歸仿真分析
R語言和STAN,JAGS:用RSTAN,RJAG建立貝葉斯多元線性回歸預(yù)測選舉數(shù)據(jù)
R語言基于copula的貝葉斯分層混合模型的診斷準確性研究
R語言貝葉斯線性回歸和多元線性回歸構(gòu)建工資預(yù)測模型
R語言貝葉斯推斷與MCMC:實現(xiàn)Metropolis-Hastings 采樣算法示例
R語言stan進行基于貝葉斯推斷的回歸模型
R語言中RStan貝葉斯層次模型分析示例
R語言使用Metropolis-Hastings采樣算法自適應(yīng)貝葉斯估計與可視化
R語言隨機搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型
WinBUGS對多元隨機波動率模型:貝葉斯估計與模型比較
R語言實現(xiàn)MCMC中的Metropolis–Hastings算法與吉布斯采樣
R語言貝葉斯推斷與MCMC:實現(xiàn)Metropolis-Hastings 采樣算法示例
R語言使用Metropolis-Hastings采樣算法自適應(yīng)貝葉斯估計與可視化
視頻:R語言中的Stan概率編程MCMC采樣的貝葉斯模型
R語言MCMC:Metropolis-Hastings采樣用于回歸的貝葉斯估計


R語言BUGS/JAGS貝葉斯分析: 馬爾科夫鏈蒙特卡洛方法(MCMC)采樣|附代碼數(shù)據(jù)的評論 (共 條)

分享到微博請遵守國家法律
嵩明县| 襄汾县| 南岸区| 江津市| 措美县| 太仆寺旗| 安平县| 东港市| 丹棱县| 察哈| 勃利县| 东明县| 华坪县| 海晏县| 木兰县| 正镶白旗| 合作市| 横山县| 千阳县| 湘潭市| 密云县| 桐梓县| 尤溪县| 安新县| 高雄市| 长治市| 清新县| 宜良县| 竹溪县| 尤溪县| 栾城县| 德清县| 逊克县| 鄂温| 泗洪县| 奉贤区| 新竹县| 介休市| 乐亭县| 微博| 保德县|