| LambertW-utils | R Documentation | 
 \times F Random VariablesDensity, distribution, quantile function and random number generation for a
Lambert W \times F_X(x \mid \boldsymbol \beta) random
variable with parameter \theta = (\alpha, \boldsymbol \beta, \gamma,
    \delta).
Following the usual R dqpr family of functions (e.g., rnorm,
dnorm, ...) the Lambert W \times F utility functions work as
expected: dLambertW evaluates the pdf at y,
pLambertW evaluates the cdf at y, qLambertW is the
quantile function, and rLambertW generates random samples from a
Lambert W \times F_X(x \mid \boldsymbol \beta) distribution.
mLambertW computes the first 4 central/standardized moments of a Lambert W
\times F.  Works only for Gaussian distribution.
qqLambertW computes and plots the sample quantiles of the data
y versus the theoretical Lambert W \times F theoretical
quantiles given \theta.
dLambertW(
  y,
  distname = NULL,
  theta = NULL,
  beta = NULL,
  gamma = 0,
  delta = 0,
  alpha = 1,
  input.u = NULL,
  tau = NULL,
  use.mean.variance = TRUE,
  log = FALSE
)
mLambertW(
  theta = NULL,
  distname = c("normal"),
  beta,
  gamma = 0,
  delta = 0,
  alpha = 1
)
pLambertW(
  q,
  distname,
  theta = NULL,
  beta = NULL,
  gamma = 0,
  delta = 0,
  alpha = 1,
  input.u = NULL,
  tau = NULL,
  log = FALSE,
  lower.tail = FALSE,
  use.mean.variance = TRUE
)
qLambertW(
  p,
  distname = NULL,
  theta = NULL,
  beta = NULL,
  gamma = 0,
  delta = 0,
  alpha = 1,
  input.u = NULL,
  tau = NULL,
  is.non.negative = FALSE,
  use.mean.variance = TRUE
)
qqLambertW(
  y,
  distname,
  theta = NULL,
  beta = NULL,
  gamma = 0,
  delta = 0,
  alpha = 1,
  plot.it = TRUE,
  use.mean.variance = TRUE,
  ...
)
rLambertW(
  n,
  distname,
  theta = NULL,
  beta = NULL,
  gamma = 0,
  delta = 0,
  alpha = 1,
  return.x = FALSE,
  input.u = NULL,
  tau = NULL,
  use.mean.variance = TRUE
)
| y,q | vector of quantiles. | 
| distname | character; name of input distribution; see
 | 
| theta | list; a (possibly incomplete) list of parameters  | 
| beta | numeric vector (deprecated); parameter  | 
| gamma | scalar (deprecated); skewness parameter; default:  | 
| delta | scalar or vector (length 2) (deprecated); heavy-tail
parameter(s); default:  | 
| alpha | scalar or vector (length 2) (deprecated); heavy tail
exponent(s); default:  | 
| input.u | users can supply their own version of U (either a vector of
simulated values or a function defining the pdf/cdf/quanitle function of
U); default:  | 
| tau | optional; if  | 
| use.mean.variance | logical; if  | 
| log | logical; if  | 
| lower.tail | logical; if  | 
| p | vector of probability levels | 
| is.non.negative | logical; by default it is set to  | 
| plot.it | logical; should the result be plotted? Default:  | 
| ... | further arguments passed to or from other methods. | 
| n | number of observations | 
| return.x | logical; if  | 
All functions here have an optional input.u argument where users can
supply their own version corresponding to zero-mean, unit variance input
U.  This function usually depends on the input parameter
\boldsymbol \beta; e.g., users can pass their own density function
dmydist <- function(u, beta) {...} as dLambertW(..., input.u
    = dmydist).  dLambertW will then use this function to evaluate
the pdf of the Lambert W x 'mydist' distribution.
Important: Make sure that all input.u in dLambertW,
pLambertW, ... are supplied correctly and return correct values –
there are no unit-tests or sanity checks for user-defined functions.
See the references for the analytic expressions of the pdf and cdf.  For
"h" or "hh" types and for scale-families of type =
    "s" quantiles can be computed analytically.  For location (-scale)
