Learn R Programming

lmom (version 2.8)

lmrp: L-moments of a general probability distribution

Description

Computes the \(L\)-moments or trimmed \(L\)-moments of a probability distribution given its cumulative distribution function (for function lmrp) or quantile function (for function lmrq).

Usage

lmrp(pfunc, ..., bounds=c(-Inf,Inf), symm=FALSE, order=1:4,
     ratios=TRUE, trim=0, acc=1e-6, subdiv=100, verbose=FALSE)

lmrq(qfunc, ..., symm=FALSE, order=1:4, ratios=TRUE, trim=0, acc=1e-6, subdiv=100, verbose=FALSE)

Value

If verbose=FALSE and ratios=FALSE, a numeric vector containing the \(L\)-moments.

If verbose=FALSE and ratios=TRUE, a numeric vector containing the \(L\)-moments (of orders 1 and 2) and \(L\)-moment ratios (of orders 3 and higher).

If verbose=TRUE, a data frame with columns as follows:

value

\(L\)-moments (if ratios=FALSE), or \(L\)-moments and \(L\)-moment ratios (if ratios=TRUE).

abs.error

Estimate of the absolute error in the computed value.

message

"OK" or a character string giving the error message resulting from the numerical integration.

Arguments of cumulative distribution functions and quantile functions

pfunc and qfunc can be either the standard R form of cumulative distribution function or quantile function (i.e. for a distribution with \(r\) parameters, the first argument is the variate \(x\) or the probability \(p\) and the next \(r\) arguments are the parameters of the distribution) or the cdf… or qua… forms used throughout the lmom package (i.e. the first argument is the variate \(x\) or probability \(p\) and the second argument is a vector containing the parameter values). Even for the R form, however, starting values for the parameters are supplied as a vector start.

If bounds is a function, its arguments must match the distribution parameter arguments of pfunc: either a single vector, or a separate argument for each parameter.

Warning

Arguments bounds, symm, order, ratios, trim, acc, subdiv, and verbose cannot be abbreviated and must be specified by their full names (if abbreviated, the names would be matched to the arguments of pfunc or qfunc).

Details

Computations use expressions in Hosking (2007): eq. (7) for lmrp, eq. (5) for lmrq. Integrals in those expressions are computed by numerical integration.

References

Elamir, E. A. H., and Seheult, A. H. (2003). Trimmed L-moments. Computational Statistics and Data Analysis, 43, 299-314.

Hosking, J. R. M. (2007). Some theory and practical uses of trimmed L-moments. Journal of Statistical Planning and Inference, 137, 3024-3039.

Piessens, R., deDoncker-Kapenga, E., Uberhuber, C., and Kahaner, D. (1983). Quadpack: a Subroutine Package for Automatic Integration. Springer Verlag.

See Also

lmrexp to compute (untrimmed) \(L\)-moments of specific distributions.

samlmu to compute (trimmed or untrimmed) \(L\)-moments of a data sample.

pelp and pelexp, to compute the parameters of a distribution given its (trimmed or untrimmed) \(L\)-moments.

Examples

Run this code
# NOT RUN {
## Generalized extreme-value (GEV) distribution
## - three ways to get its L-moments
lmrp(cdfgev, c(2,3,-0.2))
lmrq(quagev, c(2,3,-0.2))
lmrgev(c(2,3,-0.2), nmom=4)

## GEV bounds specified as a vector
lmrp(cdfgev, c(2,3,-0.2), bounds=c(-13,Inf))

## GEV bounds specified as a function -- single vector of parameters
gevbounds <- function(para) {
  k <- para[3]
  b <- para[1]+para[2]/k
  c(ifelse(k<0, b, -Inf), ifelse(k>0, b, Inf))
}
lmrp(cdfgev, c(2,3,-0.2), bounds=gevbounds)

## GEV bounds specified as a function -- separate parameters
pgev <- function(x, xi, alpha, k)
  pmin(1, pmax(0, exp(-((1-k*(x-xi)/alpha)^(1/k)))))
pgevbounds <- function(xi,alpha,k) {
  b <- xi+alpha/k
  c(ifelse(k<0, b, -Inf), ifelse(k>0, b, Inf))
}
lmrp(pgev, xi=2, alpha=3, k=-0.2, bounds=pgevbounds)

## Normal distribution
lmrp(pnorm)
lmrp(pnorm, symm=0)
lmrp(pnorm, mean=2, sd=3, symm=2)
# For comparison, the exact values
lmrnor(c(2,3), nmom=4)

# Many L-moment ratios of the exponential distribution
# This may warn that "the integral is probably divergent"
lmrq(qexp, order=3:20)

# ... nonetheless the computed values seem accurate:
# compare with the exact values, tau_r = 2/(r*(r-1)):
cbind(exact=2/(3:20)/(2:19), lmrq(qexp, order=3:20, verbose=TRUE))

# Of course, sometimes the integral really is divergent
# }
# NOT RUN {
lmrq(function(p) (1-p)^(-1.5))
# }
# NOT RUN {
# And sometimes the integral is divergent but that's not what
# the warning says (at least on the author's system)
lmrp(pcauchy)

# Trimmed L-moments for Cauchy distribution are finite
lmrp(pcauchy, symm=0, trim=1)

# Works for discrete distributions too, but often requires
# a larger-than-default value of 'subdiv'
lmrp(ppois, lambda=5, subdiv=1000)
# }

Run the code above in your browser using DataLab