/* DIEBOLD-MARIANO TESTS */

/* Adjusted test for nested models

cf. Clark and West, Journal of Econometrics 138, 2007, 291 - 311 */

/*vls1 = reshape(error(0),9,1);
forcsam = 1~5~seqa(10,10,2)';
dat_ob1 = xlsReadM("observedr.xls", "a1:t2355", 1, vls1[1]); obser1 = dat_ob1[.,forcsam];
vobser1 = obser1;

// NSW
dat1 = xlsReadM("Eforecasts_garch_rev.xls", "a1:t2355", 1, vls1[1]); fc1 = dat1[.,forcsam];
dat2 = xlsReadM("Eforecasts_gjr_rev.xls", "a1:t2355", 1, vls1[1]); fc2 = dat2[.,forcsam];
dat3 = xlsReadM("Eforecasts_egarch_rev.xls", "a1:t2355", 1, vls1[1]); fc3 = dat3[.,forcsam];
dat4 = xlsReadM("Eforecasts_aparch_rev.xls", "a1:t2355", 1, vls1[1]); fc4 = dat4[.,forcsam];
dat5 = xlsReadM("Eforecasts_msgarch_rev.xls", "a1:t2355", 1, vls1[1]); fc5 = dat5[.,forcsam];
dat6 = xlsReadM("Eforecasts_figarch_rev.xls", "a1:t2355", 1, vls1[1]); fc6 = dat6[.,forcsam];
dat7 = xlsReadM("elec_BMSM_revision.xls", "a1:d2355", 1, vls1[1]); fc7 = dat7;
dat8 = xlsReadM("Eforecasts_msfigarch_rev.xls", "a1:t2355", 1, vls1[1]); fc8 = dat8[.,forcsam];
dat9 = xlsReadM("Eforecasts_msfiaparch_rev.xls", "a1:t2355", 1, vls1[1]); fc9 = dat9[.,forcsam];
dat10 = xlsReadM("Eforecasts_fiaparch_rev.xls", "a1:t2355", 1, vls1[1]); fc10 = dat10[.,forcsam];
dat11 = xlsReadM("Eforecasts_stfigarch_rev.xls", "a1:t2355", 1, vls1[1]); fc11 = dat11[.,forcsam];
dat12 = xlsReadM("Eforecasts_stfiaparch_rev.xls", "a1:t2355", 1, vls1[1]); fc12 = dat12[.,forcsam];*/





// QLD
/*vls1 = reshape(error(0),9,1);
forcsam = 1~5~seqa(10,10,2)';
dat_ob2 = xlsReadM("observedr.xls", "a1:t2249", 2, vls1[1]); obser1 = dat_ob2[.,forcsam];
vobser1 = obser1;


dat1 = xlsReadM("Eforecasts_garch_rev.xls", "a1:t2249", 2, vls1[1]); fc1 = dat1[.,forcsam];
dat2 = xlsReadM("Eforecasts_gjr_rev.xls", "a1:t2249", 2, vls1[1]); fc2 = dat2[.,forcsam];
dat3 = xlsReadM("Eforecasts_egarch_rev.xls", "a1:t2249", 2, vls1[1]); fc3 = dat3[.,forcsam];
dat4 = xlsReadM("Eforecasts_aparch_rev.xls", "a1:t2249", 2, vls1[1]); fc4 = dat4[.,forcsam];
dat5 = xlsReadM("Eforecasts_msgarch_rev.xls", "a1:t2249", 2, vls1[1]); fc5 = dat5[.,forcsam];
dat6 = xlsReadM("Eforecasts_figarch_rev.xls", "a1:t2249", 2, vls1[1]); fc6 = dat6[.,forcsam];
dat7 = xlsReadM("elec_BMSM_revision.xls", "a1:d2249", 2, vls1[1]); fc7 = dat7;
dat8 = xlsReadM("Eforecasts_msfigarch_rev.xls", "a1:t2249", 2, vls1[1]); fc8 = dat8[.,forcsam];
dat9 = xlsReadM("Eforecasts_msfiaparch_rev.xls", "a1:t2249", 2, vls1[1]); fc9 = dat9[.,forcsam];
dat10 = xlsReadM("Eforecasts_fiaparch_rev.xls", "a1:t2249", 2, vls1[1]); fc10 = dat10[.,forcsam];
dat11 = xlsReadM("Eforecasts_stfigarch_rev.xls", "a1:t2249", 2, vls1[1]); fc11 = dat11[.,forcsam];
dat12 = xlsReadM("Eforecasts_stfiaparch_rev.xls", "a1:t2249", 2, vls1[1]); fc12 = dat12[.,forcsam];*/



