IGMM: Iterative Generalized Method of Moments - IGMM

View source: R/IGMM.R

IGMMR Documentation

Iterative Generalized Method of Moments – IGMM

Description

An iterative method of moments estimator to find this \tau = (\mu_x, \sigma_x, \gamma) for type = 's' (\tau = (\mu_x, \sigma_x, \delta) for type = 'h' or \tau = (\mu_x, \sigma_x, \delta_l, \delta_r) for type = "hh") which minimizes the distance between the sample and theoretical skewness (or kurtosis) of \boldsymbol x and X.

This algorithm is only well-defined for data with finite mean and variance input X. See analyze_convergence and references therein for details.

Usage

IGMM(
  y,
  type = c("h", "hh", "s"),
  skewness.x = 0,
  kurtosis.x = 3,
  tau.init = get_initial_tau(y, type),
  robust = FALSE,
  tol = .Machine$double.eps^0.25,
  location.family = TRUE,
  not.negative = NULL,
  max.iter = 100,
  delta.lower = -1,
  delta.upper = 3
)

Arguments

y

a numeric vector of real values.

type

type of Lambert W \times F distribution: skewed "s"; heavy-tail "h"; or skewed heavy-tail "hh".

skewness.x

theoretical skewness of input X; default 0 (symmetric distribution).

kurtosis.x

theoretical kurtosis of input X; default 3 (Normal distribution reference).

tau.init

starting values for IGMM algorithm; default: get_initial_tau. See also gamma_Taylor and delta_Taylor.

robust

logical; only used for type = "s". If TRUE a robust estimate of asymmetry is used (see medcouple_estimator); default: FALSE.

tol

a positive scalar specifiying the tolerance level for terminating the iterative algorithm. Default: .Machine$double.eps^0.25

location.family

logical; tell the algorithm whether the underlying input should have a location family distribution (for example, Gaussian input); default: TRUE. If FALSE (e.g., for "exp"onential input), then tau['mu_x'] = 0 throughout the optimization.

not.negative

logical; if TRUE, the estimate for \gamma or \delta is restricted to non-negative reals. If it is set to NULL (default) then it will be set internally to TRUE for heavy-tail(s) Lambert W \times F distributions (type = "h" or "hh"). For skewed Lambert W \times F (type = "s") it will be set to FALSE, unless it is not a location-scale family (see get_distname_family).

max.iter

maximum number of iterations; default: 100.

delta.lower, delta.upper

lower and upper bound for delta_GMM optimization. By default: -1 and 3 which covers most real-world heavy-tail scenarios.

Details

For algorithm details see the References.

Value

A list of class LambertW_fit:

tol

see Arguments

data

data y

n

number of observations

type

see Arguments

tau.init

starting values for \tau

tau

IGMM estimate for \tau

tau.trace

entire iteration trace of \tau^{(k)}, k = 0, ..., K, where K <= max.iter.

sub.iterations

number of iterations only performed in GMM algorithm to find optimal \gamma (or \delta)

iterations

number of iterations to update \mu_x and \sigma_x. See References for detals.

hessian

Hessian matrix (obtained from simulations; see References)

call

function call

skewness.x, kurtosis.x

see Arguments

distname

a character string describing distribution characteristics given the target theoretical skewness/kurtosis for the input. Same information as skewness.x and kurtosis.x but human-readable.

location.family

see Arguments

message

message from the optimization method. What kind of convergence?

method

estimation method; here: "IGMM"

Author(s)

Georg M. Goerg

See Also

delta_GMM, gamma_GMM, analyze_convergence

Examples


# estimate tau for the skewed version of a Normal
y <- rLambertW(n = 100, theta = list(beta = c(2, 1), gamma = 0.2), 
               distname = "normal")
fity <- IGMM(y, type = "s")
fity
summary(fity)
plot(fity)
## Not run: 
# estimate tau for the skewed version of an exponential
y <- rLambertW(n = 100, theta = list(beta = 1, gamma = 0.5), 
               distname = "exp")
fity <- IGMM(y, type = "s", skewness.x = 2, location.family = FALSE)
fity
summary(fity)
plot(fity)

# estimate theta for the heavy-tailed version of a Normal = Tukey's h
y <- rLambertW(n = 100, theta = list(beta = c(2, 1), delta = 0.2), 
               distname = "normal")
system.time(
fity <- IGMM(y, type = "h")
)
fity
summary(fity)
plot(fity)

## End(Not run)

LambertW documentation built on Nov. 2, 2023, 6:17 p.m.