----------------------------------------------------------
ChangeLog for R Package LMOMCO by W.H. Asquith
----------------------------------------------------------

Version 0.3---January 31, 2006 Initial Release
   Note that "CCC" in these notes generically reflects the abbreviation
   of supported distributions such as "gam" for the Gamma distribution.


Version 0.4---February 28, 2006
0. Numerous enhancements to the documentation.
1. BUG FIX on fourth L-moment of Cauchy distribution in lmomcau().
2. BUG FIX on absolute value of TAU5 in are.lmom.valid().
3. BUG FIXES on are.pargld.valid().
4. Addition of cdfgld() [stable], lmomgld() [stable], pargld() [experimental].
5. Addition of lmomTLgld() [stable] and parTLgld() [experimental].
6. Addition of lmomTLgpa() [stable] and parTLgpa() [stable].
7. Addition of vec2TLmom().


Version 0.5---March 12, 2006
1. Total redesign of pargld() and parTLgld().
2. Adjustments to interface of lmomTLgpa() and parTLgpa() for consistency with
     the GLD distribution.
3. Major additions to freq.curve.all() (addition of plotting options and
     more verbose messaging).
4. Speed up of freq.curve.gld() by addition of paracheck=FALSE to quagld().
5. Internal functions to lmomkap() are now defined internal to the function.
6. check.fs() added.
7. Improvement to output of lmom.test.CCC() functions.


Version 0.6---March 25, 2006
0. Tweaks and corrections to documentation---learning more about LaTeX too.
1. are.par.valid() could not dispatch to Wakeby distribution---fixed.
2. Extension of TL-moments to asymmetry: trimming in either tails is available.
3. Addition of theoLmoms() to compute theoretical L-moments: uses theoTLmoms().
4. Addition of theoTLmoms() to compute theoretical TL-moments using numerical
     integration of the quantile function. A valuable check on par2lmom()
     or the lmomCCC() functions.
5. par2cdf() did not dispatch to Generalized Lambda distribution---fixed.
6. Addition of nowarn toggle to vec2par() {implemented therein}, through
     are.par.valid() via the ..., and each of the are.parCCC.valid()
     {implemented therein}. This was done so that parameter optimization
     algorithms could be built on top of the parameter validation checks and
     cascading warning messages that the user would not care about can be
     surpressed.


Version 0.7---April 13, 2006
1. Added full vectorization of the quaCCC() and cdfCCC() functions. Previously
     each function did not handle a vector of nonexceedance probability and
     quantile values in each respective function.
2. Added extract argument to the pargld() and parTLgld() functions.
3. Incorporated endpoint or range checking on cdfgld().


Version 0.75---April 30, 2006
1. Added lmoms(), which in reality dispatches to TLmoms(), but provides a lower
     case name space and eventually could take the place of lmom.ub().
2. Added additional error trapping to TLmom() and TLmoms().
3. Added the Weibull distribution (wei).
4. Added the random deviate generator rlmomco() given sample size and
     parameter object.
5. Added the plotting-position formula by pp().


Version 0.76---May 11, 2006
0a. Further progress on documentation following R-help feedback and my own
     proofreads.
0b. Adding more examples to the documentation.
1. Added par2cdf2() and par2qua2() for combining two quantile functions
     into one through minor abilities to control weight factors.
2. BUG FIX on vec2lmom()---function did not retain NULL for undefined
     L-moment (because of sample size) prior to calling are.lmom.valid().
3. Plotting-position formula changed in pp.R and substantial documentation
     added to parallel that in Handbook of Hydrology.
4. Adjusted all parCCC() functions (not including parameter estimation
     using TL-moments) to support either the lmom.ub() or lmoms() L-moment
     objects. The new function lmorph() is used for the object conversion.
5. Added the dist.list() function for convenience.


Version 0.77---May 15, 2006
0. Pertaining to number 1, enhancement to documentation of the Lcomoment
     functions has been made.
1. BUG FIX on a single conditional in Lcomoment.coefficients. Function was
     handling a first-order first argument, but crashing on order evaluation
     of the second argument.


Version 0.80---June 20, 2006
0. Further tweaks to the documentation.
1. Warning message added when TAU5 missing on call to pargld() and parTLgld().
2. Added support for user supplied initial guess for pargld() and parTLgld().
3. BUG FIX on pargev(). The function was broken for TAU3 < -0.80. Bug caused
     during port from Hosking FORTRAN library. Bug was discovered during tests
     of parwei().


