# AS269: Higher order Cornish Fisher approximation. In PDQutils: PDQ Functions via Gram Charlier, Edgeworth, and Cornish Fisher Approximations

## Description

Lee and Lin's Algorithm AS269 for higher order Cornish Fisher quantile approximation.

## Usage

 `1` ```AS269(z,cumul,order.max=NULL,all.ords=FALSE) ```

## Arguments

 `z` the quantiles of the normal distribution. an atomic vector. `cumul` the standardized cumulants of order 3, 4, ..., k. an atomic vector. `order.max` the maximum order approximation, must be greater than `length(cumul)+2`. We assume the cumulants have been adjusted to reflect that the random variable has unit variance ('standardized cumulants') `all.ords` a logical value. If `TRUE`, then results are returned as a matrix, with a column for each order of the approximation. Otherwise the results are a matrix with a single column of the highest order approximation.

## Details

The Cornish Fisher approximation is the Legendre inversion of the Edgeworth expansion of a distribution, but ordered in a way that is convenient when used on the mean of a number of independent draws of a random variable.

Suppose x_1, x_2, ..., x_n are n independent draws from some probability distribution. Letting

X = (x_1 + x_2 + ... x_n) / sqrt(n),

the Central Limit Theorem assures us that, assuming finite variance,

X ~~ N(sqrt(n) mu, sigma),

with convergence in n.

The Cornish Fisher approximation gives a more detailed picture of the quantiles of X, one that is arranged in decreasing powers of sqrt(n). The quantile function is the function q(p) such that P(x <= q(p)) = p. The Cornish Fisher expansion is

q(p) = sqrt{n}mu + sigma (z + sum_{3 <= j} c_j f_j(z)),

where z = qnorm(p), and c_j involves standardized cumulants of the distribution of x_i of order up to j. Moreover, the c_j include decreasing powers of sqrt(n), giving some justification for truncation. When n=1, however, the ordering is somewhat arbitrary.

## Value

A matrix, which is, depending on `all.ords`, either with one column per order of the approximation, or a single column giving the maximum order approximation. There is one row per value in `z`.

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

## Note

A warning will be thrown if any of the z are greater than 3.719017274 in absolute value; the traditional AS269 errors out in this case.

## Author(s)

Steven E. Pav [email protected]

## References

Lee, Y-S., and Lin, T-K. "Algorithm AS269: High Order Cornish Fisher Expansion." Appl. Stat. 41, no. 1 (1992): 233-240. http://www.jstor.org/stable/2347649

Lee, Y-S., and Lin, T-K. "Correction to Algorithm AS269: High Order Cornish Fisher Expansion." Appl. Stat. 42, no. 1 (1993): 268-269. http://www.jstor.org/stable/2347433

Jaschke, Stefan R. "The Cornish-Fisher-expansion in the context of Delta-Gamma-normal approximations." No. 2001, 54. Discussion Papers, Interdisciplinary Research Project 373: Quantification and Simulation of Economic Processes, 2001. http://www.jaschke-net.de/papers/CoFi.pdf

`qapx_cf`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26``` ```foo <- AS269(seq(-2,2,0.01),c(0,2,0,4)) # test with the normal distribution: s.cumul <- c(0,0,0,0,0,0,0,0,0) pv <- seq(0.001,0.999,0.001) zv <- qnorm(pv) apq <- AS269(zv,s.cumul,all.ords=FALSE) err <- zv - apq # test with the exponential distribution rate <- 0.7 n <- 18 # these are 'raw' cumulants' cumul <- (rate ^ -(1:n)) * factorial(0:(n-1)) # standardize and chop s.cumul <- cumul[3:length(cumul)] / (cumul[2]^((3:length(cumul))/2)) pv <- seq(0.001,0.999,0.001) zv <- qnorm(pv) apq <- cumul[1] + sqrt(cumul[2]) * AS269(zv,s.cumul,all.ords=TRUE) truq <- qexp(pv, rate=rate) err <- truq - apq colSums(abs(err)) # an example from Wikipedia page on CF, # \url{https://en.wikipedia.org/wiki/Cornish%E2%80%93Fisher_expansion} s.cumul <- c(5,2) apq <- 10 + sqrt(25) * AS269(qnorm(0.95),s.cumul,all.ords=TRUE) ```