Random Truncated Distributions

Share:

Description

Provides samples from classical R distributions and mc2d specific distributions truncated between linf (excluded) and lsup (included).

Usage

1
rtrunc(distr=runif, n, linf=-Inf, lsup=Inf, ...)

Arguments

distr

A function providing random data or its name as character. The function 'rdistr' should have a 'qdistr' form (with argument 'p') and a 'pdistr' form (with argument 'q'). Example : 'rnorm' (has a 'qnorm' and a 'pnorm' form), 'rbeta', 'rbinom', 'rgamma', ...

n

The size of the sample.

.

linf

A vector of lower bounds.

lsup

A vector of upper bounds, with lsup < linf (strictly).

...

All arguments to be passed to pdistr and qdistr.

Details

The function 1) evaluates the p values corresponding to linf and lsup using pdistr; 2) samples n values using runif(n, min=pinf, max=psup), and 3) takes the n corresponding quantiles from the specified distribution using qdistr.

All distributions (but sample) implemented in the stats library could be used. The arguments in ... should be named. Do not use 'log' or 'log.p' or 'lower.tail'. For discrete dictribution, rtrunc sample within (linf, lsup]. See example.

Value

A vector of n values.

Note

The inversion of the quantile function leads to time consuming functions for some distributions. WARNING: The method is flexible, but can lead to problems linked to rounding errors in some extreme situations. The function checks that the values are in the expected range and returns an error if not. It also warns some extreme situation that could lead to unexpected results. See Examples.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
rtrunc("rnorm", n=10, linf=0)
range(rtrunc(rnorm, n=1000, linf=3, lsup=5, sd=10))
## Discrete distributions
range(rtrunc(rpois, 1000, linf=2, lsup=4, lambda=1))
##Examples of rounding problems. 
##The first one will provide a warning while the results are unexpected, 
##The second will provide an error.
## Not run: 
table(rtrunc(rbinom, n=1000, size=10, prob=1-1E-20, lsup=9))
table(rtrunc(rbinom, n=1000, size=10, prob=1E-14, linf=0))

## End(Not run)

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.