Learn R Programming

rust

Ratio-of-uniforms simulation with transformation

What does rust do?

The rust package implements the multivariate generalized ratio-of-uniforms method of simulating random variates from a d-dimensional continuous distribution. The user specifies (the log of) a positive target function f that is proportional to the density function of the distribution.

A simple example

We use the function ru to simulate a sample of size 1000 from a two-dimensional standard normal distribution with strong positive correlation between the components. Of course, this particular example is purely illustrative: there are better ways to simulate from a multivariate normal distribution.

rho <- 0.9
covmat <- matrix(c(1, rho, rho, 1), 2, 2)
log_dmvnorm <- function(x, mean = rep(0, d), sigma = diag(d)) {
  x <- matrix(x, ncol = length(x))
  d <- ncol(x)
  - 0.5 * (x - mean) %*% solve(sigma) %*% t(x - mean)
}
x <- ru(logf = log_dmvnorm, sigma = covmat, d = 2, n = 1000, init = c(0, 0))

From version 1.2.0 onwards the faster function ru_rcpp can be used. See the vignette “Rusting Faster: Simulation using Rcpp” for details.

# Create an external pointer to a C++ function to evaluate the log-density.
ptr_bvn <- create_xptr("logdnorm2")
# Pass the external pointer to `ru_rcpp`.
x <- ru_rcpp(logf = ptr_bvn, rho = rho, d = 2, n = 1000, init = c(0, 0))

Installation

To get the current released version from CRAN:

install.packages("rust")

Vignettes

See vignette("rust-a-vignette", package = "rust") for an overview of the package, vignette("rust-b-when-to-use-vignette", package = "rust") for guidance on when rust can be used and vignette("rust-c-using-rcpp-vignette", package = "rust") for information on how to take advantage of the Rcpp package.

Copy Link

Version

Install

install.packages('rust')

Monthly Downloads

989

Version

1.4.3

License

GPL (>= 2)

Issues

Pull Requests

Stars

Forks

Maintainer

Last Published

August 17th, 2024

Functions in rust (1.4.3)

find_lambda_one_d_rcpp

Selecting the Box-Cox parameter in the 1D case using Rcpp
gpd_init

Initial estimates for Generalized Pareto parameters
gpd_sum_stats

Generalized Pareto summary statistics
find_lambda

Selecting the Box-Cox parameter for general d
create_log_j_xptr

Create external pointer to a C++ function for log_j
create_phi_to_theta_xptr

Create external pointer to a C++ function for phi_to_theta
rust-package

rust: Ratio-of-Uniforms Simulation with Transformation
plot.ru

Plot diagnostics for an ru object
ru

Generalized ratio-of-uniforms sampling
rust-internal

Internal rust functions
ru_rcpp

Generalized ratio-of-uniforms sampling using C++ via Rcpp
print.ru

Print method for an "ru" object
rgpd

Generalized Pareto simulation
summary.ru

Summarizing ratio-of-uniforms samples
gpd_logpost

Generalized Pareto posterior log-density
create_xptr

Create external pointer to a C++ function for logf
find_lambda_rcpp

Selecting the Box-Cox parameter for general d using Rcpp
find_lambda_one_d

Selecting the Box-Cox parameter in the 1D case