SUBROUTINE NMXD0(NFILE,TITLE,NMIX,IDCODE,MXCODE, 1 AH0,LDMIX,AB0,AHB0,ALPHA,ANU0,S0NU0,H,R,P,PRI0) C This routine reads in parameters for priors for a discrete mixture of C normals distribution. C Inputs: C NFILE File number for read C TITLE Informative banner for log file C NMIX Number of components of mixture C IDCODE Orderings indicator; see NMXD C MXCODE Free parameter indicator; see NMXD C LDMIX Leading dimension of AH0 C Outputs: C AH0 Prior precision matrix for coefficient Gaussian prior C AB0 Prior mean vector for coefficient Gaussian prior C AHB0 Product of prior precision matrix and mean vector C ALPHA Initial draw of mean vector C ANU0 Degrees of freedom parameters for precision priors C S0NU0 Constant parameters for precision priors C H Initial draw of precision parameters C R Prior parameters for probability beta distribution C P Initial draw of probability parameters C PRI0 Log normalization constant for prior IMPLICIT REAL*8 (A-H,O-Z) CHARACTER*(*) TITLE DIMENSION AH0(LDMIX,NMIX),AB0(NMIX),AHB0(NMIX),ALPHA(NMIX), 1 ANU0(NMIX),S0NU0(NMIX),H(NMIX),R(NMIX),P(NMIX) PARAMETER(LD=10) COMMON/NMXDBL/D(LD,LD),DINV(LD,LD),A(LD),B(LD),LA(LD),LB(LD), 1 LE(LD) LOGICAL LA,LB,LE READ(1,*)NMIX,IDCODE,MXCODE CALL PINTI('Number of mixtures',NMIX,2,LDMIX) CALL PINTI('Identification code',IDCODE,0,3) CALL PINTI('Mixture code',MXCODE,0,2) WRITE(6,10)TITLE 10 FORMAT(//,' Discrete normal mixture model for ',A) CALL PLINE1(1,' Disturbance distribution is a mixture of',NMIX, 1 'normals') IF(IDCODE.EQ.0) 1 CALL PLINE(0,' No inequality restrictions on coefficients') IF(IDCODE.EQ.1) 1 CALL PLINE(0,' Mean vector in nondecreasing order') IF(IDCODE.EQ.2) 1 CALL PLINE(0,' Precision vector in nondecreasing order') IF(IDCODE.EQ.3) 1 CALL PLINE(0,' Probability vector in nondecreasing order') IF(MXCODE.EQ.0)CALL PLINE(0,' Full mixture of normals') IF(MXCODE.EQ.1)CALL PLINE(0,' Scale mixture of normals') IF(MXCODE.EQ.2)CALL PLINE(0,' Mean mixture of normals') C Obtain priors for normal mixture model PRI0A=0.0D0 IF(MXCODE.EQ.1)GO TO 40 CALL GAU0(NFILE, 1 NMIX,'mixture coefficients',AH0,LDMIX,AB0,AHB0,PRI0A,ALPHA) IF(IDCODE.NE.1)GO TO 40 CALL UMISET(NMIX,D,LD) DO 20 I=1,NMIX IF(I.LT.NMIX)D(I,I+1)=-1.0D0 A(I)=-1.0D0 B(I)=0.0D0 LA(I)=.TRUE. 20 LB(I)=.FALSE. LB(NMIX)=.TRUE. CALL DLINRG(NMIX,D,LD,DINV,LD) SD=0.01D0 TIME=60.0D0 PRI0A=PRI0A-GHK(NMIX,AB0,AH0,LDMIX,D,DINV,LD,A,B,LA,LB,LE,SD,TIME) CALL GAUT(NMIX,AB0,AH0,LDMIX,D,DINV,LD,A,B,LA,LB,LE,100,ALPHA) WRITE(6,30)SD,TIME,(ALPHA(I),I=1,NMIX) 30 FORMAT(/,' ...Means and standard deviations etc. do not reflect', 1 ' ordering constraint.',/,' Standard deviation of', 2 ' approximation of log prior kernel:',1PE15.5,/, 3 ' Computation time:',0PF8.2,/, 4 ' Initial draw from ordered distribution:',/, 5 (5(1PE16.7))) 40 PRI0H=0.0D0 IF(MXCODE.EQ.2)GO TO 60 CALL CHI0(NFILE,NMIX,'mixture precisions',IDCODE.EQ.2, 1 ANU0,S0NU0,PRI0H,H) IF(IDCODE.NE.2)GO TO 70 CALL CHIO(NMIX,S0NU0,ANU0,20,H) WRITE(6,50)(H(I),I=1,NMIX) 50 FORMAT(' Initial draw from ordered distribution:',/,(5(1PE16.7))) GO TO 70 60 CALL CHI0(NFILE,1,'common disturbance precision',.FALSE., 1 ANU0,S0NU0,PRI0H,H) CALL DSET(NMIX-1,ANU0(1),ANU0(2),1) CALL DSET(NMIX-1,S0NU0(1),S0NU0(2),1) CALL DSET(NMIX-1,H(1),H(2),1) 70 PRI0B=0.0D0 CALL BET0(NFILE,1,'mixture probabilities',NMIX,R,1,PRI0B,P,1) PRI0=PRI0A+PRI0H+PRI0B RETURN END