# lmrp: L-moments of a general probability distribution In lmom: L-Moments

## 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

 ```1 2 3 4 5``` ```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) ```

## Arguments

 `pfunc` Cumulative distribution function. `qfunc` Quantile function. `...` Arguments to `pfunc` or `qfunc`. `bounds` Either a vector of length 2, containing the lower and upper bounds of the distribution, or a function that calculates these bounds given the distribution parameters as inputs. `symm` For `lmrq`, a logical value indicating whether the distribution is symmetric about its median. For `lmrp`, either the logical value `FALSE` to indicate that the distribution is not symmetric, or a numeric value to indicate that the distribution is symmetric and that the specified value is the center of symmetry. If the distribution is symmetric, odd-order L-moments are exactly zero and the symmetry is used to slightly speed up the computation of even-order L-moments. `order` Orders of the L-moments and L-moment ratios to be computed. `ratios` Logical. If `FALSE`, L-moments are computed; if `TRUE` (the default), L-moment ratios are computed. `trim` Degree of trimming. If a single value, symmetric trimming of the specified degree will be used. If a vector of length 2, the two values indicate the degrees of trimming at the lower and upper ends of the “conceptual sample” (Elamir and Seheult, 2003) of order statistics that is used to define the trimmed L-moments. `acc` Requested accuracy. The function will try to achieve this level of accuracy, as relative error for L-moments and absolute error for L-moment ratios. `subdiv` Maximum number of subintervals used in numerical integration. `verbose` Logical. If `FALSE`, only the values of the L-moments and L-moment ratios are returned. If `TRUE`, more details of the numerical integration are returned: see “Value” section below.

## Details

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

## 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`).

## Note

In package lmom versions 1.6 and earlier, the “Details” section stated that “Integrals in those expressions are computed by numerical integration, using the R function `integrate`”. As of version 2.0, numerical integration uses an internal function that directly calls (slightly modified versions of) Fortran routines in QUADPACK (Piessens et al. 1983). R's own `integrate` function uses C code “based on” the QUADPACK routines, but in R versions 2.12.0 through 3.0.1 did not in every case reproduce the results that would have been obtained with the Fortran code (this is R bug PR#15219).

## Author(s)

J. R. M. Hosking [email protected]

## 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.

`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

 ``` 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 46 47 48 49 50 51 52 53 54 55 56 57``` ```## 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)) ## End(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) ```

lmom documentation built on Aug. 2, 2017, 9:03 a.m.