// SA
/*vls1 = reshape(error(0),9,1);

forcsam = 1~5~seqa(10,10,2)';
dat_ob2 = xlsReadM("observedr.xls", "a1:t2254", 3, vls1[1]); obser1 = dat_ob2[.,forcsam];
vobser1 = obser1;


dat1 = xlsReadM("Eforecasts_garch_rev.xls", "a1:t2254", 3, vls1[1]); fc1 = dat1[.,forcsam];
dat2 = xlsReadM("Eforecasts_gjr_rev.xls", "a1:t2254", 3, vls1[1]); fc2 = dat2[.,forcsam];
dat3 = xlsReadM("Eforecasts_egarch_rev.xls", "a1:t2254", 3, vls1[1]); fc3 = dat3[.,forcsam];
dat4 = xlsReadM("Eforecasts_aparch_rev.xls", "a1:t2254", 3, vls1[1]); fc4 = dat4[.,forcsam];
dat5 = xlsReadM("Eforecasts_msgarch_rev.xls", "a1:t2254", 3, vls1[1]); fc5 = dat5[.,forcsam];
dat6 = xlsReadM("Eforecasts_figarch_rev.xls", "a1:t2254", 3, vls1[1]); fc6 = dat6[.,forcsam];
dat7 = xlsReadM("elec_BMSM_revision.xls", "a1:d2254", 3, vls1[1]); fc7 = dat7;
dat8 = xlsReadM("Eforecasts_msfigarch_rev.xls", "a1:t2254", 3, vls1[1]); fc8 = dat8[.,forcsam];
dat9 = xlsReadM("Eforecasts_msfiaparch_rev.xls", "a1:t2254", 3, vls1[1]); fc9 = dat9[.,forcsam];
dat10 = xlsReadM("Eforecasts_fiaparch_rev.xls", "a1:t2254", 3, vls1[1]); fc10 = dat10[.,forcsam];
dat11 = xlsReadM("Eforecasts_stfigarch_rev.xls", "a1:t2254", 3, vls1[1]); fc11 = dat11[.,forcsam];
dat12 = xlsReadM("Eforecasts_stfiaparch_rev.xls", "a1:t2254", 3, vls1[1]); fc12 = dat12[.,forcsam];*/




//TAS

/*vls1 = reshape(error(0),9,1);
forcsam = 1~5~seqa(10,10,2)';
dat_ob2 = xlsReadM("observedr.xls", "a1:t2355", 4, vls1[1]); obser1 = dat_ob2[.,forcsam];
vobser1 = obser1;

// Region 4
dat1 = xlsReadM("Eforecasts_garch_rev.xls", "a1:t2355", 4, vls1[1]); fc1 = dat1[.,forcsam];
dat2 = xlsReadM("Eforecasts_gjr_rev.xls", "a1:t2355", 4, vls1[1]); fc2 = dat2[.,forcsam];
dat3 = xlsReadM("Eforecasts_egarch_rev.xls", "a1:t2355", 4, vls1[1]); fc3 = dat3[.,forcsam];
dat4 = xlsReadM("Eforecasts_aparch_rev.xls", "a1:t2355", 4, vls1[1]); fc4 = dat4[.,forcsam];
dat5 = xlsReadM("Eforecasts_msgarch_rev.xls", "a1:t2355", 4, vls1[1]); fc5 = dat5[.,forcsam];
dat6 = xlsReadM("Eforecasts_figarch_rev.xls", "a1:t2355", 4, vls1[1]); fc6 = dat6[.,forcsam];
dat7 = xlsReadM("elec_BMSM_revision.xls", "a1:d2355", 4, vls1[1]); fc7 = dat7;
dat8 = xlsReadM("Eforecasts_msfigarch_rev.xls", "a1:t2355", 4, vls1[1]); fc8 = dat8[.,forcsam];
dat9 = xlsReadM("Eforecasts_msfiaparch_rev.xls", "a1:t2355", 4, vls1[1]); fc9 = dat9[.,forcsam];
dat10 = xlsReadM("Eforecasts_fiaparch_rev.xls", "a1:t2355", 4, vls1[1]); fc10 = dat10[.,forcsam];
dat11 = xlsReadM("Eforecasts_stfigarch_rev.xls", "a1:t2355", 4, vls1[1]); fc11 = dat11[.,forcsam];
dat12 = xlsReadM("Eforecasts_stfiaparch_rev.xls", "a1:t2355", 4, vls1[1]); fc12 = dat12[.,forcsam];*/