Version 0.82--July 13, 2006
0. Further tweaks to the documentation.
1. Word of caution about lack of checking by the function of monotonic
     increase of par2cdf2() an par2qua2().
2. Added the qua2ci() function for estimation of confidence limits of quantiles
     of a distribution using Monte Carlo simulation.
3. It was possible to call are.lmom.valid() with an object from lmoms()
     without an actual check on the L-moments because length(lmom$L1) == 0 was
     not checked. The function lmorph() is now used to convert prior to
     validation.
4. Added the gen.freq.curves() function for plotting randomly generated
     frequency curves by specifying: sample size, the parent distribution, and
     the number of simulations.
5. Added the genci() function for generation of lists or data.frames of
     confidence intervals for a vector of nonexceedance probabilities, a given
     sample size, and a specified parent using Monte Carlo simulation.
6. Recognition that the quaCCC() functions had been extended into the features
     provided by freq.curve.CCC() functions.  Thus, all freq.curve.CCC()
     functions were removed from the package.
7. BUG FIX on F=0||1 probabilities into quape3(). Bug occurred in extension
     of function to handle a vector of probabilities during development of
     version 0.7 of this package.
8. lmompe3() did not compute and hence return L-CV---incomplete port from
     Hosking library. L-CV is returned now.
9. pargam() would return invalid parameters as the specific range of L-moments
     for a valid gamma was not being checked. This was because of an incomplete
     port of Hosking FORTRAN library.


Version 0.83--April 10, 2007
0. Further tweaks to documentation.
1. Added callplot and showsample options to gen.freq.curves().
2. Added plmomco() and qlmomco() as adjuncts to rlmomco() and to better
     parallel built-in distribution functions of R itself.
3. BUG FIX on examples in genci() that manifested as the April 2007
     release of R approached.


Version 0.84--May 2, 2007
1. BUG FIX on genci() related to overwriting the sample size by the length
     of the nonexceedance probability vector. Fixed and tested. The function
     was extended to handle the ifail value from qua2ci().
2. Additional warning message added to qua2ci() when the L-moments of the
     simulated sample are not valid---likely a cause of a small sample size and
     a complex (high parameter number distribution), which produces one or more
     giant magnitude numbers for a simulated quantile. Added the ifail and
     ifailtext return elements from the qua2ci() function for better processing
     by the genci() or other calling functions. Also, added the maxlogdiff
     argument to control whether a simulated quantile is actually retained
     before the completion sequence of the function is begun. This argument
     is used to control whether hideously "out-of-whack," which would
     likely occur for heavy-tailed infinite limit upper tails.


Version 0.85--July 14, 2007
1. Textual fixes to documentation of qua2ci() and warning message change
     in qua2ci().
2. BUG FIX on pwm.ub() by fixing pwm.pp(). I had misinterpreted Hosking's
     argument call in his samlmr FORTRAN function. The unbiased PWMs were
     certainly not being correctly computed. I gutted the code entirely and
     now rely on R's choose() to get binomial coeficients. The much cleaner
     code no longer shares structure with Hosking's function. The changes in
     pwm.ub() and pwm.pp() caused a cascade of adjustments to pwm.gev(). Each
     of these functions now returns a more logical list structure containing
     the betas in a similar fashion as lmoms(). Some of the last vestiges of
     the original lmomco package (preCRAN) are now updated. The new list
     structure supports an arbitrary number of moments now. This activity
     was spawned by the addition of pwm(), which in turn was spawned by
     the addition of pwmRC() described in the next item. In fact
     pwm.ub() now dispatches to pwm(). Also if A=0 and B=0 in pwm.pp(), then a
     dispatch is made to pwm(); this mimics Hosking's ideas of implementation.
3. Added the pwm() function. The function provides a nice neat and clean
     code structure which provides a simple implementation example of PWM
     computation. I used the logic structure of pwm() to test and inturn
     implement the more complex logic of the pwmRC() function. Further
     the pwm() name shares a style with the lmoms() name, but I can not decide
     whether pwm() should really be pwms(); note the plural "s." I think I
     will stay with the shorter version and leave lmoms() alone for legacy
     reasons.
4. Added the pwmRC() function. The RC stands for right censored; that is values
     larger than some value are not observed. The function computes the A-type
     and B-type Probability-Weighted Moments and the censoring fraction given
     a sample data set and an upper threshold. This new function can be used
     to compute B-type PWMs and hence B-type L-moments for the Reversed
     Gumbel and Generalized Pareto Distributions.
