Title:WinBUGS

首先假設看到這個問題的人,有在使用WinBUGS而且已經妥善安裝好了。 使用WinBUGS最麻煩的問題是要在他的software下去調整參數的設定,其實是一件非常麻煩的事情,特別是要做一些大量的模擬研究的時候,所以我個人還是習慣在R底下做事,R2WinBUGS就可以解決這個問題。

以下以Bayesian change point的問題來做個介紹,這個問題以年為單位發生coal mining災難的次數,分析並找出平均災難發生次數變化的年份, 用R2WinBUGS不能避免的還是要另外寫一個.BUG檔來描述整個Bayesian model。


#bugs model
model
{
  for(year in 1:N)
  {
  D[year] ~ dpois(mu[year])
  log(mu[year]) ~ b[1] + step(year - changeyear) * b[2]
  }
  for(j in 1:2) {b[j] ~ dnorm(0.0, 1.0E-6)}
  changeyear ~ dunif(1,N)
}

將以上模型存成"coalmining.bug",除此之外都在R裡面進行,以下為相關的參數設定與程式執行。 注意參數的名稱要與.bug檔一致

library(R2WinBUGS)
## Loading required package: coda
## Loading required package: lattice
## Loading required package: boot
## 
## Attaching package: 'boot'
## 
## The following object is masked from 'package:lattice':
## 
##     melanoma
library(coda)

 N=112
 D=c(4,5,4,1,0,4,3,4,0,6,
 3,3,4,0,2,6,3,3,5,4,5,3,1,4,4,1,5,5,3,4,2,5,2,2,3,4,2,1,3,2,
 1,1,1,1,1,3,0,0,1,0,1,1,0,0,3,1,0,3,2,2,
 0,1,1,1,0,1,0,1,0,0,0,2,1,0,0,0,1,1,0,2,
 2,3,1,1,2,1,1,1,1,2,4,2,0,0,0,1,4,0,0,0,
 1,0,0,0,0,0,1,0,0,1,0,0)
 data=list("N","D")
 parameters <- c("changeyear","b")
 inits = function() {list(b=c(0,0),changeyear=50)}

 coalmining.sim <- bugs (data, inits, parameters,
 "C:/Users/tai-chi/Documents/coalmining.bug", n.chains=1, n.iter=500,codaPkg=TRUE,debug=FALSE)

 coal.coda=read.bugs(coalmining.sim)
## Abstracting b[1] ... 250 valid values
## Abstracting b[2] ... 250 valid values
## Abstracting changeyear ... 250 valid values
## Abstracting deviance ... 250 valid values
 head(coal.coda)
## [[1]]
## Markov Chain Monte Carlo (MCMC) output:
## Start = 251 
## End = 257 
## Thinning interval = 1 
##       b[1]   b[2] changeyear deviance
## 251 0.9941 -1.229      41.82    338.5
## 252 1.1020 -1.384      39.78    336.5
## 253 1.1500 -1.099      40.50    336.3
## 254 1.1990 -1.329      40.03    334.5
## 255 1.1720 -1.516      41.28    338.7
## 256 1.1500 -1.224      35.78    341.3
## 257 1.2260 -1.352      39.33    335.3
## 
## attr(,"class")
## [1] "mcmc.list"