C*********************************************************************** C THIS SUBROUTINE PROVIDES VALUES FOR THE LOG-LIKELIHOOD EQUATIONS C AND THE PARTIALS OF THE LOG-LIKELIHOOD EQUATIONS WITH RESPECT TO C THE PARAMETERS FOR A VARIETY OF MODELS. C C SUBROUTINES CALLED: NCNI C*********************************************************************** SUBROUTINE UMLE (ITIME) C*********************************************************************** C DECLARATIONS C*********************************************************************** INCLUDE 'PARMTR.INC' DOUBLE PRECISION SUM1, SUM2, R0, R1, R2, R4, R5, R6, PRA, PRB DOUBLE PRECISION PRAA, PRBB, PRAB, R0SQ, EXPW, DIF1, DIF2, DIF3 DOUBLE PRECISION PRF0A, PRF0B, SUM3 DOUBLE PRECISION E(600), Y(600), E0, VALUE, XX INTEGER CNT LOGICAL GRP, POOL, PEST, SEST, DESC, DEF, CUTP, TRUNC LOGICAL WARN, HELP C*********************************************************************** C COMMON STATEMENTS C*********************************************************************** DOUBLE PRECISION PAR, VCMAT, G, XLL COMMON /DPAR/ PAR(MAXPR2), VCMAT(MAXPAR,MAXPAR), G(MAXPAR), 1 XLL, NPAR, INDEX COMMON /OPTION/ GRP, POOL, PEST, SEST, DESC, DEF, CUTP, TRUNC, 1 HELP COMMON /TSINTG/ E, Y COMMON /INTEG/ R0, PRF0A, PRF0B COMMON /MEASUR/ X(MAXOBJ), AA(MAXOBJ,4) COMMON /NUM/ XL(MAXLIN), WIDTH, N, CNT, CONV(3), VARN, IDF, WARN COMMON /KEEP/ SUM, SSQ COMMON /ERROR/ IER(4), LER LOGICAL LER C*********************************************************************** C DATA STATEMENTS C*********************************************************************** DATA PI /3.1415926536/ C*********************************************************************** C INITIALIZE VARIABLES C*********************************************************************** XN=FLOAT(CNT) MNUM=600 C*********************************************************************** C EXPONENTIAL POWER SERIES ESTIMATOR C*********************************************************************** IF (INDEX.EQ.2) THEN C*********************************************************************** C CALCULATE SUMS USED IN LOG-LIKELIHOOD EQUATIONS AND PARTIALS. C*********************************************************************** SUM1=0.0 SUM2=0.0 SUM3=0.0 DO 10 I=1,CNT XX=(DBLE(X(I))/PAR(1))**PAR(2) SUM1=SUM1+XX XAX=0.0 IF (X(I).NE.0.0) XAX=ALOG(X(I)) SUM2=SUM2+XX*XAX SUM3=SUM3 + XX*XAX*XAX 10 CONTINUE SUM2=SUM2-DLOG(MAX(1.D-200,PAR(1)))*SUM1 C*********************************************************************** C BREAK THE DOMAIN (0,WIDTH) INTO MNUM INTERVALS AND STORE THE C FUNCTION (XX/PAR(1))**PAR(2) IN Y(J),J=1,MNUM AND IN E(J) A C FUNCTION OF THE Y(J). C*********************************************************************** DELTA=WIDTH/FLOAT(MNUM) DO 20 J=1,MNUM XX=FLOAT(J)*DELTA XX=(XX/PAR(1))**PAR(2) Y(J)=XX 20 E(J)=DEXP(MAX(-460.D0,MIN(300.D0,-XX))) E0=1.0 C*********************************************************************** C CALCULATE THE NORMALIZING CONSTANT WHICH IS THE INTEGRAL OF G(X) C FROM 0 TO WIDTH. THE INTEGRAL OF EXP(-Y(J)). C*********************************************************************** CALL NCNI (MNUM,E,E0,WIDTH,VALUE,IDIG) IF (IDIG.LT.6) IER(1)=-1 R0=VALUE C*********************************************************************** C CALCULATE THE LOG-LIKELIHOOD VALUE. C*********************************************************************** XLL=-SUM1-XN*DLOG(MAX(1.D-200,R0)) IF (ITIME.EQ.2) RETURN C*********************************************************************** C CALCULATE THE INTEGRAL FOR Y(J)*EXP(-Y(J)) C*********************************************************************** DO 30 J=1,MNUM 30 E(J)=Y(J)*E(J) E0=0.0 CALL NCNI (MNUM,E,E0,WIDTH,VALUE,IDIG) IF (IDIG.LT.6) IER(1)=-1 R1=VALUE C*********************************************************************** C CALCULATE THE INTEGRAL FOR Y(J)*Y(J)*EXP(-Y(J)). C*********************************************************************** DO 40 J=1,MNUM 40 E(J)=E(J)*Y(J) E0=0.0 CALL NCNI (MNUM,E,E0,WIDTH,VALUE,IDIG) IF (IDIG.LT.6) IER(1)=-1 R5=VALUE C*********************************************************************** C CALCULATE THE INTEGRAL FOR LOG(Y(J))*Y(J)*EXP(-Y(J))/PAR(2). C*********************************************************************** DO 50 J=1,MNUM 50 E(J)=E(J)*DLOG(MAX(1.D-200,Y(J)))/Y(J) E0=0.0 CALL NCNI (MNUM,E,E0,WIDTH,VALUE,IDIG) IF (IDIG.LT.6) IER(1)=-1 R2=VALUE/PAR(2) C*********************************************************************** C CALCULATE THE INTEGRAL FOR LOG(Y(J))*Y(J)*Y(J)*EXP(-Y(J))/PAR(2). C*********************************************************************** DO 60 J=1,MNUM 60 E(J)=E(J)*Y(J) E0=0.0 CALL NCNI (MNUM,E,E0,WIDTH,VALUE,IDIG) IF (IDIG.LT.6) IER(1)=-1 R6=VALUE/PAR(2) C*********************************************************************** C CALCULATE THE INTEGRAL FOR LOG(Y(J))*LOG(Y(J))*Y(J)*Y(J)*EXP(-Y(J)) C /(PAR(2)*PAR(2)). C*********************************************************************** DO 70 J=1,MNUM 70 E(J)=E(J)*DLOG(MAX(1.D-200,Y(J))) E0=0.0 CALL NCNI (MNUM,E,E0,WIDTH,VALUE,IDIG) IF (IDIG.LT.6) IER(1)=-1 R4=VALUE/(PAR(2)*PAR(2)) C*********************************************************************** C CALCULATE THE INTEGRAL FOR Y(J)*(LOG(Y(J))**2)*EXP(-Y(J))/ C (PAR(2)*PAR(2)). C*********************************************************************** DO 75 J=1,MNUM 75 E(J)=E(J)/Y(J) E0=0.0 CALL NCNI(MNUM,E,E0,WIDTH,VALUE,IDIG) IF(IDIG.LT.6) IER(1)=-1 R3=VALUE/(PAR(2)*PAR(2)) C*********************************************************************** C CALCULATE THE LOG-LIKELIHOOD EQUATIONS AND THE PARTIALS OF THE C LOG-LIKELIHOOD EQUATIONS AND THE PARTIALS OF THE PARAMETERS WITH C RESPECT TO F(0). C*********************************************************************** PRA=-PAR(2)*R1/PAR(1) PRB=R2 PRAA=PAR(2)*PAR(2)*R5/(PAR(1)*PAR(1)) PRBB=R4 PRAB=-PAR(2)*R6/PAR(1) R0SQ=R0*R0 VCMAT(1,1)=XN*(PRAA*R0-PRA*PRA)/R0SQ VCMAT(1,2)=XN*(PRAB*R0-PRA*PRB)/R0SQ VCMAT(2,2)=XN*(PRBB*R0-PRB*PRB)/R0SQ DIF1=PAR(2)*(PAR(2)+1.)*(SUM1-XN*(R1/R0))/(PAR(1)*PAR(1)) DIF2=SUM3-2.*DLOG(MAX(1.D-200,PAR(1)))*SUM2 1 -(DLOG(MAX(1.D-200,PAR(1)))**2)*SUM1-XN*(R3/R0) DIF3=(-SUM1-PAR(2)*SUM2+XN*(R1/R0)+XN*PAR(2)*(R2/R0))/PAR(1) VCMAT(1,1)=VCMAT(1,1) + DIF1 VCMAT(2,2)=VCMAT(2,2) + DIF2 VCMAT(1,2)=VCMAT(1,2) + DIF3 VCMAT(2,1)=VCMAT(1,2) G(1)=PAR(2)*SUM1/PAR(1)-XN*PAR(2)*R1/(PAR(1)*R0) G(2)=-SUM2+XN*R2/R0 PRF0A=PRA PRF0B=PRB C*********************************************************************** C EXPONENTIAL POLYNOMIAL ESTIMATOR C*********************************************************************** ELSE IF (INDEX.EQ.3) THEN IF (TRUNC) THEN C*********************************************************************** C CALCULATE THE MORMALIZING CONSTANT FOR THE TRUNCATED SITUATION. C*********************************************************************** DELTA=WIDTH/FLOAT(MNUM) DO 100 J=1,MNUM XX=FLOAT(J)*DELTA 100 E(J)=DEXP(MAX(-460.D0,MIN(300.D0,-PAR(1)*XX-PAR(2)*XX*XX))) E0=1.0 CALL NCNI (MNUM,E,E0,WIDTH,VALUE,IDIG) IF (IDIG.LT.6) IER(1)=-1 R0=VALUE ELSE C*********************************************************************** C CALCULATE THE NORMALIZING CONSTANT FOR THE UNTRUNCATED SITUATION. C*********************************************************************** RWID=PAR(1)/(2.*PAR(2)) DELTA=RWID/FLOAT(MNUM) E0=1.0 DO 120 J=1,MNUM XX=-PAR(1)/(2.*PAR(2))+FLOAT(J)*DELTA 120 E(J)=DEXP(MAX(-460.D0,MIN(300.D0, 1 -PAR(2)*(XX+PAR(1)/(2.*PAR(2)))**2))) CALL NCNI (MNUM,E,E0,RWID,VALUE,IDIG) IF (IDIG.LT.6) IER(1)=-1 R0=DEXP(MAX(-460.D0,MIN(300.D0, 1 PAR(1)*PAR(1)/(4.*PAR(2)))))*SQRT(PI)/DSQRT(PAR(2)) R0=R0*(.5-VALUE*DSQRT(PAR(2))/SQRT(PI)) ENDIF C*********************************************************************** C CALCULATE THE LOG-LIKELIHOOD VALUE. C*********************************************************************** XLL=-PAR(1)*SUM-PAR(2)*SSQ-XN*DLOG(MAX(1.D-200,R0)) IF (ITIME.EQ.2) RETURN C*********************************************************************** C CALCULATE THE NECESSARY INTEGRALS WHICH HAVE BEEN DERIVED ANALYT- C ICALLY AFTER CALCULATING THE NORMALIZING CONSTANT NUMERICALLY. C*********************************************************************** EXPW=DEXP(MAX(-460.D0,MIN(300.D0, 1 -PAR(1)*WIDTH-PAR(2)*WIDTH*WIDTH))) IF (.NOT.TRUNC) EXPW=0.0 R1=(1.-EXPW-PAR(1)*R0)/(2.*PAR(2)) R2=(-WIDTH*EXPW+R0-PAR(1)*R1)/(2.*PAR(2)) R3=(-WIDTH*WIDTH*EXPW+2.*R1-PAR(1)*R2)/(2.*PAR(2)) R4=(-(WIDTH**3)*EXPW+3.*R2-PAR(1)*R3)/(2.*PAR(2)) R0SQ=R0*R0 C*********************************************************************** C CALCULATE THE LOG-LIKELIHOOD EQUATIONS AND THEIR PARTIALS. C*********************************************************************** G(1)=-SUM+XN*R1/R0 G(2)=-SSQ+XN*R2/R0 VCMAT(1,1)=XN*(R2*R0-R1*R1)/R0SQ VCMAT(1,2)=XN*(R3*R0-R1*R2)/R0SQ VCMAT(2,1)=VCMAT(1,2) VCMAT(2,2)=XN*(R4*R0-R2*R2)/R0SQ PRF0A=-R1 PRF0B=-R2 C*********************************************************************** C NEGATIVE EXPONENTIAL ESTIMATOR C*********************************************************************** ELSE IF (INDEX.EQ.4) THEN C*********************************************************************** C CALCULATE THE NORMALIZING CONSTANT R0 AND THE LOG-LIKELIHOOD VALUE C*********************************************************************** EXPW=DEXP(MAX(-460.D0,MIN(300.D0,-PAR(1)*WIDTH))) R0=(1.-EXPW)/PAR(1) XLL=-XN*DLOG(MAX(1.D-200,R0))-PAR(1)*SUM IF (ITIME.EQ.2) RETURN C*********************************************************************** C CALCULATE THE LOG-LIKELIHOOD EQUATIONS AND THEIR PARTIALS. C*********************************************************************** G(1)=XN/PAR(1)-XN*WIDTH*EXPW/(1.-EXPW)-SUM VCMAT(1,1)=XN*(1./(PAR(1)*PAR(1))-WIDTH*WIDTH*EXPW/((1.-EXPW)**2)) PRF0A=-(1.-EXPW-PAR(1)*WIDTH*EXPW)/(PAR(1)*PAR(1)) C*********************************************************************** C HALF-NORMAL ESTIMATOR C*********************************************************************** ELSE IF (INDEX.EQ.5) THEN C*********************************************************************** C CALCULATE THE NOMALIZING CONSTANT C*********************************************************************** EXPW=DEXP(MAX(-460.D0,MIN(300.D0,-PAR(1)*WIDTH*WIDTH))) DELTA=WIDTH/FLOAT(MNUM) DO 170 J=1,MNUM XX=FLOAT(J)*DELTA 170 E(J)=DEXP(MAX(-460.D0,MIN(300.D0,-PAR(1)*XX*XX))) E0=1.0 CALL NCNI (MNUM,E,E0,WIDTH,VALUE,IDIG) IF (IDIG.LT.6) IER(1)=-1 R0=VALUE C*********************************************************************** C CALCULATE THE LOG-LIKELIHOOD VALUE C*********************************************************************** XLL=-PAR(1)*SSQ-XN*DLOG(MAX(1.D-200,R0)) IF (ITIME.EQ.2) RETURN C*********************************************************************** C CALCULATE THE LOG-LIKELIHOOD EQUATIONS AND THEIR PARTIALS. C*********************************************************************** R1=(R0-WIDTH*EXPW)/(2.*PAR(1)) G(1)=XN*R1/R0-SSQ R2=(3.*R1-(WIDTH**3)*EXPW)/(2.*PAR(1)) VCMAT(1,1)=XN*(R2*R0-R1*R1)/(R0*R0) PRF0A=R1 ENDIF RETURN END