The lmomco package is a comparatively comprehensive implementation of L-moments in addition to probability-weighted moments, and parameter estimation for numerous familiar and not-so-familiar distributions. L-moments and their cousins are based on certain linear combinations of order statistic expectations. Being based on linear mathematics and thus especially robust compared to conventional moments, they are particular suitable for analysis of rare events of non-Normal data. L-moments are consistent and often have smaller sampling variances than maximum likelihood in small to moderate sample sizes. L-moments are especially useful in the context of quantile functions. The method of L-moments (
lmr2par) is augmented here with access to the methods of maximum likelihood (
mle2par) and maximum product of spacings (
mps2par) as alternatives for parameter estimation bound into the distributions of the lmomco package.
About 350 user-level functions are implemented in lmomco that range from low-level utilities forming an application programming interface (API) to high-level sophisticated data analysis and visualization operators. The “See Also” section lists recommended function entry points for new users. The nomenclature (
lmomco is directly analogous to that for distributions built-in to R. To conclude, the R packages lmom (Hosking), lmomRFA (Hosking), Lmoments (Karvanen) might also be of great interest.
How does lmomco basically work? The design of lmomco is to fit distributions to the L-moments of sample data. Distributions are specified by a
type argument for very many functions. The package stores both L-moments (see
vec2lmom) and parameters (see
vec2par) in simple R
list structures—very elementary. The following code shows a comparison of parameter estimation for a random sample (
rlmomco) of a GEV distribution using L-moments (
lmoms coupled with
lmom2par or simply
lmr2par), maximum likelihood (MLE,
mle2par), and maximum product of spacings (MPS,
mps2par). (A note of warning, the MLE and MPS algorithms might not converge with the initial parameters—for purposes of “learning” about this package just rerun the code below again for another random sample.)
1 2 3 4 5 6 7 8 9
parent.lmoments <- vec2lmom(c(3.08, 0.568, -0.163)); ty <- "gev" Q <- rlmomco(63, lmom2par(parent.lmoments, type=ty)) # random sample init <- lmoms(Q); init$ratios <- 0 # failure rates for mps and mle are # substantially lowered if starting from the middle of the distribution's # shape to form the initial parameters for para.int lmr <- lmr2par(Q, type=ty) # method of L-moments mle <- mle2par(Q, type=ty, para.init=init) # method of MLE mps <- mps2par(Q, type=ty, para.init=init) # method of MPS lmr1 <- lmr$para; mle1 <- mle$para; mps1 <- mps$para
mps1 variables each contain distribution parameter estimates, but before they are inspected, how about quick comparison to another R package (eva)?
1 2 3 4 5
lmr2 <- eva::gevrFit(Q, method="pwm")$par.ests # PWMs == L-moments mle2 <- eva::gevrFit(Q, method="mle")$par.ests # method of MLE mps2 <- eva::gevrFit(Q, method="mps")$par.ests # method of MPS # Package eva uses a different sign convention on the GEV shape parameter mle2 <- -mle2; mps2 <- -mps2; lmr2 <- -lmr2;
Now let us inspect the contents of the six estimates of the three GEV parameters by three different methods:
1 2 3 4 5 6
message("LMR(lmomco): ", paste(round(lmr1, digits=5), collapse=" ")) message("LMR( eva): ", paste(round(lmr2, digits=5), collapse=" ")) message("MLE(lmomco): ", paste(round(mle1, digits=5), collapse=" ")) message("MLE( eva): ", paste(round(mle2, digits=5), collapse=" ")) message("MPS(lmomco): ", paste(round(mps1, digits=5), collapse=" ")) message("MPS( eva): ", paste(round(mps2, digits=5), collapse=" "))
The results show compatible estimates between the two packages. Lastly, let us plot what these distributions look like using the lmomco functions:
1 2 3 4 5 6 7 8
par(las=2, mgp=c(3,0.5,0)); FF <- nonexceeds(); qFF <- qnorm(FF) PP <- pp(Q); qPP <- qnorm(PP); Q <- sort(Q) plot( qFF, qlmomco(FF, lmr), xaxt="n", xlab="", tcl=0.5, ylab="QUANTILE", type="l") lines( qFF, qlmomco(FF, mle), col="blue") lines( qFF, qlmomco(FF, mps), col="red") points(qPP, Q, lwd=0.6, cex=0.8, col=grey(0.3)); par(las=1) add.lmomco.axis(las=2, tcl=0.5, side.type="NPP")
William Asquith [email protected]
Asquith, W.H., 2007, L-moments and TL-moments of the generalized lambda distribution: Computational Statistics and Data Analysis, v. 51, no. 9, pp. 4484–4496, https://dx.doi.org/10.1016/j.csda.2006.07.016.
Asquith, W.H., 2011, Distributional analysis with L-moment statistics using the R environment for statistical computing: Createspace Independent Publishing Platform, ISBN 978–146350841–8, https://www.amazon.com/dp/1463508417/.
Asquith, W.H., 2014, Parameter estimation for the 4-parameter asymmetric exponential power distribution by the method of L-moments using R: Computational Statistics and Data Analysis, v. 71, pp. 955–970, https://dx.doi.org/10.1016/j.csda.2012.12.013.
Dey, D.K., Roy, Dooti, Yan, Jun, 2016, Univariate extreme value analysis, chapter 1, in Dey, D.K., and Yan, Jun, eds., Extreme value modeling and risk analysis—Methods and applications: Boca Raton, FL, CRC Press, pp. 1–22.
Elamir, E.A.H., and Seheult, A.H., 2003, Trimmed L-moments: Computational statistics and data analysis, vol. 43, pp. 299-314, https://dx.doi.org/10.1016/S0167-9473(02)00250-5.
Hosking, J.R.M., 1990, L-moments—Analysis and estimation of distributions using linear combinations of order statistics: Journal of the Royal Statistical Society, Series B, v. 52, pp. 105–124.
Hosking, J.R.M., and Wallis, J.R., 1997, Regional frequency analysis—An approach based on L-moments: Cambridge University Press, http://www.amazon.com/dp/0521019400/.
Nair, N.U., Sankaran, P.G., and Balakrishnan, N., 2013, Quantile-based reliability analysis: Springer, New York, https://www.amazon.com/dp/0817683607/.
Serfling, R., and Xiao, P., 2007, A contribution to multivariate L-moments—L-comoment matrices: Journal of Multivariate Analysis, v. 98, pp. 1765–1781, https://dx.doi.org/10.1016/j.jmva.2007.01.008.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.