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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
DOUBLE PRECISION FUNCTION dt1(p,q,df)
C**********************************************************************
C
C DOUBLE PRECISION FUNCTION DT1(P,Q,DF)
C Double precision Initalize Approximation to
C INVerse of the cumulative T distribution
C
C
C Function
C
C
C Returns the inverse of the T distribution function, i.e.,
C the integral from 0 to INVT of the T density is P. This is an
C initial approximation
C
C
C Arguments
C
C
C P --> The p-value whose inverse from the T distribution is
C desired.
C P is DOUBLE PRECISION
C
C Q --> 1-P.
C Q is DOUBLE PRECISION
C
C DF --> Degrees of freedom of the T distribution.
C DF is DOUBLE PRECISION
C
C**********************************************************************
C
C .. Scalar Arguments ..
DOUBLE PRECISION df,p,q
C ..
C .. Local Scalars ..
DOUBLE PRECISION denpow,sum,term,x,xp,xx
INTEGER i
C ..
C .. Local Arrays ..
DOUBLE PRECISION coef(5,4),denom(4)
INTEGER ideg(4)
C ..
C .. External Functions ..
DOUBLE PRECISION dinvnr,devlpl
EXTERNAL dinvnr,devlpl
C ..
C .. Intrinsic Functions ..
INTRINSIC abs
C ..
C .. Data statements ..
DATA (coef(i,1),i=1,5)/1.0D0,1.0D0,3*0.0D0/
DATA (coef(i,2),i=1,5)/3.0D0,16.0D0,5.0D0,2*0.0D0/
DATA (coef(i,3),i=1,5)/-15.0D0,17.0D0,19.0D0,3.0D0,0.0D0/
DATA (coef(i,4),i=1,5)/-945.0D0,-1920.0D0,1482.0D0,776.0D0,79.0D0/
DATA ideg/2,3,4,5/
DATA denom/4.0D0,96.0D0,384.0D0,92160.0D0/
C ..
C .. Executable Statements ..
x = abs(dinvnr(p,q))
xx = x*x
sum = x
denpow = 1.0D0
DO 10,i = 1,4
term = devlpl(coef(1,i),ideg(i),xx)*x
denpow = denpow*df
sum = sum + term/ (denpow*denom(i))
10 CONTINUE
IF (.NOT. (p.GE.0.5D0)) GO TO 20
xp = sum
GO TO 30
20 xp = -sum
30 dt1 = xp
RETURN
END
|