R interface to the UNU.RAN library for Universal Non-Uniform RANdom variate generators
|License:||GPL 2 or later|
Runuran provides an interface to the UNU.RAN library for universal non-uniform random number generators. It provides a collection of so called automatic methods for non-uniform random variate generation. Thus it is possible to draw samples from uncommon distributions. Nevertheless, (some of) these algorithms are also well suited for standard distribution like the normal distribution. Moreover, sampling from distributions like the generalized hyperbolic distribution is very fast. Such distributions became recently popular in financial engineering.
Runuran compiles four sets of functions of increasing power (and thus complexity):
[Special Generator] – Generators for particular distributions. Their syntax is similar to the corresponding R built-in functions.
[Universal] – Functions that offer an interface to a carefully selected collection of UNU.RAN methods with their most important parameters.
[Distribution] – Functions that create objects for important distributions. These objects can then be used in combination with one of the universal methods which is best suited for a particular application.
[Advanced] – Wrapper to the UNU.RAN string API. This gives access to all UNU.RAN methods and their variants.
We have marked all functions in their corresponding help page by one these four tags.
An introduction to Runuran with examples together with a very
short survey on non-uniform random variate generation can be found in
the package vignette (which can be displayed using
These functions have similar syntax to the analogous R built-in
generating functions (if these exist) but have optional domain
ub, i.e., these calls also allow to
draw samples from truncated distributions:
ur...(n, distribution parameters, lb , ub)
Compared to the corresponding R functions these
functions have a different behavior:
ur... functions are often much faster for large
samples (e.g., a factor of about 5 for the t distribution).
For small samples they are slow.
ur... functions allow to sample from truncated
versions of the original distributions. Therefore the arguments
lb (lower border) and
ub (upper border) are
available for all these functions.
ur... functions are based on fast numerical
inversion algorithms. This is important for example for generating
order statistics, quasi-Monte Carlo methods or random vectors from
ur... functions do not allow vectors as
arguments (to be more precise: they only use the first element of
However, we recommend to use the more flexible approach described in the next sections below.
A list of all available special generators can be found in
These functions allow access to a selected collection of UNU.RAN
methods. They require some data about the target distribution as
arguments and return an instance of a UNU.RAN generator object that is
implemented as an S4 class
unuran. These can then
be used to draw samples from the desired distribution by means of
Methods that implement an inversion method can also be
used for quantile function
Currently the following methods are available by such functions.
Continuous Univariate Distributions:
||...||Automatic Ratio-of-Uniforms method|
||...||Adaptive Rejection Sampling|
||...||Inverse Transformed Density Rejection|
||...||Polynomial interpolation of INVerse CDF|
||...||Simple Ratio-Of-Uniforms method|
||...||TABLe based rejection|
||...||Transformed Density Rejection|
||...||Discrete Automatic Rejection Inversion|
||...||Guide-Table Method for discrete inversion|
||...||Hit-and-Run with Ratio-of-Uniforms method|
||...||Multivariate Naive Ratio-Of-Uniforms method|
Coding the required functions for particular distributions can be tedious. Thus we have compiled a set of functions that create UNU.RAN distribution objects that can directly be used with the functions from section [Universal].
A list of all available distributions can be found in
This interface provides the most flexible access to UNU.RAN. It requires three steps:
unuran.distr object that contains
all required information about the target distribution.
We have three types of distributions:
|Function||Type of distribution|
||...||multivariate continuous distributions|
The functions from section [Distribution] creates such objects for particular distributions.
Choose a generation method and create a
unuran object using function
This function takes two argument: the distribution object created
in Step 1, and a string that contains the chosen UNU.RAN method
and (optional) some parameters to adjust this method to the given
target distribution. We refer to the UNU.RAN for more details on
this “method string”.
Use this object to draw samples from the target
||...||compute quantile (inverse CDF)|
UNU.RAN distribution objects and generator objects may also be used to
compute density and distribution function for a given distribution by
All UNU.RAN methods use the R built-in random number generator as
source of (pseudo-) random numbers. Thus the generated samples depend
on the state
.Random.seed and can be controlled by the
unuran objects cannot be saved and restored in later R
sessions, nor is it possible to copy such objects to different nodes
in a computer cluster.
unuran objects for some generation methods can be
Then these objects can be handled like any other R object
(and thus saved and restored).
All other objects must be newly created in a new R
(Using a restored object does not work as the
is then broken.)
The interface has been changed compared to the DSC 2003 paper.
Josef Leydold and Wolfgang H\"ormann [email protected].
J. Leydold and W. H\"ormann (2000-2008): UNU.RAN User Manual, see http://statmath.wu.ac.at/unuran/.
W. H\"ormann, J. Leydold, and G. Derflinger (2004): Automatic Nonuniform Random Variate Generation. Springer-Verlag, Berlin Heidelberg
G. Tirler and J. Leydold (2003): Automatic Nonuniform Random Variate Generation in R. In: K. Hornik and F. Leisch, Proceedings of the 3rd International Workshop on Distributed Statistical Computing (DSC 2003), March 20–22, Vienna, Austria.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.