Last chance! 50% off unlimited learning
Sale ends in
Generate random variates from a discrete mixture of distributions.
rmixture(n, probs, models, shuffle = TRUE)
A vector of random variates from the mixture with density
number of random variates to generate. If length(n) >
1
, the length is taken to be the number required.
numeric non-negative vector specifying the probability
for each model; is internally normalized to sum 1. Infinite
and missing values are not allowed. Values are recycled as necessary
to match the length of models
.
vector of expressions specifying the simulation models
with the number of variates omitted; see Details. Models are
recycled as necessary to match the length of probs
.
logical; should the random variates from the distributions be shuffled?
Vincent Goulet vincent.goulet@act.ulaval.ca
rmixture
generates variates from a discrete mixture, that is
the random variable with a probability density function of the form
The values in probs
will be internally normalized to be
used as probabilities
The specification of simulation models uses the syntax of
rcomphierarc
. Models expression
where each element is a complete call
to a random number generation function, with the number of variates
omitted.
The argument of the random number generation functions for the number
of variates to simulate must be named n
.
If shuffle
is FALSE
, the output vector contains all the
random variates from the first model, then all the random variates
from the second model, and so on. If the order of the variates is
irrelevant, this cuts the time to generate the variates roughly in
half.
rcompound
to simulate from compound models.
rcomphierarc
to simulate from compound hierarchical models.
## Mixture of two exponentials (with means 1/3 and 1/7) with equal
## probabilities.
rmixture(10, 0.5, expression(rexp(3), rexp(7)))
rmixture(10, 42, expression(rexp(3), rexp(7))) # same
## Mixture of two lognormals with different probabilities.
rmixture(10, probs = c(0.55, 0.45),
models = expression(rlnorm(3.6, 0.6),
rlnorm(4.6, 0.3)))
## Building the model expressions in the following example
## works as 'rate' is defined in the parent frame of
## 'rmixture'.
probs <- c(2, 5)
g <- function(n, p, rate)
rmixture(n, p, expression(rexp(rate[1]), rexp(rate[2])))
g(10, probs, c(3, 7))
## The following example does not work: 'rate' does not exist
## in the evaluation frame of 'rmixture'.
f <- function(n, p, model) rmixture(n, p, model)
h <- function(n, p, rate)
f(n, p, expression(rexp(rate[1]), rexp(rate[2])))
if (FALSE) h(10, probs, c(3, 7))
## Fix: substitute the values in the model expressions.
h <- function(n, p, rate)
{
models <- eval(substitute(expression(rexp(a[1]), rexp(a[2])),
list(a = rate)))
f(n, p, models)
}
h(10, probs, c(3, 7))
Run the code above in your browser using DataLab