families of type = "s" quantiles need to be computed numerically.
mLambertW returns a list with the 4 theoretical
(central/standardized) moments of Y implied by \boldsymbol \theta
and distname (currrently, this only works for
distname = "normal"):
| mean | mean, | 
| sd | standard deviation, | 
| skewness | skewness, | 
| kurtosis | kurtosis (not excess kurtosis, i.e., 3 for a Gaussian). | 
rLambertW returns a vector of length n. If return.input =
TRUE, then it returns a list of two vectors (each of length n):
| x | simulated input, | 
| y | Lambert W random sample (transformed from  | 
qqLambertW returns a list of 2 vectors (analogous to qqnorm): 
| x | theoretical quantiles (sorted), | 
| y | empirical quantiles (sorted). | 
###############################
######### mLambertW ###########
mLambertW(theta = list(beta = c(0, 1), gamma = 0.1))
mLambertW(theta = list(beta = c(1, 1), gamma = 0.1)) # mean shifted by 1
mLambertW(theta = list(beta = c(0, 1), gamma = 0)) # N(0, 1)
###############################
######### rLambertW ###########
set.seed(1)
# same as rnorm(1000)
x <- rLambertW(n=100, theta = list(beta=c(0, 1)), distname = "normal") 
skewness(x) # very small skewness
medcouple_estimator(x) # also close to zero
y <- rLambertW(n=100, theta = list(beta = c(1, 3), gamma = 0.1), 
               distname = "normal")
skewness(y) # high positive skewness (in theory equal to 3.70)
medcouple_estimator(y) # also the robust measure gives a high value
op <- par(no.readonly=TRUE)
par(mfrow = c(2, 2), mar = c(2, 4, 3, 1))
plot(x)
hist(x, prob=TRUE, 15)
lines(density(x))
plot(y)
hist(y, prob=TRUE, 15)
lines(density(y))
par(op)
###############################
######### dLambertW ###########
beta.s <- c(0, 1)
gamma.s <- 0.1
# x11(width=10, height=5)
par(mfrow = c(1, 2), mar = c(3, 3, 3, 1))
curve(dLambertW(x, theta = list(beta = beta.s, gamma = gamma.s), 
                distname = "normal"),
     -3.5, 5, ylab = "",  main="Density function")
plot(dnorm, -3.5, 5, add = TRUE, lty = 2)
legend("topright" , c("Lambert W x Gaussian" , "Gaussian"), lty = 1:2)
abline(h=0)
###############################
######### pLambertW ###########
curve(pLambertW(x, theta = list(beta = beta.s, gamma = gamma.s),
                distname = "normal"),
      -3.5, 3.5, ylab = "", main = "Distribution function")
plot(pnorm, -3.5,3.5, add = TRUE, lty = 2)
legend("topleft" , c("Lambert W x Gaussian" , "Gaussian"), lty = 1:2)
par(op)
######## Animation 
## Not run: 
gamma.v <- seq(-0.15, 0.15, length = 31) # typical, empirical range of gamma
b <- get_support(gamma_01(min(gamma.v)))[2]*1.1
a <- get_support(gamma_01(max(gamma.v)))[1]*1.1
for (ii in seq_along(gamma.v)) {
  curve(dLambertW(x, beta = gamma_01(gamma.v[ii])[c("mu_x", "sigma_x")], 
                  gamma = gamma.v[ii], distname="normal"),
        a, b, ylab="", lty = 2, col = 2, lwd = 2, main = "pdf", 
        ylim = c(0, 0.45))
  plot(dnorm, a, b, add = TRUE, lty = 1, lwd = 2)
  legend("topright" , c("Lambert W x Gaussian" , "Gaussian"), 
         lty = 2:1, lwd = 2, col = 2:1)
  abline(h=0)
  legend("topleft", cex = 1.3, 
         c(as.expression(bquote(gamma == .(round(gamma.v[ii],3))))))
Sys.sleep(0.04)
}
## End(Not run)
###############################
######### qLambertW ###########
p.v <- c(0.01, 0.05, 0.5, 0.9, 0.95,0.99)
qnorm(p.v)
# same as above except for rounding errors
qLambertW(p.v, theta = list(beta = c(0, 1), gamma = 0), distname = "normal") 
# positively skewed data -> quantiles are higher
qLambertW(p.v, theta = list(beta = c(0, 1), gamma = 0.1),
          distname = "normal")
###############################
######### qqLambertW ##########
## Not run: 
y <- rLambertW(n=500, distname="normal", 
               theta = list(beta = c(0,1), gamma = 0.1))
layout(matrix(1:2, ncol = 2))
qqnorm(y)
qqline(y)
qqLambertW(y, theta = list(beta = c(0, 1), gamma = 0.1), 
           distname = "normal") 
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.