
Last chance! 50% off unlimited learning
Sale ends in
Function generates data given a supplied random number generating function that are constructed to fall within a particular range. Sampled values outside this range are discarded and re-sampled until the desired criteria has been met.
rtruncate(n, rfun, range, ..., redraws = 100L)
number of observations to generate. This should be the first argument passed
to rfun
a function to generate random values. Function can return
a numeric/integer vector or matrix, and additional arguments
requred for this function are passed through the argument ...
a numeric vector of length two, where the first element indicates the
lower bound and the second the upper bound. When values are generated outside these
two bounds then data are redrawn until the bounded criteria is met. When the
output of rfun
is a matrix then this input can be specified as a matrix with
two rows, where each the first row corresponds to the lower bound and the second row
the upper bound for each generated column in the output
additional arguments to be passed to rfun
the maximum number of redraws to take before terminating the iterative
sequence. This is in place as a safety in case the range
is too small given the
random number generator, causing too many consecutive rejections. Default is 100
either a numeric vector or matrix, where all values are within the
desired range
In simulations it is often useful to draw numbers from truncated distributions
rather than across the full theoretical range. For instance, sampling parameters within
the range [-4,4] from a normal distribution. The rtruncate
function has been
designed to accept any sampling function, where the first argument is the number of
values to sample, and will draw values iteratively until the number of values
within the specified bound are obtained. In situations where it is unlikely for the bounds
to be located (e.g., sampling from a normal distribution where all values are within [-10,-6])
then the sampling scheme will throw an error if too many re-sampling executions are required
(default will stop if more that 100 calls to rfun
are required).
Sigal, M. J., & Chalmers, R. P. (2016). Play it again: Teaching statistics with Monte
Carlo simulation. Journal of Statistics Education, 24
(3), 136-156.
10.1080/10691898.2016.1246953
# NOT RUN {
# n = 1000 truncated normal vector between [-2,3]
vec <- rtruncate(1000, rnorm, c(-2,3))
summary(vec)
# truncated correlated multivariate normal between [-1,4]
mat <- rtruncate(1000, rmvnorm, c(-1,4),
sigma = matrix(c(2,1,1,1),2))
summary(mat)
# truncated correlated multivariate normal between [-1,4] for the
# first column and [0,3] for the second column
mat <- rtruncate(1000, rmvnorm, cbind(c(-1,4), c(0,3)),
sigma = matrix(c(2,1,1,1),2))
summary(mat)
# truncated chi-square with df = 4 between [2,6]
vec <- rtruncate(1000, rchisq, c(2,6), df = 4)
summary(vec)
# }
Run the code above in your browser using DataLab