5. Added the lmomgpaRC() and pargpaRC() functions. These compute the B-type
     L-moments from the parameters of a right-censored Generalized Pareto
     Distribution, and compute the parameters of a right-censored Generalized
     Pareto Distribution. The distributions continues to be type "gpa" and
     implemented in the usual fashion via quagpa() and cdfqpa(). Only the
     L-moments and parameter estimation functions are separately implemented.
6. Added the cdfrevgum(), lmomrevgum(), parrevgum(), and quarevgum() functions
     to implement the Reverse Gumbel distribution.
7. Modified the vec2par() function to accept an extra parameter (the last in
     the vector), which will become the zetas of the Reverse Gumbel ("revgum")
     and right-censored Generalized Pareto Distributions.
8. Modified the lmom2par() function to accept the "revgum" (Reverse Gumbel)
     and right-censored Generalized Pareto Distributions through the passage
     of "..." to the pargpa() and parrevgum() functions. The "..." would be
     the zeta or right-censoring fraction for each.
9. Adjustments to pwm2lmom() and in a few other locations to return NA for
     the first L-moment ratio as it does not exist.
10. Adjustments made to par2lmom() to accept "revgum" (Reversed Gumbel).
11. Added the Apwm2Bpwm() and Bpwm2Apwm() functions.
12. Modified lmom.diff() to accommodate both the named L-moment object style
     and the vector style through a dispatch to the lmorph() function.


Version 0.86--July 23, 2007
1. Added the pmoms() function, justified in part by revisions Pearson Type III.
2. Cleaned up the documentation for the Pearson Type III to better reflect
     the meaning of the parameters. Reimplemented cdfpe3() in more native
     R from Hosking's FORTRAN. This function is now broken from the FORTRAN
     code base. The original cdfpe3() of this package is now renamed to
     cdfpe3.original() and is not loaded with the package, but resides
     elsewhere in the directory structure. This reworking was spawned by
     an inquiry from R.R.P. van Nooyen in July 2007.
3. BUG FIX on parpe3(). Condition of negative L-skew was not implemented
     correctly---fixed and rigorously tested using the pmoms() function.


Version 0.87--August 1, 2007
1. Added the xlab and ylab arguments to plotlmrdia(), which provide user
     flexibility of the naming of each axis.
2. Added the checklmom=TRUE argument to parexp(), pargam(), pargev(),
     parglo(), pargno(), pargpa(), pargpaRC(), pargum(), parkap(),
     parnor(), parpe3(), parrevgum(), parwak(), and parwei() to bypass
     the internal call to are.lmom.valid(). This feature was added after
     discussion with Hosking about a simulation study of the Pearson
     Type III distribution. One can simulate values and compute L-moments
     that fail the tau4/tau3 inequality and parameters can not be estimated.
     However, because that distribution has only three parameters, we do not
     care whether the tau4 is actually viable. Invalid L-moments can manifest
     with the Pearson Type III  when the sample size is small and the standard
     deviation and skew magnitude are large.


Version 0.88--September 1, 2007
1. Added the prob2T() and T2prob() functions for annual nonexceedance
     probability and T-year return period conversions.
2. Added the harmonic.mean() function for support of a zero-value corrected
     computation of this particular statistics. Whereas, this statistic
     is not L-moment related, it is important in the field of surface-water
     hydrology and the lmomco package is a convenient place to store the
     function for the specific needs of your author.


Version 0.90--October 2, 2007
1. Added the autolegend, xleg, and yleg arguments to plotlmrdia().
2. Error in lmrdia.Rd regarding gamma distribution fixed.
3. Error in equation in pwm.ub.Rd fixed.
4. BUG FIX on pwm.pp(). Why has getting the plotting-position estimator
     working correctly been a nightmare? I think it is finally correct.
     Part of the problem is in inconsistencies in nomenclature in the
     literature as well as your humble author.
5. Correction to math in TLmoms.Rd.
6. Correction to math in parTLgpa.Rd.
7. BUG FIX on cdfpe3() and a correction made to the documentation. The
     function did not work for negative skew. Whew! Problem was discovered
     during development of pdfpe3().
8. Added probability density functions for cau, exp, gam, gev, gld, glo,
     gno, gpa, gum, nor, pe3.  More to come---in another release.
9. Added par2pdf().


