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
