gammamix function

Functionalities for Gamma Scale Mixture Models

Functionalities for Gamma Scale Mixture Models

Evaluating density-, distribution- and quantile-function of Gamma scale mixtures as well as random variate generation.

dgammamix(x, qmix, d, control = list(), verbose = TRUE, log = FALSE, ...) pgammamix(x, qmix, d, lower.tail = TRUE, control = list(), verbose = TRUE, ...) qgammamix(u, qmix, d, control = list(), verbose = TRUE, q.only = TRUE, stored.values = NULL, ...) rgammamix(n, rmix, qmix, d, method = c("PRNG", "sobol", "ghalton"), skip = 0, ...)

Arguments

  • x: nn-vector of evaluation points.

  • u: nn-vector of probabilities.

  • qmix: see pnvmix().

  • rmix: see rnvmix().

  • d: dimension of the underlying normal variance mixture, see also details below.

  • n: sample size nn (positive integer).

  • lower.tail: logical; if TRUE (default), probabilities are P(X<=x)P(X<= x), otherwise P(X>x)P(X > x).

  • log: logical indicating whether the log-density shall be returned.

  • q.only: see qnvmix().

  • stored.values: see qnvmix().

  • method: see rnvmix().

  • skip: see rnvmix().

  • control: list specifying algorithm specific parameters; see get_set_param().

  • verbose: logical

    indicating whether a warning is given if the required precision has not been reached.

  • ...: additional arguments (for example, parameters) passed to the underlying mixing distribution when qmix is a character string or function.

Returns

pgammamix() and dgammamix() return a numeric nn-vector with the computed probabilities/densities and corresponding attributes "abs. error"

and "rel. error" (error estimates of the RQMC estimator) and "numiter" (number of iterations).

If q.only = TRUE, qgammamix() a vector of the same length as u with entries qiq_i where qiq_i satisfies qi=infxF(x)>=uiq_i = inf_x { F(x) >= u_i} where F(x)F(x) the df of the Gamma mixture specified via qmix; if q.only = FALSE, see qnvmix.

rgammamix() returns a nn-vector containing nn

samples of the specified (via mix) Gamma mixture.

Details

We define a Gamma mixture as a random variable DsqDsq satisfying, in distribution, Dsq=WGamma(d/2,2)Dsq = W*Gamma(d/2, 2) where WW is specified via qmix. If XX follows a dd-dimensional normal variance mixture, the squared Mahalanobis distance (Xμ)TSigma1(Xμ)(X-\mu)^T Sigma^{-1}(X-\mu) has the same distribution as DsqDsq.

The functions presented here are similar to the corresponding functions for normal variance mixtures (d/p/q/rnvmix()), details can be found in the corresponding help-files there.

Author(s)

Erik Hintz, Marius Hofert and Christiane Lemieux

References

Hintz, E., Hofert, M. and Lemieux, C. (2021), Normal variance mixtures: Distribution, density and parameter estimation. Computational Statistics and Data Analysis 157C, 107175.

Hintz, E., Hofert, M. and Lemieux, C. (2022), Multivariate Normal Variance Mixtures in : The Package nvmix. Journal of Statistical Software, tools:::Rd_expr_doi("10.18637/jss.v102.i02") .

See Also

dnvmix(), pnvmix(), qnvmix(), rnvmix(), get_set_param(), qqplot_maha(), fitnvmix()

Examples

## Specify inverse-gamma mixture => results in d * F(d, nu) dist'n, ## handled correctly when 'qmix = "inverse.gamma"' is specified qmix <- function(u, nu) 1/qgamma(1 - u, shape = nu/2, rate = nu/2) ## Example for rgammamix() set.seed(271) # for reproducibility n <- 25 nu <- 3 d <- 5 x <- rgammamix(n, qmix = qmix, d = d, nu = nu) ## Evaluate distribution function at 'x' p.true_1 <- pgammamix(x, qmix = "inverse.gamma", d = d, df = nu) # calls pf(...) p.true_2 <- pf(x/d, df1 = d, df2 = nu) p.estim <- pgammamix(x, qmix = qmix, d = d, nu = nu) stopifnot(all.equal(p.true_1, p.true_2, tol = 1e-3, check.attributes = FALSE), all.equal(p.true_1, p.estim, tol = 1e-3, check.attributes = FALSE)) ## Evaluate density function at 'x' d.true_1 <- dgammamix(x, qmix = "inverse.gamma", d = d, df = nu) d.true_2 <- df(x/d, df1 = d, df2 = nu)/d d.est <- dgammamix(x, qmix = qmix, d = d, nu = nu) stopifnot(all.equal(d.true_1, d.true_2, tol = 5e-4, check.attributes = FALSE), all.equal(d.true_1, d.est, tol = 5e-4, check.attributes = FALSE)) ## Evaluate quantile function u <- seq(from = 0.5, to = 0.9, by = 0.1) q.true_1 <- qgammamix(u, qmix = "inverse.gamma", d = d, df = nu) q.true_2 <- qf(u, df1 = d, df2 = nu) * d q.est <- qgammamix(u, qmix = qmix, d = d, nu = nu) stopifnot(all.equal(q.true_1, q.true_2, tol = 5e-4, check.attributes = FALSE), all.equal(q.true_1, q.est, tol = 5e-4, check.attributes = FALSE))
  • Maintainer: Marius Hofert
  • License: GPL (>= 3) | file LICENCE
  • Last published: 2024-03-04

Useful links