R Interface#
Installation#
This assumes you have followed the Getting Started guide to install BridgeStan’s pre-requisites and downloaded a copy of the BridgeStan source code.
devtools::install_github("https://github.com/roualdes/bridgestan", subdir="R")
Or, since you have already downloaded the repository, you can run
install.packages(file.path(getwd(),"R"), repos=NULL, type="source")
from the BridgeStan folder.
Note that the R package depends on R 3+ and R6, and will install R6 if it is not already installed.
Note
Mac users have reported issues when using a copy of R installed from conda-forge. If you encounter an issue, you may need to use R from the official R project website or a system package manager like brew
.
Example Program#
An example program is provided alongside the R interface code in example.R
:
Show example.R
# Before running this, make sure you are in the directory bridgestan/R
library(bridgestan)
model <- StanModel$new("../test_models/bernoulli/bernoulli.stan", "../test_models/bernoulli/bernoulli.data.json", 1234)
print(paste0("This model's name is ", model$name(), "."))
print(paste0("This model has ", model$param_num(), " parameters."))
x <- runif(model$param_unc_num())
q <- log(x / (1 - x))
res <- model$log_density_gradient(q, jacobian = FALSE)
print(paste0("log_density and gradient of Bernoulli model: ",
res$val, ", ", res$gradient))
API Reference#
R6::R6Class StanModel
#
R6
Class representing a compiled BridgeStan model.
This model exposes log density, gradient, and Hessian information as well as constraining and unconstraining transforms.
Methods#
Method new()
:
Create a Stan Model instance.
Usage
StanModel$new(lib, data, rng_seed)
Arguments
lib
A path to a compiled BridgeStan Shared Object file or a .stan file (will be compiled).data
Either a JSON string literal, a path to a data file in JSON format ending in “.json”, or the empty string.rng_seed
Seed for the RNG used in constructing the model.stan_args
A list of arguments to pass to stanc3 if the model is not already compiled.make_args
A list of additional arguments to pass to Make if the model is not already compiled.
Returns
A new StanModel.
Method name()
:
Get the name of this StanModel.
Usage
StanModel$name()
Returns
A character vector of the name.
Method model_info()
:
Get compile information about this Stan model.
Usage
StanModel$model_info()
Returns
A character vector of the Stan version and important flags.
Method param_names()
:
Return the indexed names of the (constrained) parameters. For containers, indexes are separated by periods (.).
For example, the scalar a has indexed name a, the vector entry a[1] has indexed name a.1 and the matrix entry a[2, 3] has indexed name a.2.3. Parameter order of the output is column major and more generally last-index major for containers.
Usage
StanModel$param_names(include_tp = FALSE, include_gq = FALSE)
Arguments
include_tp
Whether to include variables from transformed parameters.include_gq
Whether to include variables from generated quantities.
Returns
A list of character vectors of the names.
Method param_unc_names()
:
Return the indexed names of the unconstrained parameters. For containers, indexes are separated by periods (.).
For example, the scalar a has indexed name a, the vector entry a[1] has indexed name a.1 and the matrix entry a[2, 3] has indexed name a.2.3. Parameter order of the output is column major and more generally last-index major for containers.
Usage
StanModel$param_unc_names()
Returns
A list of character vectors of the names.
Method param_num()
:
Return the number of (constrained) parameters in the model.
Usage
StanModel$param_num(include_tp = FALSE, include_gq = FALSE)
Arguments
include_tp
Whether to include variables from transformed parameters.include_gq
Whether to include variables from generated quantities.
Returns
The number of parameters in the model.
Method param_unc_num()
:
Return the number of unconstrained parameters in the model.
This function is mainly different from param_num
when
variables are declared with constraints. For example,
simplex[5]
has a constrained size of 5, but an unconstrained
size of 4.
Usage
StanModel$param_unc_num()
Returns
The number of parameters in the model.
Method param_constrain()
:
Returns a vector of constrained parameters given the unconstrained parameters. See also StanModel$param_unconstrain()
, the inverse
of this function.
Usage
StanModel$param_constrain(theta_unc, include_tp = FALSE, include_gq = FALSE, rng)
Arguments
theta_unc
The vector of unconstrained parameters.include_tp
Whether to also output the transformed parameters of the model.include_gq
Whether to also output the generated quantities of the model.rng
The random number generator to use ifinclude_gq
isTRUE
. SeeStanModel$new_rng()
.
Returns
The constrained parameters of the model.
Method new_rng()
:
Create a new persistent PRNG object for use in param_constrain()
.
Usage
StanModel$new_rng(seed)
Arguments
seed
The seed for the PRNG.
Returns
A StanRNG
object.
Method param_unconstrain()
:
Returns a vector of unconstrained parameters given the constrained parameters.
It is assumed that these will be in the same order as internally
represented by the model (e.g., in the same order as
StanModel$param_names()
). If structured input is needed, use
StanModel$param_unconstrain_json()
. See also
StanModel$param_constrain()
, the inverse of this function.
Usage
StanModel$param_unconstrain(theta)
Arguments
theta
The vector of constrained parameters.
Returns
The unconstrained parameters of the model.
Method param_unconstrain_json()
:
This accepts a JSON string of constrained parameters and returns the unconstrained parameters.
The JSON is expected to be in the JSON Format for CmdStan.
Usage
StanModel$param_unconstrain_json(json)
Arguments
json
Character vector containing a string representation of JSON data.
Returns
The unconstrained parameters of the model.
Method log_density()
:
Return the log density of the specified unconstrained parameters.
Usage
StanModel$log_density(theta_unc, propto = TRUE, jacobian = TRUE)
Arguments
theta_unc
The vector of unconstrained parameters.propto
IfTRUE
, drop terms which do not depend on the parameters.jacobian
IfTRUE
, include change of variables terms for constrained parameters.
Returns
The log density.
Method log_density_gradient()
:
Return the log density and gradient of the specified unconstrained parameters.
Usage
StanModel$log_density_gradient(theta_unc, propto = TRUE, jacobian = TRUE)
Arguments
theta_unc
The vector of unconstrained parameters.propto
IfTRUE
, drop terms which do not depend on the parameters.jacobian
IfTRUE
, include change of variables terms for constrained parameters.
Returns
List containing entries val
(the log density) and gradient
(the gradient).
Method log_density_hessian()
:
Return the log density, gradient, and Hessian of the specified unconstrained parameters.
Usage
StanModel$log_density_hessian(theta_unc, propto = TRUE, jacobian = TRUE)
Arguments
theta_unc
The vector of unconstrained parameters.propto
IfTRUE
, drop terms which do not depend on the parameters.jacobian
IfTRUE
, include change of variables terms for constrained parameters.
Returns
List containing entries val
(the log density), gradient
(the gradient), and hessian
(the Hessian).
Method log_density_hessian_vector_product()
:
Return the log density and the product of the Hessian with the specified vector.
Usage
StanModel$log_density_hessian_vector_product(theta_unc, v, propto = TRUE, jacobian = TRUE)
Arguments
theta_unc
The vector of unconstrained parameters.v
The vector to multiply the Hessian by.propto
IfTRUE
, drop terms which do not depend on the parameters.jacobian
IfTRUE
, include change of variables terms for constrained parameters.
Returns
List containing entries val
(the log density) and Hvp
(the hessian-vector product).
Compilation utilities#
Function compile_model()
:
Run BridgeStan’s Makefile on a .stan
file, creating the .so
used by
the StanModel class. This function checks that the path to BridgeStan
is valid and will error if not. This can be set with set_bridgestan_path()
.
Usage
compile_model(stan_file, stanc_args = NULL, make_args = NULL)
Arguments
stan_file
A path to a Stan model file.stanc_arg
A vector of arguments to pass to stanc3. For example,c("--O1")
will enable compiler optimization level 1.make_args
A vector of additional arguments to pass to Make. For example,c("STAN_THREADS=True")
will enable threading for the compiled model. If the same flags are defined inmake/local
, the versions passed here will take precedent.
Returns
Path to the compiled .so
file.
Function set_bridgestan_path()
:
Set the path to BridgeStan. This should point to the top-level folder of the repository.
Usage
set_bridgestan_path(path)