chiSquaredInverseCdf

Evaluates the inverse of the chi‑squared distribution function.

Synopsis

chiSquaredInverseCdf (p, df)

Required Arguments

float p (Input)
Probability for which the inverse of the chi‑squared distribution function is to be evaluated. The argument p must be in the open interval (0.0, 1.0).
float df (Input)
Number of degrees of freedom of the chi‑squared distribution. The argument df must be greater than 0.

Return Value

The inverse of the chi‑squared distribution function evaluated at p. The probability that a chi‑squared random variable takes a value less than or equal to chiSquaredInverseCdf is p.

Description

The function chiSquaredInverseCdf evaluates the inverse distribution function of a chi‑squared random variable with ν = df and with probability p. That is, it determines x = chiSquaredInverseCdf(p, df) such that

\[p = \frac{1}{2^{v/2} \mathit{\Gamma}(v/2)} \int_0^x e^{-t/2} t^{v/2-1} dt\]

where Γ(⋅) is the gamma function. The probability that the random variable takes a value less than or equal to x is p.

For ν < 40, chiSquaredInverseCdf uses bisection (if ν ≤ 2 or p > 0.98) or regula falsi to find the point at which the chi‑squared distribution function is equal to p. The distribution function is evaluated using function chiSquaredCdf.

For 40 ≤ ν < 100, a modified Wilson-Hilferty approximation (Abramowitz and Stegun 1964, equation 26.4.18) to the normal distribution is used. The function normalCdf is used to evaluate the inverse of the normal distribution function. For ν ≥ 100, the ordinary Wilson-Hilferty approximation (Abramowitz and Stegun 1964, equation 26.4.17) is used.

Example

In this example, the 99-th percentage point is calculated for a chi‑squared random variable with two degrees of freedom. The same calculation is made for a similar variable with 64 degrees of freedom.

from __future__ import print_function
from numpy import *
from pyimsl.math.chiSquaredInverseCdf import chiSquaredInverseCdf

p = 0.99
df = 2.0
x = chiSquaredInverseCdf(p, df)
print("For p = .99 with 2 df, x =  %7.3f" % (x))

df = 64.0
x = chiSquaredInverseCdf(p, df)
print("For p = .99 with 64 df, x = %7.3f" % (x))

Output

For p = .99 with 2 df, x =    9.210
For p = .99 with 64 df, x =  93.217

Warning Errors

IMSL_UNABLE_TO_BRACKET_VALUE2 Unable to bracket the value of the inverse chi-squared at “p” = #, with “df” = #.
IMSL_CHI_2_INV_CDF_CONVERGENCE The value of the inverse chi‑squared could not be found within a specified number of iterations. An approximation for chiSquaredInverseCdf is returned.