* G02KAF Example Program Text * Mark 22 Release. NAG Copyright 2008. * .. Parameters .. INTEGER NIN, NOUT PARAMETER (NIN=5,NOUT=6) INTEGER NMAX, MMAX PARAMETER (NMAX=50,MMAX=12) * .. Local Scalars .. DOUBLE PRECISION H, NEP, RSS, TAU, TOL INTEGER DF, I, IFAIL, IP, J, LDX, M, N, NITER, OPT, + OPTLOO, ORIG * .. Local Arrays .. DOUBLE PRECISION B(MMAX+1), PERR(5), RES(NMAX), VIF(MMAX), + X(NMAX,MMAX), Y(NMAX) INTEGER ISX(MMAX) * .. External Subroutines .. EXTERNAL G02KAF, X04CAF * .. Executable Statements .. WRITE (NOUT,*) 'G02KAF Example Program Results' * * Skip heading in data file READ (NIN,*) * Read in data and check array limits READ (NIN,*) N, M, H, OPT, TOL, NITER, ORIG, OPTLOO IF (N.GT.NMAX .OR. M.GT.MMAX) THEN WRITE (NOUT,99995) GO TO 40 END IF READ (NIN,*) ((X(I,J),J=1,M),Y(I),I=1,N) READ (NIN,*) (ISX(J),J=1,M) LDX = NMAX * * Total number of variables. IP = 0 DO 20 J = 1, M IF (ISX(J).EQ.1) IP = IP + 1 20 CONTINUE * * Tolerance for setting singular values of H to zero. TAU = 0.0D0 DF = 0 * * Call function. IFAIL = 1 CALL G02KAF(N,M,X,LDX,ISX,IP,TAU,Y,H,OPT,NITER,TOL,NEP,ORIG,B,VIF, + RES,RSS,DF,OPTLOO,PERR,IFAIL) IF (IFAIL.NE.0) THEN WRITE (NOUT,99996) IFAIL IF (IFAIL.NE.-1) THEN GO TO 40 END IF END IF * Print results: WRITE (NOUT,*) WRITE (NOUT,99999) 'Value of ridge parameter:', H WRITE (NOUT,*) WRITE (NOUT,99998) 'Sum of squares of residuals:', RSS WRITE (NOUT,99997) 'Degrees of freedom: ', DF WRITE (NOUT,99999) 'Number of effective parameters:', NEP WRITE (NOUT,*) CALL X04CAF('G',' ',IP+1,1,B,MMAX,'Parameter estimates',IFAIL) WRITE (NOUT,*) WRITE (NOUT,*) 'Number of iterations:', NITER WRITE (NOUT,*) IF (OPT.EQ.1) THEN WRITE (NOUT,*) 'Ridge parameter minimises GCV' ELSE IF (OPT.EQ.2) THEN WRITE (NOUT,*) 'Ridge parameter minimises UEV' ELSE IF (OPT.EQ.3) THEN WRITE (NOUT,*) 'Ridge parameter minimises FPE' ELSE IF (OPT.EQ.4) THEN WRITE (NOUT,*) 'Ridge parameter minimises BIC' END IF WRITE (NOUT,*) WRITE (NOUT,*) 'Estimated prediction errors:' WRITE (NOUT,99999) 'GCV =', PERR(1) WRITE (NOUT,99999) 'UEV =', PERR(2) WRITE (NOUT,99999) 'FPE =', PERR(3) WRITE (NOUT,99999) 'BIC =', PERR(4) IF (OPTLOO.EQ.2) THEN WRITE (NOUT,99999) 'LOO CV =', PERR(5) END IF WRITE (NOUT,*) CALL X04CAF('G',' ',N,1,RES,N,'Residuals',IFAIL) WRITE (NOUT,*) CALL X04CAF('G',' ',IP,1,VIF,IP,'Variance inflation factors', + IFAIL) * 40 CONTINUE * 99999 FORMAT (A,1X,F10.4) 99998 FORMAT (A,1X,E10.4) 99997 FORMAT (A,1X,I5) 99996 FORMAT (1X,/1X,' ** G02KAF returned with IFAIL = ',I5) 99995 FORMAT (1X,' ** Problem size too large, increase array limits') END