parkmu: Estimate the Parameters of the Kappa-Mu Distribution In lmomco: L-Moments, Censored L-Moments, Trimmed L-Moments, L-Comoments, and Many Distributions

Description

This function estimates the parameters (ν and α) of the Kappa-Mu (κ:μ) distribution given the L-moments of the data in an L-moment object such as that returned by lmoms. The relations between distribution parameters and L-moments are seen under lmomkmu.

The basic approach for parameter optimization is to extract initial guesses for the parameters from the table KMU_lmompara_bykappa in the .lmomcohash environment. The parameters having a minimum Euclidean error as controlled by three arguments are used for initial guesses in a Nelder-Mead simplex multidimensional optimization using the R function optim and default arguments.

Limited testing indicates that of the “error term controlling options” that the default values as shown in the Usage section seem to provide superior performance in terms of recovering the a priori known parameters in experiments. It seems that only Euclidean optimization using L-skew and L-kurtosis is preferable, but experiments show the general algorithm to be slow.

Usage

 1 2 3 4 parkmu(lmom, checklmom=TRUE, checkbounds=TRUE, alsofitT3=FALSE, alsofitT3T4=FALSE, alsofitT3T4T5=FALSE, justfitT3T4=TRUE, boundary.tolerance=0.001, verbose=FALSE, trackoptim=TRUE, ...) 

Arguments

 lmom An L-moment object created by lmoms or pwm2lmom. checklmom Should the lmom be checked for validity using the are.lmom.valid function. Normally this should be left as the default and it is very unlikely that the L-moments will not be viable (particularly in the τ_4 and τ_3 inequality). checkbounds Should the L-skew and L-kurtosis boundaries of the distribution be checked. alsofitT3 Logical when true will add the error term (\hatτ_3 - τ_3)^2 to the sum of square errors for the mean and L-CV. alsofitT3T4 Logical when true will add the error term (\hatτ_3 - τ_3)^2 + (\hatτ_4 - τ_4)^2 to the sum of square errors for the mean and L-CV. alsofitT3T4T5 Logical when true will add the error term (\hatτ_3 - τ_3)^2 + (\hatτ_4 - τ_4)^2 + (\hatτ_5 - τ_5)^2 to the sum of square errors for the mean and L-CV. justfitT3T4 Logical when true will only consider the sum of squares errors for L-skew and L-kurtosis as mathematically shown for alsofitT3T4. boundary.tolerance A fudge number to help guide how close to the boundaries an arbitrary list of τ_3 and τ_4 can be to consider them formally in or out of the attainable \{τ_3, τ_4\} domain. verbose A logical to control a level of diagnostic output. trackoptim A logical to control specific messaging through each iteration of the objective function. ... Other arguments to pass.

Value

An R list is returned.

 type The type of distribution: kmu. para The parameters of the distribution. source The source of the parameters: “parkmu”.

W.H. Asquith

References

Yacoub, M.D., 2007, The kappa-mu distribution and the eta-mu distribution: IEEE Antennas and Propagation Magazine, v. 49, no. 1, pp. 68–81

lmomkmu, cdfkmu, pdfkmu, quakmu
  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 ## Not run: par1 <- vec2par(c(0.7, 0.2), type="kmu") lmr1 <- lmomkmu(par1, nmom=4) par2.1 <- parkmu(lmr1, alsofitT3=TRUE, verbose=TRUE, trackoptim=TRUE) par2.1$para par2.2 <- parkmu(lmr1, alsofitT3T4=TRUE, verbose=TRUE, trackoptim=TRUE) par2.2$para par2.3 <- parkmu(lmr1, alsofitT3=FALSE, verbose=TRUE, trackoptim=TRUE) par2.3$para par2.4 <- parkmu(lmr1, justfitT3T4=TRUE, verbose=TRUE, trackoptim=TRUE) par2.4$para x <- seq(0,3,by=.01) plot(x, pdfkmu(x, par1), type="l", lwd=6, col=8, ylim=c(0,5)) lines(x, pdfkmu(x, par2.1), col=2, lwd=2, lty=2) lines(x, pdfkmu(x, par2.2), col=4) lines(x, pdfkmu(x, par2.3), col=3, lty=3, lwd=2) lines(x, pdfkmu(x, par2.4), col=5, lty=2, lwd=2) ## End(Not run) ## Not run: par1 <- vec2par(c(1, 0.65), type="kmu") lmr1 <- lmomkmu(par1, nmom=4) par2.1 <- parkmu(lmr1, alsofitT3=TRUE, verbose=TRUE, trackoptim=TRUE) par2.1$para # eta=1.0 mu=0.65 par2.2 <- parkmu(lmr1, alsofitT3T4=TRUE, verbose=TRUE, trackoptim=TRUE) par2.2$para # eta=1.0 mu=0.65 par2.3 <- parkmu(lmr1, alsofitT3=FALSE, verbose=TRUE, trackoptim=TRUE) par2.3$para # eta=8.5779 mu=0.2060 par2.4 <- parkmu(lmr1, justfitT3T4=TRUE, verbose=TRUE, trackoptim=TRUE) par2.4$para # eta=1.0 mu=0.65 x <- seq(0,3,by=.01) plot(x, pdfkmu(x, par1), type="l", lwd=6, col=8, ylim=c(0,1)) lines(x, pdfkmu(x, par2.1), col=2, lwd=2, lty=2) lines(x, pdfkmu(x, par2.2), col=4) lines(x, pdfkmu(x, par2.3), col=3, lty=3, lwd=2) lines(x, pdfkmu(x, par2.4), col=5, lty=2, lwd=2) lines(x, dlmomco(x, lmom2par(lmr1, type="gam")), lwd=2, col=2) lines(x, dlmomco(x, lmom2par(lmr1, type="ray")), lwd=2, col=2, lty=2) lines(x, dlmomco(x, lmom2par(lmr1, type="rice")), lwd=2, col=4, lty=2) ## End(Not run)