get.lnorm.par
returns the parameters of a lognormal distribution where
the p
th percentiles match with the quantiles q
.
1 2 
p 
numeric, single value or vector of probabilities. 
q 
numeric, single value or vector of quantiles corresponding to p. 
show.output 
logical, if 
plot 
logical, if 
tol 
numeric, single positive value giving the absolute convergence tolerance for reaching zero (default value is 
fit.weights 
numerical vector of the same length as a probabilities vector

scaleX 
numerical vector of the length 2 containing values (from the open interval (0, 1))
for scaling quantileaxis (relevant only if 
... 
further arguments passed to the functions 
The number of probabilities, the number of quantiles and the number of weightings
must be identical and should be at least two. Using the default p
, the
three corresponding quantiles are the 2.5th percentile, the median and the 97.5th
percentile, respectively. get.lnorm.par
uses the R function optim
with the method LBFGSB
. If this method fails the optimization method
NelderMead
will be invoked.
If show.output = TRUE
the output of the function optim
will be shown.
The item convergence
equal to 0 means the successful completion of the
optimization procedure, otherwise it indicates a convergence error. The item
value
displays the achieved minimal value of the functions that were minimized.
The estimated distribution parameters returned by the function optim
are
accepted if the achieved value of the minimized function (output component
value
of optim
) is smaller than the argument tol
.
The items of the probability vector p
should lie between 0 and 1.
The items of the weighting vector fit.weights
should be positive values.
The function which will be minimized is defined as a sum of squared differences
between the given probabilities and the theoretical probabilities of the specified
distribution evaluated at the given quantile points (least squares estimation).
Returns fitted parameters of a lognormal distribution or missing
values (NA
's) if the distribution cannot fit the specified quantiles.
Comply with a parametrization of this distribution. The definition of this
distribution in the literature is not unique.
It should be noted that there might be deviations between the estimated
and the theoretical distribution parameters in certain circumstances. This is
because the estimation of the parameters is based on a numerical optimization
method and depends strongly on the initial values. In addition, one must always
keep in mind that a distribution for different combinations of parameters may
look very similar. Therefore, the optimization method cannot always find the
"right" distribution, but a "similar" one.
If the function terminates with the error massage "convergence error occurred or
specified tolerance not achieved", one may try to set the convergence tolerance
to a higher value. It is yet to be noted, that good till very good fits of parameters
could only be obtained for tolerance values that are smaller than 0.001.
Matthias Greiner matthias.greiner@bfr.bund.de (BfR),
Katharina Schueller schueller@statup.de (STATUP Statistical Consulting),
Natalia Belgorodski belgorodski@statup.de (STATUP Statistical Consulting)
See plnorm
for distribution implementation details.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45  q < stats::qlnorm(p = c(0.025, 0.5, 0.975), meanlog = 4, sdlog = 0.8)
old.par < graphics::par(mfrow = c(2, 3))
get.lnorm.par(q = q)
get.lnorm.par(q = q, fit.weights = c(100, 1, 100))
get.lnorm.par(q = q, fit.weights = c(10, 1, 10))
get.lnorm.par(q = q, fit.weights = c(1, 100, 1))
get.lnorm.par(q = q, fit.weights = c(1, 10, 1))
graphics::par(old.par)
q < stats::qlnorm(p = c(0.025, 0.5, 0.975), meanlog=4, sdlog = 0.8)
old.par < graphics::par(mfrow = c(2, 3))
get.lnorm.par(q = q)
get.lnorm.par(q = q, fit.weights = c(100, 1, 100))
get.lnorm.par(q = q, fit.weights = c(10, 1, 10))
get.lnorm.par(q = q, fit.weights = c(1, 100, 1))
get.lnorm.par(q = q, fit.weights = c(1, 10, 1))
graphics::par(old.par)
q < stats::qlnorm(p = c(0.025, 0.5, 0.975), meanlog = 1, sdlog = 0.1)
old.par < graphics::par(mfrow = c(2, 3))
get.lnorm.par(q = q)
get.lnorm.par(q = q, fit.weights = c(100, 1, 100))
get.lnorm.par(q = q, fit.weights = c(10, 1, 10))
get.lnorm.par(q = q, fit.weights = c(1, 100, 1), scaleX = c(0.000001, 0.99999999))
get.lnorm.par(q = q, fit.weights = c(1, 10, 1))
graphics::par(old.par)
q < stats::qlnorm(p = c(0.025, 0.5, 0.975), meanlog = 0.1, sdlog = 0.1)
old.par < graphics::par(mfrow = c(2, 3))
get.lnorm.par(q = q)
get.lnorm.par(q = q, fit.weights = c(100, 1, 100))
get.lnorm.par(q = q, fit.weights = c(10, 1, 10))
get.lnorm.par(q = q, fit.weights = c(1, 100, 1))
get.lnorm.par(q = q, fit.weights = c(1, 10, 1))
graphics::par(old.par)
## example with only two quantiles
q < stats::qlnorm(p = c(0.025, 0.975), meanlog = 4, sdlog = 0.8)
old.par < graphics::par(mfrow = c(2, 3))
get.lnorm.par(p = c(0.025, 0.975), q = q)
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(100, 1), scaleX = c(0.1, 0.001))
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(1, 100), scaleX = c(0.1, 0.001))
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(10, 1))
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(1, 10))
graphics::par(old.par)

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.
All documentation is copyright its authors; we didn't write any of that.