# tggd: The Truncated Generalised Gamma Distribution In tggd: The Standard Distribution Functions for the Truncated Generalised Gamma Distribution

## Description

Density, distribution function, quantile function and random generation for the Truncated Generalised Gamma Distribution in linear space.

## Usage

 ```1 2 3 4 5``` ```dtggd(x, scale=1e14, a=-1, b=1, xmin=1e10, log = FALSE) ptggd(q, scale=1e14, a=-1, b=1, xmin=1e10, lower.tail = TRUE, log.p = FALSE) qtggd(p, scale=1e14, a=-1, b=1, xmin=1e10, lower.tail = TRUE, log.p = FALSE, res.approx=1e-2) rtggd(n, scale=1e14, a=-1, b=1, xmin=1e10, res.approx=1e-2) ```

## Arguments

 `x,q` Vector of quantiles. `p` Vector of probabilities. `n` Number of observations. If length(n) > 1, the length is taken to be the number required. `scale` Vector of values for scale, which controls the transition regime between the power law slope and the exponential cut-off of the TGGD. This is analogous to the scale parameter for the standard Gamma distribution (see `GammaDist`). `a` Vector of values for a, which controls the power law slope of the TGGD. `b` Vector of values for b, which controls the exponential cutoff of the TGGD. `xmin` Vector of values for xmin, which controls the lower limit at which to trancate the TGGD. `res.approx` The resolution used to create the inverted CDF required to map probability integrals back onto quantiles. `log, log.p` Logical; if TRUE, probabilities/densities p are returned as log(p). `lower.tail` Logical; if TRUE (default), probabilities are P[X <= x], otherwise, P[X > x].

## Details

This distribution function is described in detail in Murray, Robotham and Power 2016. The PDF is given by:

f(x;a,b,s,m) = b.((x/s)^(a).exp(-(x/s)^b))/(s.gamma_inc((a+1)/b,(m/s)^b))

where, from the argument list above, we use x=x, a=a, b=b, s=scale and m=xmin. gamma_inc is the upper incomplete Gamma function as defined by the gsl `gamma_inc` function, using the same argument ordering, where `gamma_inc(a,x)==pgamma(x,a,lower=FALSE)*gamma(x)` for a>0. `gamma_inc` is used because it allows for the computation of upper incomplete integrals in cases where a<=0.

## Value

dtggd gives the density, ptggd gives the distribution function, qtggd gives the quantile function, and rtggd generates random deviates.

Invalid arguments will result in return value NaN, with a warning.

The length of the result is determined by n for rtggd, and is the maximum of the lengths of the numerical arguments for the other functions.

The numerical arguments other than n are recycled to the length of the result. Only the first elements of the logical arguments are used.

## Author(s)

Aaron Robotham, Steven Murray

## References

Murray, Robotham and Power (2016)

`GammaDist` regarding the Gamma distribution. `RNG` about random number generation in R. `Distributions` for other standard distributions.
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17``` ```r <- rtggd(100,a=-2) hist(log10(r)) ##Ideally the output below should equal 1, in practice it will be very close: qtggd(ptggd(r))/r #These should be the same: integrate(dtggd,lower=1e10,upper=1e11,a=-1.5,b=0.7,xmin=1e10) ptggd(1e11,a=-1.5,b=0.7,xmin=1e10) #This should be very close to 1 (for a true PDF): ptggd(1e18,a=-1.5,b=0.7,xmin=1e10) #To show the link to the log10 (called log) and ln variants (and the slight inaccuracies) #these outputs should be a sequence from 0 to 1 (by=0.1): ptggd(10^qtggd_log(seq(0,1,by=0.1))) ptggd(exp(qtggd_ln(seq(0,1,by=0.1)))) ```