3.3 Interface to OpenBUGS
OpenBUGS is another open-source program that is very similar to JAGS. It too takes as inputs data and a model specification file (written in OpenBUGS’ own language) and draws samples from the posterior distribution of the model’s parameters or latent variables, using an expert system to pick the most appropriate method for sampling from the posterior.
BayES’ openbugs() function provides a convenient interface to OpenBUGS, which allows the user to:
- pass BayES matrices as input data to OpenBUGS
- request OpenBUGS to draw samples from the posterior distribution of parameters specified by the user, given a model specification file
- retrieve the draws from OpenBUGS, summarize them and print summary statistics on the BayES console
- store the draws from OpenBUGS in a BayES model item, making them available for post estimation analysis
The general syntax of the openbugs() function is the following:3
, "data"=<list of matrices to pass to OpenBUGS>
, "monitor"=<list of parameters to monitor>
, "summarize"=<list of parameters to summarize>
, "inits"=<structure of initial values>
, "chains"=<positive integer>
, "burnin"=<positive integer>
, "draws"=<positive integer>
, "thin"=<positive integer>
, "seed"=<positive integer>
, "window"=true|false
, "debug"=true|false
);
where:
- <model name> is a BayES id value which will be associated with the model resulting from executing the openbugs() function. If no model name is provided the results from OpenBUGS will still be returned to BayES and summarized, but they will not be stored for further analysis. jags(), openbugs() and stan() are the three interface functions that provide the highest level of integration with BayES: the results from these functions are stored in BayES model items, on which all BayES functions which operate on models can be used.
- <model specification file> is a string pointing to the file which contains the specification of the OpenBUGS model. If the specification file is not in the current working directory then the file name must be prepended by the path to the file, either in absolute terms (eg. "C:/MyFiles/myModel.txt") or relative to the current working directory (eg. "../myModel.txt"). This is the only mandatory argument of the openbugs() function.
- "data" specifies the data matrices that will be passed as input to OpenBUGS. <list of matrices> is a list of the id values of matrices (comma-separated names inside curly brackets), as they appear in the OpenBUGS model specification file. These matrices must be defined in the current workspace.
- "monitor" specifies the parameters or latent variables for which OpenBUGS will store the draws obtained from their posterior distributions. <list of parameters to monitor> is a list of strings (comma-separated strings inside curly brackets) that specify the names of the parameters/latent data that should be monitored, as they appear in the OpenBUGS model specification file. If no monitors are set OpenBUGS will still draw samples from the posterior but these will not be saved and, subsequently, no BayES model item will be defined upon return of the openbugs() function.
- "summarize" specifies the parameters or latent variables for which OpenBUGS will set “summary monitors". OpenBUGS will sample from the posterior of these parameters/latent variables but, instead of storing these draws, it will only provide summary statistics for them (calculated inline). This option can lead to a large reduction in memory usage compared to the case where a large number of parameters/latent variables are monitored using the "monitor" option. The "summarize" option is currently not implemented and will be ignored.
- "inits" specifies the initial values per chain used by OpenBUGS. <structure of initial values> is a BayES structure, the elements of which could be structures themselves. Each element of the chain-specific structure corresponds to a parameter or latent variable, using the same id values as the ones used in the OpenBUGS model specification file. It is possible to provide initial values for all parameters/latent variables or only a subset of them. It is also possible to leave entire chains uninitialized. In such cases OpenBUGS will generate initial values for the chains/parameters/latent variables which are not initialized by the user.
- "chains" specifies the number of chains that OpenBUGS will run in parallel. The right-hand side must be a positive integer and the default value is 1. Note that OpenBUGS can use up to 14 different values for the seed number of its random-number generators. If more than 14 chains are requested by the user these seed values will be recycled, effectively leading to chains with exactly the same draws from the posterior.
- "burnin" specifies the number of draws from the posterior that will be discarded (per chain) to avoid dependence of the results on initial values. The right-hand side must be a positive integer and the default value is 10,000.
- "draws" specifies the number of draws from the posterior that will be retained, per chain. The right-hand side must be a positive integer and the default value is 20,000.
- "thin" specifies the number of draws from the posterior that will be skipped (after the burn-in phase) per retained draw, to avoid high autocorrelation of the retained draws. For example, if the thinning parameter is set to 3 then only one in three consecutive draws will be retained and become available for inference and post-estimation analysis. The right-hand side must be a positive integer and the default value is 1.
- "seed" specifies the seed for the random-number generator used by OpenBUGS. The right-hand side must be a positive integer and the default value is 42.
- "window" specifies whether OpenBUGS should run in its own graphical environment (under Microsoft® Windows® only) or print any output on the BayES console. The default value value is true, which requests OpenBUGS to run using its own GUI. Under Linux systems OpenBUGS does not provide a GUI and, therefore, this option is ignored.
- "debug" specifies whether the OpenBUGS window will remain open after completion of the Gibbs sampler (under Microsoft® Windows® only). The default value is "false", in which case the OpenBUGS window closes after completion of the Gibbs sampler and control is returned to BayES automatically. Because the "debug" option requires an OpenBUGS window, the value of the "window" option is overwritten to true whenever the user sets "debug" to true. This option is ignored under Linux systems.
When OpenBUGS runs using its GUI (under Microsoft® Windows® only) it prints any output on its own output window. When OpenBUGS runs without its GUI then BayES grabs any OpenBUGS output intended for the system’s command console and redirects it to the BayES console in real time. This output is entirely determined by OpenBUGS and it includes information on the stage of the estimation process (model check, loading data, etc.) and very limited information on the progress of the sampler (only whether the burn-in phase is complete).
Many of the sample script files in "$BayESHOME/Samples/3JAGSOpenBUGSStan" contain examples of using the openbugs() function, along with OpenBUGS model specification files for simple models. The OpenBUGS interface is also accessible from the BayES main menu via Interfaces → OpenBUGS.
3Arguments inside square brackets are optional. Optional arguments passed to the openbugs() function can be provided in any order, but always after the mandatory argument (model specification file). Optional arguments always come in pairs (eg. "chains"=1).