就还是那本书里的程序,第四章第一个,intr_s3,我试着用别的参数。程序如下:/*@WRITTEN BY CHANG-JIN KIM, KOREA UNIVERSITY, DEPT. OF
ECONcjkim@korea.ac.kr @*/new;library optmum,PGRAPH;optset;#lineson;format /m1 /rd 12,6;load data[176,3]=int_cpuq.prn; @qtr, T-bill (ann), CPU @ @1947.1 -- 1990.4, quarterly data, end-month of the quarter @qtr=data[2:176,1];ex_r=data[2:176,2];inf=ln(data[2:176,3]./data[1:175,3])*100*4;yy0=ex_r[52-2:175,1]-inf[52-2:175,1]; @60.I -- 90.IV@ @159@t0=rows(yy0);yy_d=yy0[2:t0]-yy0[1:t0-1];LAG_AR=2;NO_ST=lag_ar+1; @ NUMBER OF STATES TO BE CONSIDERED@DMNSION=3^NO_ST;st_mat=zeros(DMNSION,NO_ST); j=1; st2=1; do until st2>3; st1=1; do until st1>3; st=1; do until st>3; st_mat[j,.]=st2~st1~st; j=j+1; st=st+1;endo; st1=st1+1;endo; st2=st2+1;endo; s1t_mat=zeros(DMNSION,NO_ST); s2t_mat=zeros(DMNSION,NO_ST); s3t_mat=zeros(DMNSION,NO_ST); j=1; do until j>dmnsion; i=1; do until i>no_st; if st_mat[j,i]==1; s1t_mat[j,i]=1;endif; i=i+1;endo; j=j+1;endo; j=1; do until j>dmnsion; i=1; do until i>no_st; if st_mat[j,i]==2; s2t_mat[j,i]=1;endif; i=i+1;endo; j=j+1;endo; j=1; do until j>dmnsion; i=1; do until i>no_st; if st_mat[j,i]==3; s3t_mat[j,i]=1;endif; i=i+1;endo; j=j+1;endo;yy=yy0[lag_ar+1:t0,1];x_mat= yy0[Lag_ar:T0-1,1]~yy0[lag_ar-1:T0-2,1];T=rows(yy);@================= Initialize Global Variables======1959.1-89.9======@ START=1; @1952:4.....@PRMTR_IN={ 3.259933 -12.222394 9.695514 14.331286 -22.433174 -4.539383 0.018705 0.001239 2.151802 1.182220 2.458978 -1.576000 1.376510 3.992844}; @converged parameters@PRMTR_IN=PRMTR_IN';@ Maximum Likelihood Estimation @@==================================================@{xout,fout,gout,cout}=optmum(&lik_fcn,PRMTR_in);PRM_FNL=TRANS(xout); @ Estimated coefficients, constrained@output file=INTR_S3.out reset;"==FINAL OUTPUT========================================================";"initial values of prmtr is"; trans(prmtr_in)';"==============================================================";"code is--------";;cout;"likelihood value is ";; -1*fout;"Estimated parameters are:";prm_fnl'; " ";xout';output off;"Calculating Hessian..... Please be patient!!!!"; hout0=hessp(&lik_fcn,xout); hout=inv(hout0);grdn_fnl=gradfd(&TRANS,xout);Hsn_fnl=grdn_fnl*hout*grdn_fnl';SD_fnl =sqrt(diag(Hsn_fnl)); @Standard errors of the estimated coefficients@output on;"Standard errors of parameters are:"; sd_fnl';"===============================================================";output off;{FILTER_P}=FILTER(XOUT);FILTER_P=FILTER_P~YY;format /m1 /rd 8,4;output file=INTr_s3.dta reset; Filter_p; output off;begwind;window(2,2,0);xlabel("month");xindex=seqa(1,1,rows(filter_p));setwind(1); xy(xindex, filter_p[.,1]);nextwind; xy(xindex,filter_p[.,2]);nextwind; xy(xindex,filter_p[.,3]);nextwind; xy(xindex,filter_p[.,4]~yy);endwind;end;@ END OF MAIN PROGRAM @@========================================================================@@========================================================================@PROC LIK_FCN(PRMTR1);local prmtr, ppr,qpr,prob__0,prob__1,QQ, lik, j_iter, pr__0_l,pr__1_l, F_cast, var_L,pr_val,likv,phi,PSIX, vecp,st,st1,st2,st3,st4,ST5,ST6,ST7,ST8,ST9,ST10,ST11,ST12,ST13, pr_tr,pr_trf1,pr_trf,prob__t,prob__,pro_,pr_vl,j,psi1,psi2,var_c, delta0,DELTA1,MU0,MU1,st_k,st_k1,st_k2,st_k3,st_k4, f_cast1,f_cast2,PR_VL1,PR_VL2,pr_trf7,pr_trf0, PR_TRF2,PR_TRF3,PR_TRF4,PR_TRF5,PR_TRF6,psic,psiL, TMPRY1,TMPRY2,SM_PRL,TMP_P0,SM_PR0,JJJ,MU_MAT,D_MAT,FLT_PRN, F1,F2,TMP00,TMP0,SM_PR00,prob_dd,VAR,A,EN,MU2,MU3;PRMTR=TRANS(PRMTR1);LOCATE 15,1; PRMTR'; PR_TR=(PRMTR[1:2]|1-SUMC(PRMTR[1:2]))~ (PRMTR[3:4]|1-SUMC(PRMTR[3:4]))~ (PRMTR[5:6]|1-SUMC(PRMTR[5:6])); PHI=PRMTR[7:8,1]; VAR=PRMTR[9:11,1]; MU1=PRMTR[12,1]; @ recession, vs. boom@ MU2=PRMTR[13,1]; @ recession, vs. boom@ MU3=PRMTR[14,1]; VAR_L=VAR[1,1]*S1T_MAT[.,COLS(S1T_MAT)] + VAR[2,1]*S2T_MAT[.,COLS(S2T_MAT)] + VAR[3,1]*S3T_MAT[.,COLS(S3T_MAT)]; MU_MAT= MU1*S1T_MAT+ (MU2)*S2T_MAT+ (MU3)*S3T_MAT; /* FOR UNCONDITIONAL PROBABILITIES */ A = (eye(3)-pr_tr)|ones(1,3); EN=(0|0|0|1); PROB__T = INV(A'A)*A'EN; @PR[S_t=0]|PR[S_t=1], 3x1 UNCONDITIONAL PROBABILITIES@ PR_TRF0=VEC(PR_TR); PR_TRF =PR_TRF0|PR_TRF0|PR_TRF0; PROB__T=VECR(PROB__T~PROB__T~PROB__T).*PR_TRF0; @3^2 x 1@ PROB__=VECR(PROB__T~PROB__T~PROB__T); @3^5 x 1@ LIKV=0.0; J_ITER=1; DO UNTIL J_ITER>T; F_CAST1=(YY[J_ITER,1]-X_MAT[J_ITER,.]*PHI)*ONES(DMNSION,1) -(MU_MAT[.,3] - MU_MAT[.,2]*PHI[1,1] - MU_MAT[.,1]*PHI[2,1]); PROB_DD=PR_TRF .* PROB__; PR_VL=(1./SQRT(2.*PI.*VAR_L)).*EXP(-0.5*F_CAST1.*F_CAST1./VAR_L).*PROB_DD; @PR[S_t,S_{T-1},S_{T-2},Y_t|Y_{t-1}]@ PR_VAL=SUMC(PR_VL); LIK=-1*LN(PR_VAL); PRO_=PR_VL/PR_VAL; @Pr[S_t, S_{t-1},S_{t-2},S_{t-3},S_{t-4} | Y_t]@ PROB__T=PRO_[1:DMNSION/3,1]+PRO_[DMNSION/3+1:DMNSION*2/3,1]+ PRO_[DMNSION*2/3+1:DMNSION,1]; @Pr[S_t, S_{t-1},S_{t-2},S_{t-3}| Y_t]@ PROB__=VECR(PROB__T~PROB__T~PROB__T);LIKV = LIKV+LIK;J_ITER = J_ITER+1;ENDO; LOCATE 2,35;"LIKV=";;LIKV;RETP(LIKV);ENDP;@++++++++++++++++++++++++++++++++++++++++++++++++++++++++@PROC filter(PRMTR1);local prmtr, ppr,qpr,prob__0,prob__1,QQ, lik, j_iter, pr__0_l,pr__1_l, F_cast, var_L, pr_val,likv,phi,PSIX, vecp,st,st1,st2,st3,st4,ST5,ST6,ST7,ST8,ST9,ST10,ST11,ST12,ST13, pr_tr,pr_trf1,pr_trf,prob__t,prob__,pro_,pr_vl,j,psi1,psi2,var_c, delta0,DELTA1,MU0,MU1,st_k,st_k1,st_k2,st_k3,st_k4, f_cast1,f_cast2,PR_VL1,PR_VL2,pr_trf7,pr_trf0,out_mat,tmp, PR_TRF2,PR_TRF3,PR_TRF4,PR_TRF5,PR_TRF6,psic,psiL, TMPRY1,TMPRY2,SM_PRL,TMP_P0,SM_PR0,JJJ,MU_MAT,D_MAT,FLT_PRN, F1,F2,TMP00,TMP0,SM_PR00,prob_dd,VAR,A,EN,MU2,MU3;PRMTR=TRANS(PRMTR1);LOCATE 15,1; PRMTR'; PR_TR=(PRMTR[1:2]|1-SUMC(PRMTR[1:2]))~ (PRMTR[3:4]|1-SUMC(PRMTR[3:4]))~ (PRMTR[5:6]|1-SUMC(PRMTR[5:6])); PHI=PRMTR[7:8,1]; VAR=PRMTR[9:11,1]; MU1=PRMTR[12,1]; @ recession, vs. boom@ MU2=PRMTR[13,1]; @ recession, vs. boom@ MU3=PRMTR[14,1]; VAR_L=VAR[1,1]*S1T_MAT[.,COLS(S1T_MAT)] + VAR[2,1]*S2T_MAT[.,COLS(S2T_MAT)] + VAR[3,1]*S3T_MAT[.,COLS(S3T_MAT)]; MU_MAT= MU1*S1T_MAT+ (MU2)*S2T_MAT+ (MU3)*S3T_MAT; /* FOR UNCONDITIONAL PROBABILITIES */ A = (eye(3)-pr_tr)|ones(1,3); EN=(0|0|0|1); PROB__T = INV(A'A)*A'EN; @PR[S_t=0]|PR[S_t=1], 3x1 UNCONDITIONAL PROBABILITIES@ PR_TRF0=VEC(PR_TR); PR_TRF =PR_TRF0|PR_TRF0|PR_TRF0; PROB__T=VECR(PROB__T~PROB__T~PROB__T).*PR_TRF0; @3^2 x 1@ PROB__=VECR(PROB__T~PROB__T~PROB__T); @3^5 x 1@ out_mat=zeros(t,4); LIKV=0.0; J_ITER=1; DO UNTIL J_ITER>T; F_CAST1=(YY[J_ITER,1]-X_MAT[J_ITER,.]*PHI)*ONES(DMNSION,1) -(MU_MAT[.,3] - MU_MAT[.,2]*PHI[1,1] - MU_MAT[.,1]*PHI[2,1]); PROB_DD=PR_TRF .* PROB__; @Pr[S_t,....S_{t-4}|Y_{t-1}]@ tmp=prob_dd[1:9]+prob_dd[10:18]+prob_dd[19:27]; tmp=tmp[1:3]+tmp[4:6]+tmp[7:9]; out_mat[j_iter,.]=tmp'~(YY[J_ITER,1]-SUMC(PROB_DD.*F_CAST1)); @Pr[S_t=1|Y_t],Pr[S_t=2|Y_t],Pr[S_t=2|Y_t]@ PR_VL=(1./SQRT(2.*PI.*VAR_L)).*EXP(-0.5*F_CAST1.*F_CAST1./VAR_L).*PROB_DD; @PR[S_t,S_{T-1},S_{T-2},S_{T-3},S_{T-4},Y_t|Y_{t-1}]@ PR_VAL=SUMC(PR_VL); LIK=-1*LN(PR_VAL); PRO_=PR_VL/PR_VAL; @Pr[S_t, S_{t-1},S_{t-2},S_{t-3},S_{t-4} | Y_t]@ PROB__T=PRO_[1:DMNSION/3,1]+PRO_[DMNSION/3+1:DMNSION*2/3,1]+ PRO_[DMNSION*2/3+1:DMNSION,1]; @Pr[S_t, S_{t-1},S_{t-2},S_{t-3}| Y_t]@ PROB__=VECR(PROB__T~PROB__T~PROB__T);LIKV = LIKV+LIK;J_ITER = J_ITER+1;ENDO; LOCATE 2,35;"LIKV=";;LIKV;RETP(OUT_MAT);ENDP;@++++++++++++++++++++++++++++++++++++++++++++++++++++++++@PROC TRANS(coef0); @ constraining values of reg. coeff.@ local coef1,m,u,XX9,XX10; coef1=coef0; coef1[1,1]=exp(coef0[1,1])/(1+exp(coef0[1,1])+exp(coef0[2,1])); coef1[2,1]=exp(coef0[2,1])/(1+exp(coef0[1,1])+exp(coef0[2,1])); coef1[3,1]=exp(coef0[3,1])/(1+exp(coef0[3,1])+exp(coef0[4,1])); coef1[4,1]=exp(coef0[4,1])/(1+exp(coef0[3,1])+exp(coef0[4,1])); coef1[5,1]=exp(coef0[5,1])/(1+exp(coef0[5,1])+exp(coef0[6,1])); coef1[6,1]=exp(coef0[6,1])/(1+exp(coef0[5,1])+exp(coef0[6,1])); coef1[9:11,1]=coef0[9:11,1]^2;/* coef1[13,1]=abs(coef0[13,1]); coef1[14,1]=abs(coef0[14,1]);*/ retp(coef1);endp;@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@
35# xuehe