Version 0.91--October 24, 2007
1. Refined plotlmrdia().
2. Added pdfrevgum() and pdfwei().
3. Documentation fix for cdfrevgum().
4. Added check.pdf(), which will be an important convenience function for
     testing the properties of the pdfCCC() functions and the cdfCCC()
     functions.
5. BUG FIX on parwei(). Function was unnecessarily querying fifth
     L-moment when the fifth L-moment is not needed. So one did not have five
     or more L-moments then parwei() would not work. This was unnecessarily
     restrictive.
6. Added z.par2cdf() and z.par2qua() to accommodate zero values or other in the
     building of ``blipped distributions'' to quote Gilchrist (2000, p. 148).
7. Added umvu.sd to pmoms()---uniformly-minimum variance unbiased estimator.
8. BUG FIX on quacau(). Function did not return a vector if one of the F values
     happened to be equal to exactly 0.5.
9. BUG FIX on are.pargam.valid(). Test did not permit Beta > 0, but mistakenly
     tested for Beta > 1.
10. BUG FIX on are.parcau.valid(). Test did not check that Alpha > 0.


Version 0.92--November 20, 2007
1. Documentation tweaks.
2. Added pdfkap() and pdfwak() following written communication with
     J.R.M Hosking.
3. Added qua.ostat() for computation of the quantile distribution of an
     arbitrary order statistic given a sample size and parameters of a fitted
     distribution.
4. Added digits=4 and signif() functions for reduction in returned numbers from
     the lmom.test.CCC() and lmom.diff() functions in response to comments
     from an anonymous reviewer.
5. Added lmom2vec() for conversion of L-moment object to a simple vector. This
     function spawned from discussions with an L-moment user who did not use
     the parameter list model of lmomco functions.


Version 0.93--December 12, 2007
1. BUG FIX: prob2T() and T2prob() error traps were not sufficiently vectorized.
2. Documentation error fixed on equation for pdfcau().


Version 0.93.2--December 19, 2007
1. BUG FIX: lmom2pwm() did not properly trap conditions that should result in
     the return of NULL. Thanks to Roberto Ugoccioni for discovery and for
     providing a patch.


Version 0.93.3--February 2, 2008
1. Added dlmomco() to complete the quartet of R-like named distribution
     accessing functions: dlmomco(), plmomco(), qlmomco(), rlmomco().
2. BUG FIX: are.pargpa.valid() mistakenly did not trip failure for K == -1.


Version 0.93.4--April 28, 2008
1. parrevgum() and lmomrevgum() had a str() on the L-moments and produced
     output---left over from original development.
2. BUG FIX: par2qua, par2cdf, and par2pdf did not properly dispatch for the
     reverse Gumbel distribution. Fixed.
3. Added the pwm2vec() function because there was an lmom2vec() already.
4. BUG FIX: Small near zero gamma parameter for pdfpe3() was triggering an
     Inf error on the gamma() function. This is now trapped and the Normal
     distribution being used as required.
5. Added prettydist() to produce full distribution names from the abbrev-
     iations, such as returned by dist.list().
6. Added clearforkporosity.R data set.
7. BUG FIX: For the UMVE of standard deviation by pmoms() the ratio of two
     gamma() functions blows up for large sample sizes. Therefore, computations
     are now performed in log-space.


Version 0.94--June 6, 2008
0. Documentation tweaks to remove or populated empty sections of check.pdf.Rd,
     are.parrevgum.valid.Rd, and lmomrevgum.Rd.
1. Added gini.mean.diff().
2. Added sen.mean().
3. Harmonic.mean() now strips is.na() values in similar fashion as
     gini.mean.diff() and sen.mean(). In time such operations are expected in
     other functions. Several users have commented on original lack of
     x <- x[! is.na(x)] filtering in other functions.


Version 0.95--August 23, 2008
1. Warning message tweak (capitalization) in sen.mean().
2. Added names() to the parameters in the $para field of the parameter list
     returned by the parXXX() functions. These names parallel the Greek
     letters used in the formal mathematical definitions of the distributions
     in the package documentation and any additional write ups that your
     humble author might make. The idea was stolen from the evir package
     that provides maximum likelihood estimation for the GEV distribution.
     Your author admits that these names should have been added long ago.
3. Added names() to the parameters in the $para field of the parameter list
     returned by the vec2par() function.
4. quakap() and quawak() now return Inf (or -Inf) for appropriate limits as
     dictated by the values of the arguments.
