C*********************************************************************** C THIS SUBROUTINE PROVIDES INITIAL PARAMETER ESTIMATES(STARTING C VALUES) FOR A VARIETY OF ESTIMATORS AS A FIRST STEP TO MAXIMUM C LIKELIHOOD ESTIMATION. IF THE USER HAS SPECIFIED STARTING VALUES C THEN THIS IS HANDLED HERE ALSO. C*********************************************************************** SUBROUTINE START (IND) C*********************************************************************** C DECLARATIONS C*********************************************************************** INCLUDE 'PARMTR.INC' LOGICAL GRP, POOL, PEST, SEST, DESC, DEF, CUTP, TRUNC LOGICAL MSET, SET, STRT, MSTRT, WARN, HELP REAL STAT(50) INTEGER CNT DOUBLE PRECISION DX 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 /LPASS/ MSET, MSTRT COMMON /OPTION/ GRP, POOL, PEST, SEST, DESC, DEF, CUTP, TRUNC, 1 HELP COMMON /KEEP/ SUM, SSQ COMMON /PDOPT/ STRT, SET, PSTRT(10,MAXPAR), NPSET(10) COMMON /INTER/ K, CUT(MAXCEL), F(MAXCEL), NCUT, NKC(5), 1 NK(5), RFREQ(5,MAXCEL), CCUT(5,MAXCEL) COMMON /MEASUR/ X(MAXOBJ), AA(MAXOBJ,4) COMMON /NUM/ XL(MAXLIN), WIDTH, N, CNT, CONV(3), VARN, IDF, WARN C*********************************************************************** C DATA STATEMENTS C*********************************************************************** DATA STAT /2.8071294557,2.2686342563,2.,1.8412711357,1.7374509036, 1 1.6647924865,1.6114297430,1.5707963268,1.5389741069,1.5134855493, 2 1.4926903158,1.4754610234,1.4609984862,1.4487212210,1.4381966339, 3 1.4290966593,1.4211683020,1.4142135624,1.4080754423,1.4026279924, 4 1.3977691050,1.3934152117,1.3894973251,1.3859580441,1.3827492624, 5 1.3798303947,1.3771669897,1.3747296370,1.3724930962,1.3704355985, 6 1.3685382831,1.3667847378,1.3651606235,1.3636533643,1.3622518914, 7 1.3609464290,1.3597283159,1.3585898549,1.3575241861,1.3565251784, 8 1.3555873386,1.3547057321,1.3538759159,1.3530938806,1.3523560003, 9 1.3516589886,1.3509998617,1.3503759048,1.3497846435,1.3492238187/ DATA PI /3.1415926536/ C*********************************************************************** C INITIALIZE VARIABLES C*********************************************************************** NP=MAXPAR IF (MSET) NPAR=NPSET(IND) IF (NPAR.GT.NP) THEN NPAR=NP WRITE (6,240) NP ENDIF C*********************************************************************** C THE USER HAS SPECIFIED STARTING VALUES SO USE THEM. C*********************************************************************** IF (MSTRT) THEN DO 20 I=1,NPAR 20 PAR(I)=PSTRT(IND,I) IF (INDEX.EQ.2) THEN IF (PAR(1).EQ.0.) PAR(1)=1.E-6 ENDIF ELSE C*********************************************************************** C CRUDELY TRANSFORM GROUPED DATA INTO UNGROUPED DATA FOR THE PURPOSE C OF GETTING STARTING VALUES. C*********************************************************************** IF (GRP) THEN J=1 HOLD=0.0 DO 70 I=1,K NN=IFIX(F(I)) IF (F(I).EQ.0.0) GO TO 70 DIV=(CUT(I)-HOLD)/F(I) DO 60 L=1,NN X(J)=HOLD+FLOAT(L)*DIV J=J+1 60 CONTINUE HOLD=CUT(I) 70 CONTINUE ENDIF C*********************************************************************** C FOURIER SERIES C*********************************************************************** IF (INDEX.EQ.1) THEN DO 100 I=1,NPAR DO 90 J=1,CNT DX=DBLE(PI)*DBLE(FLOAT(I)) DX=DX*DBLE(X(J))/DBLE(WIDTH) 90 PAR(I)=PAR(I)+DCOS(DX) 100 PAR(I)=2.*PAR(I)/(DBLE(FLOAT(CNT))*DBLE(WIDTH)) C*********************************************************************** C EXPONENTIAL POWER SERIES C*********************************************************************** ELSE IF (INDEX.EQ.2) THEN NPAR=2 SUM=0.0 SSQ=0.0 DO 120 J=1,CNT SUM=SUM+X(J) 120 SSQ=SSQ+X(J)*X(J) SEARCH=(FLOAT(CNT)*SSQ)/(SUM*SUM) IPOS=1 PAR(2)=10.4 DO 130 J=1,50 IF (SEARCH.GT.STAT(J)) GO TO 140 130 IPOS=J 140 IF (IPOS.NE.50) THEN PAR(2)=.4+(FLOAT(IPOS)+(STAT(IPOS)-SEARCH)/ 1 (STAT(IPOS)-STAT(IPOS+1)))*.2 PAR(2)=MAX(0.75001,PAR(2)) ENDIF 150 SUMP=0.0 DO 160 J=1,CNT 160 SUMP=SUMP+X(J)**PAR(2) PAR(1)=(PAR(2)*SUMP/FLOAT(CNT))**(1./PAR(2)) PAR(1)=MAX(PAR(1),1.D0) C*********************************************************************** C EXPONENTIAL POLYNOMIAL C*********************************************************************** ELSE IF (INDEX.EQ.3) THEN NPAR=2 SUM=0.0 SSQ=0.0 DO 180 I=1,CNT SUM=SUM+X(I) 180 SSQ=SSQ+X(I)*X(I) PAR(1)=FLOAT(CNT)/SUM PAR(2)=FLOAT(CNT)/(SSQ*2.) C*********************************************************************** C NEGATIVE EXPONENTIAL C*********************************************************************** ELSE IF (INDEX.EQ.4) THEN NPAR=1 SUM=0.0 DO 200 I=1,CNT 200 SUM=SUM+X(I) PAR(1)=FLOAT(CNT)/SUM C*********************************************************************** C HALF-NORMAL C*********************************************************************** ELSE IF (INDEX.EQ.5) THEN NPAR=1 SSQ=0.0 DO 220 I=1,CNT 220 SSQ=SSQ+X(I)*X(I) PAR(1)=FLOAT(CNT)/(2.*SSQ) ENDIF ENDIF RETURN C*********************************************************************** C FORMAT STATEMENTS C*********************************************************************** C 240 FORMAT (///' *** WARNING - There is a maximum of ',I2, 1 ' parameters allowed.'/ 2' Others will be ignored.') END