added "weibull" as supported distributions (ie distname="weibull" works for MLE)
misc print/summary cleanups
added reference to github pages for R (https://github.com/gmgeorg/LambertW) and Python (https://github.com/gmgeorg/pylambertw)
delta estimates (https://github.com/gmgeorg/LambertW/issues/3)ks.test.t to ks_test_t to avoid CRAN complaining about misuse of S3methodRd files for Rmarkdown to Suggests)WARNINGS (thanks to Kurt Hornik for help on resolving Rcpp
build errors)get_initial_tau() (happened when mad(y) = 0 --
which can happen for data with majority of values fall on the same exact
value)skewness.cpprewrote a couple of functions in C++ using the amazing (!) Rcpp package.
3-4x speed up for W related functions; also for IGMM and MLE_LambertW
added bootstrap functions for users to easily check if a Lambert W x F distribution with finite mean and variance input makes sense:
bootstrap.LambertW_fitanalyze_convergenceadded use.mean.variance argument to distinguish between mean-variance
Lambert W x F distributions and general location-scale Lambert W x F
distributions. See also Goerg (2015b). See the help file on these functions
for references on why they were included.
added more unit tests (moving code from "Examples" to unit tests)
theta argument in the dpqr function becomes the recommended argument to
specify the distribution. alpha, beta, gamma, delta now give warnings
and will be deprecated in future versions.gamma_Taylor for better initial
estimates.skewness() and kurtosis() instead directly in LambertW.moved from gsl to lamW R package: the Lambert W implementation is ~4x faster than for gsl. Needless to say that this will also speed up many computations in the LambertW package. Thank you Avraham Adler for the lamW package.
new functions:
deriv_xexp()normalize_by_tau()log_deriv_W()lots of performance improvements (not only due to lamW package). Leads to 2-3x faster estimation via IGMM or MLE overall.
added (first iteration) of unit tests using the testthat package
NAMESPACE following new CRAN policiesfrom = 0 in plot.LambertW_fit for scale families with all positive
values.get_distname_family returns a third logical entry non.negative to check
whether a distribution is for non-negative random variables (e.g., exponential
or Gamma).loglik_penalty loses the "distname" argument, but gains the
"is.non.negative" argument.any(is.na(...)) with anyNA(...) (small speedups)deriv_W faster and more precise using a log transform first and using
mathematial identities of the derivative of W, its derivative, and logarithm.delta_GMM and gamma_GMM (it's
about 30% faster than "nlm")delta_GMM: for delta too large (>1e100) the backtransformed data u
would become negligibly small and numerically a constant (1e-100); thus
kurtosis() estimate would be NaN, which resulted in stop of nlm function
in delta_GMM. Added an NA check and returned large value for objective
function, for nlm() to search for a better delta. backtransformedget_initial_theta: if initial estimates of gamma are too extreme, then the
backtransformed input data for X contains NA. This caused an error in
estimate_beta(). Now NAs are removed before passing x.init to
estimate_beta()log_W(Inf) returned NA; fixed to return Inf.qLambertW() didn't compute correct quantiles for non-negative distributions
(e.g., "exp" or "gamma") and type = "s"; replaced now with closed form
expressions.See also ?deprecated-function:
H(): use xexp() insteaddata input to Gaussianize() does not have to have colnames; will be
assigned by default if colnames(data) = NULLmLambertW which ignored delta values passed via thetaSeveral deprecated functions (see also ?deprecated-function):
normfit(): use test_normality() (or short test_norm()) insteadgrid to test_normality (previously known as normfit)Version 0.5 is a long awaited - big - update to the LambertW package. That's why it's a big bump from 0.2.9.9 to 0.5.
It has lots of improved code, bug fixes, more user friendly function (names) and implementation, more explicit error checking and meaningful error messages, etc.
Definitely check out the new manual - it has been reviewed very thoroughly.
W() (and related functions) gained a branch argument (see also deprecated
functions below).Gaussianize() gained several new arguments that allow to do the inverse
''DeGaussianization'' as well. See ?Gaussianize for details.check_beta()check_distname()check_tau()deriv_W_gamma()estimate_beta()get_distname_family()get_distnames()get_gamma_bounds()get_initial_tau()get_output() (due to popular demand)log_W()tau2theta()NEWS fileCITATION file. See citation information with citation("LambertW")FALSE).theta as argument in functions instead of alpha, beta, gamma,
or delta. Passing the elements as single arguments still works, but using
theta = list(beta = ..., gamma = ..., delta = ..., alpha = ...) is
preferred. In future versions the alpha, beta, gamma, and delta
arguments will be deprecated.normfit():
_ as separator in function names= to <-_ to . (unless it _ helps
understanding; e.g.,mu_y reminds of mu with the y subscript in LaTeX / pdf)get_initial_theta() instead of starting_theta(); get_support()
instead of support())normfit is
often called for visual checks only, I made the normality tests optional. They
are called if the nortest package is available (require(nortest) == TRUE); otherwise it just returns NA. This is useful in case users do not
have the nortest package available in their R installation.qU() and pU(): incorrect usage of standard deviation vs scale
in t distribution (dU() and thus log-likelihood was correct).ks.test.t now uses the scale parameter, rather than standard deviation.
This now allows to test also if degrees of freedom < 2.MLE_LambertW changed the estimate.only argument to return.estimate.only.Several deprecated functions (see also ?deprecated-function):
beta_names(): use get_beta_names()bounds_theta(): use get_theta_bounds()d1W() and d1W_1(): use deriv_W(..., branch).d1W_delta(), d1W_delta_alpha(): use deriv_W_delta() and deriv_W_delta_alpha().get.input(): use get_input()p_1(): use p_1m()params2theta(): use unflatten_theta()skewness_test(): use test_symmetry()starting_theta(): use get_initial_theta()support(): use get_support()theta2params(): use flatten_theta()vec.norm(): use lp_norm()W_1(): use W(z, branch = -1); similarly for W_gamma_1()W_2delta_alpha(): use W_2delta_2alpha().W_gamma_1(): use W_gamma(..., branch = -1).G() since it was never used. If you need it use G_delta(z, delta = 0).MLE_LambertW_new() and (MLE_LambertW_new.default()); MLE_LambertW now
works also for unbounded optimziation..default methods for IGMM and MLE_LambertW. They just work one way on a
numeric vector.optim(..., hessian = TRUE) instead.[email protected]get.input() had the wrong variable for nu > 2 (u instead of uu)loglik_penalty() returned NA for 0/0 when computing inverse
transformation. Replaced this term with equivalent expression avoiding 0/0.[email protected])