5. Typo fixed in z.par2qua.Rd.
6. Formally added the data subdirectory and a suite of data files suitable
     for various exercises with lmomco.


Version  0.96--September 15, 2008
1. Added support for known xi in parameter estimation in pargpa() and
     pargpaRC().
2. BUG FIX: cdfgam() was not properly vectorized.
3. Added the Rayleigh distribution as abbreviation "ray".
4. Added the attributes() function to strip parameters names from the
     parameter vector within ALL the lmomXXX() functions. Unsightly,
     L-moments were otherwise being returned.
5. The example in is.revgum() did not actually call the function--does now.
6. Added the quiet argument to genci().
7. Added lcomoms2() to make it much easier to access bundles of
     sample L-comoments values. Output of---that is, return of---the
     matrices or diagonals can be specified.


Version 0.96.2--November 17, 2008
1. Tweak to quawak() for condition of F=1.
2. Added the sort=TRUE argument to pp() so that sorted (default and historical)
     and unsorted plotting positions could be returned. An appropriate example
     was added. Also strengthed the condition of the plotting-position
     coefficient range---have restricted the coefficient between Weibull (a=0)
     and Hazen (a=0.50) so "a \in [0,0.5]." The pp() function uses the rank()
     function, which has specific settings to handle tied data. For the pp()
     function, the ties.method="first" method is used for rank().
3. Fixed Lcomoment.matrix() to return NA in the off diagonal elements if the
     moment order is 1.


Version 0.96.3--February 20, 2009
1. Added the par2vec() function (added to aid feeding of parameters into
     functions of the lmom package by J.R.M. Hosking).
2. Added the hlmomco() function to compute the harzard function or hazard rate
     of distributions.
3. Added the zzz.R file that holds operations to perform when the lmomco
     package is loaded. I have a message printed to terminal on loading of
     the package. This feature needed the packageDescription() function from
     the utils package. So the Depends: section of DESCRIPTION is now
     populated accordingly.
4. Tweaks to perhaps two dozen Rd files in preparation for the R-based parsing
     in the R +2.8.x series in which previous LaTeX loop holes have been shut.


Version 0.97.1--July 18, 2009
1. Tweak in documentation in is.ray().
2. BUG FIX in parray() and lmomray().
3. Added the 3-parameter log-Normal distribution ("ln3") by referencing the
     algorithms in the lmom package by J.R.M. Hosking. Remember that the
     3-parameter is an alternative parameterization of the Generalized
     Normal distribution ("gno").


Version 0.97.2--October 27, 2009
1. Tweaks to lmomgld.Rd, prob2T.Rd, z.par2cdf.Rd, z.par2qua.Rd in preparation
     for new release of R.


Version 1.0.01--August 10, 2010 (version "1" because of censoring support)
1. Added lmomsRCmark() and fliplmoms() for right-tail censoring and left-tail
     censoring support, respectively (somewhat). Additional examples added
     to document how to do right-tail censoring (see lmomsRCmark()) and left-
     tail censoring (see fliplmoms()).
2. Additional example in Lcomoment.Wk() to show how this function can be
     use to compute weight factors representing the relative contribution
     of each sample order statistics in the computation of a given order
     of L-moment. The example shows how to double check output of lmoms().
     Thanks to the anonymous poster.
3. Very minor tweaks to documentation as R version change identified
     some formatting problems.


Version 1.1.0--October 31, 2010
1. Deprecated lmom.test*.R/Rd and lmom.diff.R/Rd and moved them to inst/legacy.
     These were simply no longered needed and were originally created for
     development purposes anyway. Also lmom.references.Rd is now in inst/legacy.
2. Added the Kumaraswamy distribution ("kur") functions and other supporting
     functions. This distribution is bounded on (0,1) and is a semi-beta
     replacement with very convenient distribution functions that are not 
     dependent on the Beta function family. Additions to the supporting
     functions provided the discovery of missing ln3 as described below.
3. Added the 3-parameter log-Normal distribution ("ln3") to dist.list.R/Rd.
4. Added the 3-parameter log-Normal distribution ("ln3") to lmom2par.R/Rd.
5. Fixed text running over the right margin of the user manual for cdfrevgum.Rd,
     genci.Rd, lmomsRCmark.Rd, parrevgum.Rd, pdfrevgum.Rd, plotlmrdia.Rd,
     pwm.Rd, pwmRC.Rd, quarevgum.Rd, and sen.mean.Rd.