// VIC
vls1 = reshape(error(0),9,1);
forcsam = 1~5~seqa(10,10,2)';
dat_ob2 = xlsReadM("observedr.xls", "a1:t2183", 5, vls1[1]); obser1 = dat_ob2[.,forcsam];
vobser1 = obser1;

// Region 5
dat1 = xlsReadM("Eforecasts_garch_rev.xls", "a1:t2183", 5, vls1[1]); fc1 = dat1[.,forcsam];
dat2 = xlsReadM("Eforecasts_gjr_rev.xls", "a1:t2183", 5, vls1[1]); fc2 = dat2[.,forcsam];
dat3 = xlsReadM("Eforecasts_egarch_rev.xls", "a1:t2183", 5, vls1[1]); fc3 = dat3[.,forcsam];
dat4 = xlsReadM("Eforecasts_aparch_rev.xls", "a1:t2183", 5, vls1[1]); fc4 = dat4[.,forcsam];
dat5 = xlsReadM("Eforecasts_msgarch_rev.xls", "a1:t2183", 5, vls1[1]); fc5 = dat5[.,forcsam];
dat6 = xlsReadM("Eforecasts_figarch_rev.xls", "a1:t2183", 5, vls1[1]); fc6 = dat6[.,forcsam];
dat7 = xlsReadM("elec_BMSM_revision.xls", "a1:d2183", 5, vls1[1]); fc7 = dat7;
dat8 = xlsReadM("Eforecasts_msfigarch_rev.xls", "a1:t2183", 5, vls1[1]); fc8 = dat8[.,forcsam];
dat9 = xlsReadM("Eforecasts_msfiaparch_rev.xls", "a1:t2183", 5, vls1[1]); fc9 = dat9[.,forcsam];
dat10 = xlsReadM("Eforecasts_fiaparch_rev.xls", "a1:t2183", 5, vls1[1]); fc10 = dat10[.,forcsam];
dat11 = xlsReadM("Eforecasts_stfigarch_rev.xls", "a1:t2183", 5, vls1[1]); fc11 = dat11[.,forcsam];
dat12 = xlsReadM("Eforecasts_stfiaparch_rev.xls", "a1:t2183", 5, vls1[1]); fc12 = dat12[.,forcsam];


// MSE for region 5

R_g1 = (vobser1 - fc1).^2;
R_gjr1 = (vobser1 - fc2).^2;
R_eg1 = (vobser1 - fc3).^2;
R_ap1 = (vobser1 - fc4).^2;
R_mg1 = (vobser1 - fc5).^2;
R_fi1 = (vobser1 - fc6).^2;
R_msm1 = (vobser1 - fc7).^2;
R_msfig = (vobser1 - fc8).^2;
R_msfia = (vobser1 - fc9).^2;
R_fia = (vobser1 - fc10).^2;
R_stfig = (vobser1 - fc11).^2;
R_stfia = (vobser1 - fc12).^2;


pvdm1 = dibmar(R_g1,R_msm1,forcsam);
pvdm2 = dibmar(R_gjr1,R_msm1,forcsam);
pvdm3 = dibmar(R_eg1,R_msm1,forcsam);
pvdm4 = dibmar(R_ap1,R_msm1,forcsam);
pvdm5 = dibmar(R_fi1,R_msm1,forcsam);
pvdm6 = dibmar(R_mg1,R_msm1,forcsam);
pvdm7 = dibmar(R_msfig,R_msm1,forcsam);
pvdm8 = dibmar(R_msfia,R_msm1,forcsam);
pvdm9 = dibmar(R_fia,R_msm1,forcsam);
pvdm10 = dibmar(R_stfig,R_msm1,forcsam);
pvdm11 = dibmar(R_stfia,R_msm1,forcsam);


