Variate Generation for Log-Normal Distribution
Variate Generation for Log-Normal Distribution
vlnorm( n, meanlog = 0, sdlog = 1, stream = NULL, antithetic = FALSE, asList = FALSE )
n |
number of observations |
meanlog |
Mean of distribution on log scale (default 0) |
sdlog |
Standard deviation of distribution on log scale (default 1) |
stream |
if |
antithetic |
if |
asList |
if |
Generates random variates from the log-normal distribution.
Log-Normal variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qlnorm
is used to
invert the uniform(0,1) variate(s).
In this way, using vlnorm
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The log-normal distribution has density
f(x) = 1/(√(2 π) σ x) e^-((log x - μ)^2 / (2 σ^2))
where μ and σ are the mean and standard deviation of the logarithm.
The mean is E(X) = exp(μ + 1/2 σ^2), the median is med(X) = exp(μ), and the variance is Var(X) = exp(2*μ + σ^2)*(exp(σ^2) - 1) and hence the coefficient of variation is sqrt(exp(σ^2) - 1) which is approximately σ when small (e.g., σ < 1/2).
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of log-normal random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Barry Lawson (blawson@richmond.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vadim.kudlay@richmond.edu)
set.seed(8675309) # NOTE: following inverts rstream::rstream.sample using stats::qlnorm vlnorm(3, meanlog = 5, sdlog = 0.5) set.seed(8675309) # NOTE: following inverts rstream::rstream.sample using stats::qlnorm vlnorm(3, 8, 2, stream = 1) vlnorm(3, 8, 2, stream = 2) set.seed(8675309) # NOTE: following inverts rstream::rstream.sample using stats::qlnorm vlnorm(1, 8, 2, stream = 1) vlnorm(1, 8, 2, stream = 2) vlnorm(1, 8, 2, stream = 1) vlnorm(1, 8, 2, stream = 2) vlnorm(1, 8, 2, stream = 1) vlnorm(1, 8, 2, stream = 2) set.seed(8675309) variates <- vlnorm(1000, 8, 2, stream = 1) set.seed(8675309) variates <- vlnorm(1000, 8, 2, stream = 1, antithetic = TRUE)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.