GFNIN

This function evaluates the inverse of a general continuous cumulative distribution function given in a subprogram.

Function Return Value

GFNIN — The inverse of the function F at the point P. (Output)
F(GFNIN) is “close” to P.

Required Arguments

F — User‑supplied FUNCTION to be inverted. F must be continuous and strictly monotone. The form is F(X), where
X — The argument to the function. (Input)
F — The value of the function at X. (Output)
F must be declared EXTERNAL in the calling program.

P — The point at which the inverse of F is desired. (Input)

GUESS — An initial estimate of the inverse of F at P. (Input)

Optional Arguments

EPS — Convergence criterion. (Input)
When the relative change in GFNIN from one iteration to the next is less than EPS, convergence is assumed. A common value for EPS is 0.0001. Another common value is 100 times the machine epsilon.
Default: EPS = 100 times the machine epsilon.

FORTRAN 90 Interface

Generic: GFNIN (F, P, GUESS [])

Specific: The specific interface names are S_GFNIN and D_GFNIN.

FORTRAN 77 Interface

Single: GFNIN (F, P, EPS, GUESS)

Double: The double precision name is DGFNIN.

Description

Function GFNIN evaluates the inverse of a continuous, strictly monotone function. Its most obvious use is in evaluating inverses of continuous distribution functions that can be defined by a FORTRAN function. If the distribution function cannot be specified in a FORTRAN function, but the density function can be evaluated at a number of points, then routine GCIN can be used.

Function GFNIN uses regula falsi and/or bisection, possibly with the Illinois modification (see Dahlquist and Bjorck 1974). A maximum of 100 iterations are performed.

Comments

1. Informational errors

 

Type

Code

Description

4

1

After 100 attempts, a bound for the inverse cannot be determined. Try again with a different initial estimate.

4

2

No unique inverse exists.

4

3

Over 100 iterations have occurred without convergence. Convergence is assumed.

2. The function to be inverted need not be a distribution function, it can be any continuous, monotonic function.

Example

In this example, we find the 99–th percentage point for an F random variable with 1 and 7 degrees of freedom. (This problem could be solved easily using routine FIN. Compare the example for FIN). The function to be inverted is the F distribution function, for which we use routine FDF. Since FDF requires the degrees of freedom in addition to the point at which the function is evaluated, we write another function F that receives the degrees of freedom via a common block and then calls FDF. The starting point (initial guess) is taken as two standard deviations above the mean (since this would be a good guess for a normal distribution). It is not necessary to supply such a good guess. In this particular case, an initial estimate of 1.0, for example, yields the same answer in essentially the same number of iterations. (In fact, since the F distribution is skewed, the initial guess, 7.0, is really not that close to the final answer.)

 

USE UMACH_INT

USE GFNIN_INT

IMPLICIT NONE

INTEGER NOUT

REAL DFD, DFN, F, F0, GUESS, P, SQRT

COMMON /FCOM/ DFN, DFD

INTRINSIC SQRT

EXTERNAL F

!

CALL UMACH (2, NOUT)

P = 0.99

DFN = 1.0

DFD = 7.0

! Compute GUESS as two standard

! deviations above the mean.

GUESS = DFD/(DFD-2.0) + 2.0*SQRT(2.0*DFD*DFD*(DFN+DFD-2.0)/(DFN* &

(DFD-2.0)**2*(DFD-4.0)))

F0 = GFNIN(F,P,GUESS)

WRITE (NOUT,99999) F0

99999 FORMAT (' The F(1,7) 0.01 critical value is ', F6.3)

END

!

REAL FUNCTION F (X)

REAL X

!

REAL DFD, DFN, FDF

COMMON /FCOM/ DFN, DFD

EXTERNAL FDF

!

F = FDF(X,DFN,DFD)

RETURN

END

Output

 

The F(1,7) 0.01 critical value is 12.246