tv1=pvdm1[.,4];tv2=pvdm2[.,4];tv3=pvdm3[.,4];tv4=pvdm4[.,4];tv5=pvdm5[.,4];tv6=pvdm6[.,4];tv7=pvdm7[.,4];tv8=pvdm8[.,4];tv9=pvdm9[.,4];tv10=pvdm10[.,4];
tv11=pvdm11[.,4];
rdb= tv1'|tv2'|tv3'|tv4'|tv5'|tv9'|tv10'|tv11'|tv6'|tv7'|tv8';
print "pv-values DM test for MSE:" rdb;



// MAE for region 5

M_g1 = abs(vobser1 - fc1);
M_gjr1 = abs(vobser1 - fc2);
M_eg1 = abs(vobser1 - fc3);
M_ap1 = abs(vobser1 - fc4);
M_mg1 = abs(vobser1 - fc5);
M_fi1 = abs(vobser1 - fc6);
M_msm1 = abs(vobser1 - fc7);
M_msfig = abs(vobser1 - fc8);
M_msfia = abs(vobser1 - fc9);
M_fia = abs(vobser1 - fc10);
M_stfig = abs(vobser1 - fc11);
M_stfia = abs(vobser1 - fc12);


pvdm1 = dibmar(M_g1,M_msm1,forcsam);
pvdm2 = dibmar(M_gjr1,M_msm1,forcsam);
pvdm3 = dibmar(M_eg1,M_msm1,forcsam);
pvdm4 = dibmar(M_ap1,M_msm1,forcsam);
pvdm5 = dibmar(M_fi1,M_msm1,forcsam);
pvdm6 = dibmar(M_mg1,M_msm1,forcsam);
pvdm7 = dibmar(M_msfig,M_msm1,forcsam);
pvdm8 = dibmar(M_msfia,M_msm1,forcsam);
pvdm9 = dibmar(M_fia,M_msm1,forcsam);
pvdm10 = dibmar(M_stfig,M_msm1,forcsam);
pvdm11 = dibmar(M_stfia,M_msm1,forcsam);


tv1=pvdm1[.,4];tv2=pvdm2[.,4];tv3=pvdm3[.,4];tv4=pvdm4[.,4];tv5=pvdm5[.,4];tv6=pvdm6[.,4];tv7=pvdm7[.,4];tv8=pvdm8[.,4];tv9=pvdm9[.,4];tv10=pvdm10[.,4];
tv11=pvdm11[.,4];
rdb= tv1'|tv2'|tv3'|tv4'|tv5'|tv9'|tv10'|tv11'|tv6'|tv7'|tv8';
print "pv-values DM test for MAE:" rdb;



proc (1) = dibmar(series1,series2,forcsam);
local dm,j,var1,var2,g1,g2,d,dbar1,resid,u,l,T,e0,sig2,s,e,ulag,dm1,dm2;

/* original and modified Diebold-Mariano test for nonnested forecasts;
*/

DM = zeros(cols(forcsam),4);

j = 1; do while j <= cols(forcsam);

 var1 = packr(series1[1:rows(series1),j]);

 var2 = packr(series2[1:rows(series2),j]);
 

g1 = var1; g2 = var2 ; 


d= g1 - g2;  /* LOSS DIFFERENTIAL */


dbar1=meanc(d);       /* SAMPLE MEAN LOSS DIFFERENTIAL */
 
resid=d-dbar1;



/* NWLAG SET */

u = packr(resid); l = forcsam[j];

T = rows(u);
  
if l == 1;

 e0 = (u^2)/T;
    
 sig2 = sumc(e0)/T;

else;

  s = seqa(1,1,l-1);

  e0 = u^2;
    
  ulag = shiftr(u'.*ones(l-1,T),seqa(1,1,l-1),0)';
   
  e = sumc(u.*ulag);
    
 sig2 = sumc(e0)/T+(2/T)*sumc(e); sig2 = sig2/T;

 if sig2 < 0; e = (1-seqa(1,1,l-1)./l).*e; sig2 = sumc(e0)/T+(2/T)*sumc(e); sig2 = sig2/T; endif;

endif;

dm1 = dbar1/sqrt(sig2);        /* DIEBOLD-MARIANO STATISTIC */

dm2 = sqrt((T+1-2*l+l*(l-1)/T)/T).*dm1;        /* MODIFIED DIEBOLD-MARIANO STATISTIC */

DM[j,.] = dm1~cdfnc(dm1)~dm2~cdftc(dm2,T-1);


j = j + 1; endo;


retp(DM); endp;
