Title: | Running OpenBUGS from R |
---|---|
Description: | Using this package, it is possible to call a BUGS model, summarize inferences and convergence in a table and graph, and save the simulations in arrays for easy access in R. |
Authors: | originally written as R2WinBUGS by Andrew Gelman <[email protected]>; changes and packaged by Sibylle Sturtz <[email protected]> and Uwe Ligges <[email protected]>. With considerable contributions by Gregor Gorjanc <[email protected]> and Jouni Kerman <[email protected]>. Adapted to R2OpenBUGS from R2WinBUGS by Neal Thomas. |
Maintainer: | Neal Thomas <[email protected]> |
License: | GPL-2 |
Version: | 3.2-3.2.1 |
Built: | 2024-12-10 06:57:07 UTC |
Source: | CRAN |
R2OpenBUGS Call a BUGS model,
summarize inferences and convergence in a table and graph, and save the
simulations in arrays for easy access in R. The main command is bugs
.
The following are sources of information on R2OpenBUGS package:
DESCRIPTION file | library(help="R2OpenBUGS")
|
This file | package?R2OpenBUGS
|
Vignette | vignette("R2OpenBUGS")
|
Some help files | bugs
|
write.model
|
|
print.bugs
|
|
plot.bugs
|
|
News | file.show(system.file("NEWS", package="R2OpenBUGS"))
|
Function converting results from Markov chain simulations,
that might not be from BUGS, to bugs object. Used mainly to display
results with plot.bugs
.
as.bugs.array(sims.array, model.file=NULL, program=NULL, DIC=FALSE, DICOutput=NULL, n.iter=NULL, n.burnin=0, n.thin=1)
as.bugs.array(sims.array, model.file=NULL, program=NULL, DIC=FALSE, DICOutput=NULL, n.iter=NULL, n.burnin=0, n.thin=1)
sims.array |
3-way array of simulation output, with dimensions n.keep, n.chains, and length of combined parameter vector. |
model.file |
file containing the model written in OpenBUGS code |
program |
the program used |
DIC |
logical; whether DIC should be calculated, see also
argument |
DICOutput |
DIC value |
n.iter |
number of total iterations per chain used for generating
|
n.burnin |
length of burn in, i.e. number of iterations to
discarded at the beginning for generating |
n.thin |
thinning rate, a positive integer, used for generating
|
This function takes a 3-way array of simulations and makes it into a
bugs
object that can be conveniently displayed using
print
and plot
and accessed using attach.bugs
. If
the third dimension of sims() has names, the resulting bugs object will
respect that naming convention. For example, if the parameter names are
“alpha[1]”, “alpha[2]”, ..., “alpha[8]”,
“mu”, “tau”, then as.bugs.array
will know that
alpha is a vector of length 8, and mu and tau are scalar parameters.
These will all be plotted appropriately by plot
and attached
appropriately by attach.bugs
.
If DIC=TRUE
then DIC can be either already passed to argument
DICOutput
or calculated
from deviance values in sims.array
.
A bugs
object is returned
Jouni Kerman, [email protected] with modification
by Andrew Gelman,
[email protected], packaged by Uwe
Ligges, [email protected].
The database is attached/detached to the search path. See
attach
for details.
attach.all(x, overwrite = NA, name = "attach.all") attach.bugs(x, overwrite = NA) detach.all(name = "attach.all") detach.bugs()
attach.all(x, overwrite = NA, name = "attach.all") attach.bugs(x, overwrite = NA) detach.all(name = "attach.all") detach.bugs()
x |
An object, which must be of class |
overwrite |
If |
name |
The name of the environment where |
While attach.all
attaches all elements of an object x
to
a database called name
, attach.bugs
attaches all
elements of x$sims.list
to the database bugs.sims
itself
making use of attach.all
.
detach.all
and detach.bugs
are removing the databases
mentioned above.attach.all
also attaches n.sims
(the
number of simulations saved from the MCMC runs) to the database.
Each scalar parameter in the model is attached as vectors of length
n.sims
, each vector is attached as a 2-way array (with first
dimension equal to n.sims
), each matrix is attached as a 3-way
array, and so forth.
attach.all
and attach.bugs
invisibly return the
environment
(s).
detach.all
and detach.bugs
detach the
environment
(s) named name
created by attach.all
.
Without detaching, do not use attach.all
or attach.bugs
on another (bugs
) object, because instead of the given name, an
object called name
is attached. Therefore strange things may
happen ...
# An example model file is given in: model.file <- system.file("model", "schools.txt", package="R2OpenBUGS") # Some example data (see ?schools for details): data(schools) J <- nrow(schools) y <- schools$estimate sigma.y <- schools$sd data <- list ("J", "y", "sigma.y") inits <- function(){ list(theta = rnorm(J, 0, 100), mu.theta = rnorm(1, 0, 100), sigma.theta = runif(1, 0, 100)) } parameters <- c("theta", "mu.theta", "sigma.theta") ## Not run: ## See ?bugs if the following fails: schools.sim <- bugs(data, inits, parameters, model.file, n.chains = 3, n.iter = 1000, working.directory = NULL) # Do some inferential summaries attach.bugs(schools.sim) # posterior probability that the coaching program in school A # is better than in school C: print(mean(theta[,1] > theta[,3])) # 50 # and school C's program: print(quantile(theta[,1] - theta[,3], c(.25, .75))) plot(theta[,1], theta[,3]) detach.bugs() ## End(Not run)
# An example model file is given in: model.file <- system.file("model", "schools.txt", package="R2OpenBUGS") # Some example data (see ?schools for details): data(schools) J <- nrow(schools) y <- schools$estimate sigma.y <- schools$sd data <- list ("J", "y", "sigma.y") inits <- function(){ list(theta = rnorm(J, 0, 100), mu.theta = rnorm(1, 0, 100), sigma.theta = runif(1, 0, 100)) } parameters <- c("theta", "mu.theta", "sigma.theta") ## Not run: ## See ?bugs if the following fails: schools.sim <- bugs(data, inits, parameters, model.file, n.chains = 3, n.iter = 1000, working.directory = NULL) # Do some inferential summaries attach.bugs(schools.sim) # posterior probability that the coaching program in school A # is better than in school C: print(mean(theta[,1] > theta[,3])) # 50 # and school C's program: print(quantile(theta[,1] - theta[,3], c(.25, .75))) plot(theta[,1], theta[,3]) detach.bugs() ## End(Not run)
The bugs
function takes data and starting values as
input. It automatically writes a OpenBUGS script, calls the model, and
saves the simulations for easy access in R.
bugs(data, inits, parameters.to.save, n.iter, model.file="model.txt", n.chains=3, n.burnin=floor(n.iter / 2), n.thin=1, saveExec=FALSE,restart=FALSE, debug=FALSE, DIC=TRUE, digits=5, codaPkg=FALSE, OpenBUGS.pgm=NULL, working.directory=NULL, clearWD=FALSE, useWINE=FALSE, WINE=NULL, newWINE=TRUE, WINEPATH=NULL, bugs.seed=1, summary.only=FALSE, save.history=(.Platform$OS.type == "windows" | useWINE==TRUE), over.relax = FALSE)
bugs(data, inits, parameters.to.save, n.iter, model.file="model.txt", n.chains=3, n.burnin=floor(n.iter / 2), n.thin=1, saveExec=FALSE,restart=FALSE, debug=FALSE, DIC=TRUE, digits=5, codaPkg=FALSE, OpenBUGS.pgm=NULL, working.directory=NULL, clearWD=FALSE, useWINE=FALSE, WINE=NULL, newWINE=TRUE, WINEPATH=NULL, bugs.seed=1, summary.only=FALSE, save.history=(.Platform$OS.type == "windows" | useWINE==TRUE), over.relax = FALSE)
data |
either a named list (names corresponding to variable names
in the |
inits |
a list with |
parameters.to.save |
character vector of the names of the parameters to save which should be monitored |
model.file |
File containing the model written in OpenBUGS code. The
extension must be ‘.txt’. The default location is given by |
n.chains |
number of Markov chains (default: 3) |
n.iter |
number of total iterations per chain (including burn in; default: 2000) |
n.burnin |
length of burn in, i.e. number of iterations to
discard at the beginning. Default is |
n.thin |
Thinning rate. Must be a positive integer. The default is
|
saveExec |
If TRUE, a re-startable image of the OpenBUGS execution is
saved with |
restart |
If TRUE, execution resumes with the final status from
the previous execution stored in the .bug file in the working directory.
If |
debug |
if |
DIC |
logical; if |
digits |
number of significant digits used for OpenBUGS input, see
|
codaPkg |
logical; if |
OpenBUGS.pgm |
For Windows or WINE execution, the full path
to the OpenBUGS
executable. For linux execution, the full path to the
OpenBUGS executable or shell script (the path to the shell
script is not
required if the OpenBUGS shell script is in the user's PATH variable).
If |
working.directory |
sets working directory during execution of
this function; OpenBUGS' input and output will be stored in this
directory; if |
clearWD |
logical; indicating whether the files ‘data.txt’,
‘inits[1:n.chains].txt’, ‘log.odc’, ‘codaIndex.txt’,
and ‘coda[1:nchains].txt’ should be removed after OpenBUGS has
finished. If set to |
useWINE |
logical; attempt to use the Wine emulator to run
OpenBUGS. Default is |
WINE |
Character, path to ‘wine’ binary file, it is
tried hard (by a guess and the utilities |
newWINE |
Use new versions of Wine that have ‘winepath’ utility |
WINEPATH |
Character, path to ‘winepath’ binary file, it is
tried hard (by a guess and the utilities |
bugs.seed |
Random seed for OpenBUGS. Must be an integer between 1-14. Seed specification changed between WinBUGS and OpenBUGS; see the OpenBUGS documentation for details. |
summary.only |
If |
save.history |
If |
over.relax |
If |
To run:
Write a BUGS model in an ASCII file (hint: use
write.model
).
Go into R.
Prepare the inputs for the bugs
function and run it (see
Example section).
An OpenBUGS window will pop up and R will freeze up. The model will now run in OpenBUGS. It might take awhile. You will see things happening in the Log window within OpenBUGS. When OpenBUGS is done, its window will close and R will work again.
If an error message appears, re-run with debug=TRUE
.
BUGS version support:
OpenBUGS >=3.2.1
Operation system support:
MS Windows no problem
Linux, intel processors GUI display and graphics not available.
Mac OS X and Unix in
general possible with Wine emulation via useWINE=TRUE
If useWINE=TRUE
is used, all paths (such as
working.directory
and model.file
, must be given in
native (Unix) style, but OpenBUGS.pgm
can be given in
Windows path style (e.g. “c:/Program Files/OpenBUGS/”) or
native (Unix) style
(e.g. “/path/to/wine/folder/dosdevices/c:/Program
Files/OpenBUGS/OpenBUGS321/OpenBUGS.exe”).
If codaPkg=TRUE
the returned values are the names
of coda output files written by OpenBUGS containing
the Markov Chain Monte Carlo output in the CODA format.
This is useful for direct access with read.bugs
.
If codaPkg=FALSE
, the following values are returned:
n.chains |
see Section ‘Arguments’ |
n.iter |
see Section ‘Arguments’ |
n.burnin |
see Section ‘Arguments’ |
n.thin |
see Section ‘Arguments’ |
n.keep |
number of iterations kept per chain (equal to
|
n.sims |
number of posterior simulations (equal to
|
sims.array |
3-way array of simulation output, with dimensions n.keep, n.chains, and length of combined parameter vector |
sims.list |
list of simulated parameters:
for each scalar parameter, a vector of length n.sims
for each vector parameter, a 2-way array of simulations,
for each matrix parameter, a 3-way array of simulations, etc.
(for convenience, the |
sims.matrix |
matrix of simulation output, with
|
summary |
summary statistics and convergence information for each saved parameter. |
mean |
a list of the estimated parameter means |
sd |
a list of the estimated parameter standard deviations |
median |
a list of the estimated parameter medians |
root.short |
names of argument |
long.short |
indexes; programming stuff |
dimension.short |
dimension of |
indexes.short |
indexes of |
last.values |
list of simulations from the most recent iteration; they can be used as starting points if you wish to run OpenBUGS for further iterations |
pD |
an estimate of the effective number of parameters, for calculations see the section “Arguments”. |
DIC |
|
Andrew Gelman, [email protected]; modifications and packaged by Sibylle Sturtz, [email protected], Uwe Ligges, and Neal Thomas
Gelman, A., Carlin, J.B., Stern, H.S., Rubin, D.B. (2003): Bayesian Data Analysis, 2nd edition, CRC Press.
Sturtz, S., Ligges, U., Gelman, A. (2005): R2WinBUGS: A Package for Running WinBUGS from R. Journal of Statistical Software 12(3), 1-16.
print.bugs
, plot.bugs
, as well as
coda and BRugs packages
## Not run: # An example model file is given in: model.file <- system.file(package="R2OpenBUGS", "model", "schools.txt") # Let's take a look: #file.show(model.file) # Some example data (see ?schools for details): data(schools) schools J <- nrow(schools) y <- schools$estimate sigma.y <- schools$sd data <- list ("J", "y", "sigma.y") inits <- function(){ list(theta=rnorm(J, 0, 100), mu.theta=rnorm(1, 0, 100), sigma.theta=runif(1, 0, 100)) } ## or alternatively something like: # inits <- list( # list(theta=rnorm(J, 0, 90), mu.theta=rnorm(1, 0, 90), # sigma.theta=runif(1, 0, 90)), # list(theta=rnorm(J, 0, 100), mu.theta=rnorm(1, 0, 100), # sigma.theta=runif(1, 0, 100)) # list(theta=rnorm(J, 0, 110), mu.theta=rnorm(1, 0, 110), # sigma.theta=runif(1, 0, 110))) parameters <- c("theta", "mu.theta", "sigma.theta") ## You may need to specify "OpenBUGS.pgm" ## also you need write access in the working directory: schools.sim <- bugs(data, inits, parameters, model.file, n.chains=3, n.iter=5000) print(schools.sim) plot(schools.sim) ## End(Not run)
## Not run: # An example model file is given in: model.file <- system.file(package="R2OpenBUGS", "model", "schools.txt") # Let's take a look: #file.show(model.file) # Some example data (see ?schools for details): data(schools) schools J <- nrow(schools) y <- schools$estimate sigma.y <- schools$sd data <- list ("J", "y", "sigma.y") inits <- function(){ list(theta=rnorm(J, 0, 100), mu.theta=rnorm(1, 0, 100), sigma.theta=runif(1, 0, 100)) } ## or alternatively something like: # inits <- list( # list(theta=rnorm(J, 0, 90), mu.theta=rnorm(1, 0, 90), # sigma.theta=runif(1, 0, 90)), # list(theta=rnorm(J, 0, 100), mu.theta=rnorm(1, 0, 100), # sigma.theta=runif(1, 0, 100)) # list(theta=rnorm(J, 0, 110), mu.theta=rnorm(1, 0, 110), # sigma.theta=runif(1, 0, 110))) parameters <- c("theta", "mu.theta", "sigma.theta") ## You may need to specify "OpenBUGS.pgm" ## also you need write access in the working directory: schools.sim <- bugs(data, inits, parameters, model.file, n.chains=3, n.iter=5000) print(schools.sim) plot(schools.sim) ## End(Not run)
Write file for OpenBUGS to read.
bugs.data(data, dir = getwd(), digits = 5, data.file = "data.txt")
bugs.data(data, dir = getwd(), digits = 5, data.file = "data.txt")
data |
either a named list (names corresponding to variable names
in the |
dir |
the directory to write the file ‘data.txt’ to |
digits |
number of significant digits used for OpenBUGS
input, see |
data.file |
name for the file R writes the data into. |
The name of data.file
is returned and as a side effect,
the data file is written
The main function to be called by the user is bugs
.
Write files ‘inits1.txt’, ‘inits2.txt’, etc., in the working directory for OpenBUGS to read
bugs.inits(inits, n.chains, digits, inits.files = paste("inits", 1:n.chains, ".txt", sep = ""))
bugs.inits(inits, n.chains, digits, inits.files = paste("inits", 1:n.chains, ".txt", sep = ""))
inits |
a list with |
n.chains |
number of Markov chains |
digits |
number of significant digits used for OpenBUGS
input, see |
inits.files |
name for the inits files R write the inits into. |
Vector of names of inits.files
; as a side effect, the inits files ‘inits*.txt’
are written
The main function to be called by the user is bugs
.
Read data such as summary statistics and DIC information from the OpenBUGS logfile
bugs.log(file)
bugs.log(file)
file |
Location of the OpenBUGS logfile |
Returns the OpenBUGS summary statistics and DIC extracted directly from the log file.
A list with components:
stats |
A matrix containing summary statistics for each saved
parameter. Comparable to the information in the element
|
DIC |
A matrix containing the DIC statistics as returned from OpenBUGS. |
Jouni Kerman
The main function that generates the log file is bugs
.
Plotting a bugs
object
## S3 method for class 'bugs' plot(x, display.parallel = FALSE, ...)
## S3 method for class 'bugs' plot(x, display.parallel = FALSE, ...)
x |
an object of class ‘bugs’, see |
display.parallel |
display parallel intervals in both halves of
the summary plots; this is a convergence-monitoring tool and is not
necessary once you have approximate convergence (default is
|
... |
further arguments to |
Printing a bugs
object
## S3 method for class 'bugs' print(x, digits.summary = 1, ...)
## S3 method for class 'bugs' print(x, digits.summary = 1, ...)
x |
an object of class ‘bugs’, see |
digits.summary |
rounding for tabular output on the console (default is to round to 1 decimal place) |
... |
further arguments to |
This function reads Markov Chain Monte Carlo output in the
CODA format produced by OpenBUGS and returns an object of class
mcmc.list
for further output analysis using the
coda package.
read.bugs(codafiles, ...)
read.bugs(codafiles, ...)
codafiles |
character vector of filenames (e.g. returned from
|
... |
further arguments to be passed to
|
8 schools analysis
data(schools)
data(schools)
A data frame with 8 observations on the following 3 variables.
See Source.
See Source.
See Source.
Rubin, D.B. (1981): Estimation in Parallel Randomized Experiments. Journal of Educational Statistics 6(4), 377-400.
Section 5.5 of Gelman, A., Carlin, J.B., Stern, H.S., Rubin, D.B. (2003): Bayesian Data Analysis, 2nd edition, CRC Press.
A selected subset of the examples from the OpenBUGS manual is executed and compared to results supplied with the package to validate installation.
validateInstallOpenBUGS( OpenBUGS.pgm=NULL, useWINE=FALSE, WINE=NULL, newWINE=TRUE, WINEPATH=NULL )
validateInstallOpenBUGS( OpenBUGS.pgm=NULL, useWINE=FALSE, WINE=NULL, newWINE=TRUE, WINEPATH=NULL )
OpenBUGS.pgm |
See |
useWINE |
logical; attempt to use the Wine emulator to run
OpenBUGS. Default is |
WINE |
Character, path to ‘wine’ binary file, it is
tried hard (by a guess and the utilities |
newWINE |
Use new versions of Wine that have ‘winepath’ utility |
WINEPATH |
Character, path to ‘winepath’ binary file, it is
tried hard (by a guess and the utilities |
Operation system support:
MS Windows Yes
Linux, intel processors Yes, but GUI display and graphics not available.
Mac OS X and Unix Wine emulation via useWINE=TRUE
If useWINE=TRUE
is used, all paths (such as
working.directory
and model.file
, must be given in
native (Unix) style, but OpenBUGS.pgm
can be given in
Windows path style (e.g. “c:/Program Files/OpenBUGS/”) or
native (Unix) style
(e.g. “/path/to/wine/folder/dosdevices/c:/Program
Files/OpenBUGS/OpenBUGS321/OpenBUGS.exe”).
No data returned. Prints match/no match result to console for each example.
Neal Thomas based on BRugs examples created by Chris Jackaon.
Gelman, A., Carlin, J.B., Stern, H.S., Rubin, D.B. (2003): Bayesian Data Analysis, 2nd edition, CRC Press.
Sturtz, S., Ligges, U., Gelman, A. (2005): R2WinBUGS: A Package for Running WinBUGS from R. Journal of Statistical Software 12(3), 1-16.
Convert R function to a OpenBUGS model file
write.model(model, con = "model.bug", digits = 5)
write.model(model, con = "model.bug", digits = 5)
model |
R function containing the BUGS model in the BUGS model language, for minor differences see Section Details. |
con |
passed to |
digits |
number of significant digits used for OpenBUGS
input, see |
BUGS models follow closely S syntax. It is therefore possible to write most BUGS models as R functions.
As a difference, BUGS syntax allows truncation specification like this:
dnorm(...) I(...)
but this is illegal in R. To
overcome this incompatibility, use dummy operator %_%
before
I(...)
: dnorm(...) %_% I(...)
. The dummy operator
%_%
will be removed before the BUGS code is saved.
Nothing, but as a side effect, the model file is written
original idea by Jouni Kerman, modified by Uwe Ligges
## Same "schoolsmodel" that is used in the examples in ?bugs: schoolsmodel <- function(){ for (j in 1:J){ y[j] ~ dnorm (theta[j], tau.y[j]) theta[j] ~ dnorm (mu.theta, tau.theta) tau.y[j] <- pow(sigma.y[j], -2) } mu.theta ~ dnorm (0.0, 1.0E-6) tau.theta <- pow(sigma.theta, -2) sigma.theta ~ dunif (0, 1000) } ## some temporary filename: filename <- file.path(tempdir(), "schoolsmodel.bug") ## write model file: write.model(schoolsmodel, filename) ## and let's take a look: file.show(filename)
## Same "schoolsmodel" that is used in the examples in ?bugs: schoolsmodel <- function(){ for (j in 1:J){ y[j] ~ dnorm (theta[j], tau.y[j]) theta[j] ~ dnorm (mu.theta, tau.theta) tau.y[j] <- pow(sigma.y[j], -2) } mu.theta ~ dnorm (0.0, 1.0E-6) tau.theta <- pow(sigma.theta, -2) sigma.theta ~ dunif (0, 1000) } ## some temporary filename: filename <- file.path(tempdir(), "schoolsmodel.bug") ## write model file: write.model(schoolsmodel, filename) ## and let's take a look: file.show(filename)