/* SPA test of Hansen 2005*/

/******** NSW********/

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];


// MSE

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;



/*SPA test based on MSE*/

n = rows(R_g1); c = cols(R_g1);

 selec_series = seqa(1,1,4)';

result_selec = zeros(12,cols(selec_series));

ii = 1; do while ii <= 12;

tt = 1; do while tt <= c;

dat = R_msm1[.,tt]~R_g1[.,tt]~R_gjr1[.,tt]~R_eg1[.,tt]~R_ap1[.,tt]~R_fi1[.,tt]~R_fia[.,tt]~R_stfig[.,tt]~R_stfia[.,tt]~R_mg1[.,tt]~R_msfig[.,tt]~R_msfia[.,tt];	
    
test = dat;


B = 5000;  /* no. of bootstrapp samples */

q = 0.5;  /* prob of Geometric distr. used in bootstrapping */
	
	input_dat = test[.,ii] -test[.,1:12]; // as benchmark model
    
    input_dat = delrows(input_dat',ii);
    
    input_dat = input_dat';
      	
	m = rows(input_dat); k = cols(input_dat);

means_k = meanc(input_dat); 

/* Bootstrapping: B bootstraps for each model */

means_overB = zeros(B,k);

sigk = zeros(k,1);sigk2 = zeros(k,1);

i = 1; do while i <= k;

    results = zeros(m,B);

    rndseed 123;


    iter= 1; do while iter  <=  B;

        index_dat = ceil(m*rndu(1,1));

        results[1,iter] = input_dat[index_dat,i];

            jj = 2; do while jj <= m;

                if rndu(1,1) <= 0.5; 

                    if index_dat < m; index_dat = index_dat + 1; 

                    else; indexdat = 1; endif;

                else; index_dat = ceil(m*rndu(1,1)); endif;

                results[jj,iter] = input_dat[index_dat,i];

            jj = jj + 1; endo;

    iter = iter + 1; endo;

means_overB[.,i] = meanc(results);

u = means_overB[.,i] - meanc(means_overB[.,i]);
  
sigk[i] = sumc(u'*u)/B;

mm_input = meanc(input_dat[.,i]);

input_wmean = input_dat[.,i] - mm_input;

e0 = (input_wmean).^2;
    
w = zeros(m-1,1);

s = 1; do while s <= m-1;

	w = ((m-s)/m)*0.5.^s + (s/m)*0.5.^(m-s);

s = s + 1; endo;
    
mm_lag = shiftr(input_wmean'.*ones(m-1,m),seqa(1,1,m-1),0)';
   
e = sumc(input_wmean.*mm_lag);
    
sigk2[i] = sumc(e0)+2*sumc(w.*e); sigk2[i] = sigk2[i]/m;


i = i + 1; endo; sigk = sigk2;

mm_B = meanc(means_overB);

means_overB =  means_overB - mm_B';

/* Test statistics */

Zstat = meanc(input_dat).*sqrt(m)./ sqrt(sigk);

if ismiss(Zstat) .== 1; print "Error!"; end; endif;

Zmax = maxc(Zstat);

Zselect = (Zstat .> -sqrt(2*ln(ln(m))));

Ttest = means_overB.*sqrt(m)./ sqrt(sigk');

if sumc(Zselect) .== 0; pval = 1;

    else; Tcorr = selif(Ttest', Zselect.== 1)';

    Tmax = maxc(Tcorr');

    pval = sumc(Tmax .> Zmax)/B;
	
	
endif;

result_selec[ii,tt] = pval;

 tt = tt + 1; endo;
 
 ii = ii + 1; endo;

print "Significance MSE:" result_selec;	



/******** 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];




// MSE
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;


/*SPA test based on MSE*/

n = rows(R_g1); c = cols(R_g1);

 selec_series = seqa(1,1,4)';

result_selec = zeros(12,cols(selec_series));

ii = 1; do while ii <= 12;

tt = 1; do while tt <= c;

dat = R_msm1[.,tt]~R_g1[.,tt]~R_gjr1[.,tt]~R_eg1[.,tt]~R_ap1[.,tt]~R_fi1[.,tt]~R_fia[.,tt]~R_stfig[.,tt]~R_stfia[.,tt]~R_mg1[.,tt]~R_msfig[.,tt]~R_msfia[.,tt];	
 
test = dat;


B = 5000;  /* no. of bootstrapp samples */

q = 0.5;  /* prob of Geometric distr. used in bootstrapping */
	
	input_dat = test[.,ii] -test[.,1:12]; // as benchmark model
    
    input_dat = delrows(input_dat',ii);
    
    input_dat = input_dat';
      	
	m = rows(input_dat); k = cols(input_dat);

means_k = meanc(input_dat); 

/* Bootstrapping: B bootstraps for each model */

means_overB = zeros(B,k);

sigk = zeros(k,1);sigk2 = zeros(k,1);

i = 1; do while i <= k;

    results = zeros(m,B);

    rndseed 123;


    iter= 1; do while iter  <=  B;

        index_dat = ceil(m*rndu(1,1));

        results[1,iter] = input_dat[index_dat,i];

            jj = 2; do while jj <= m;

                if rndu(1,1) <= 0.5; 

                    if index_dat < m; index_dat = index_dat + 1; 

                    else; indexdat = 1; endif;

                else; index_dat = ceil(m*rndu(1,1)); endif;

                results[jj,iter] = input_dat[index_dat,i];

            jj = jj + 1; endo;

    iter = iter + 1; endo;

means_overB[.,i] = meanc(results);

u = means_overB[.,i] - meanc(means_overB[.,i]);
  
sigk[i] = sumc(u'*u)/B;

mm_input = meanc(input_dat[.,i]);

input_wmean = input_dat[.,i] - mm_input;

e0 = (input_wmean).^2;
    
w = zeros(m-1,1);

s = 1; do while s <= m-1;

	w = ((m-s)/m)*0.5.^s + (s/m)*0.5.^(m-s);

s = s + 1; endo;
    
mm_lag = shiftr(input_wmean'.*ones(m-1,m),seqa(1,1,m-1),0)';
   
e = sumc(input_wmean.*mm_lag);
    
sigk2[i] = sumc(e0)+2*sumc(w.*e); sigk2[i] = sigk2[i]/m;


i = i + 1; endo; sigk = sigk2;

mm_B = meanc(means_overB);

means_overB =  means_overB - mm_B';

/* Test statistics */

Zstat = meanc(input_dat).*sqrt(m)./ sqrt(sigk);

if ismiss(Zstat) .== 1; print "Error!"; end; endif;

Zmax = maxc(Zstat);

Zselect = (Zstat .> -sqrt(2*ln(ln(m))));

Ttest = means_overB.*sqrt(m)./ sqrt(sigk');

if sumc(Zselect) .== 0; pval = 1;

    else; Tcorr = selif(Ttest', Zselect.== 1)';

    Tmax = maxc(Tcorr');

    pval = sumc(Tmax .> Zmax)/B;
	
	
endif;

result_selec[ii,tt] = pval;

 tt = tt + 1; endo;
 
 ii = ii + 1; endo;

print "Significance MSE:" result_selec;	

vls1 = reshape(error(0),9,1);

/******** 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];




// MSE
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;



/*SPA test based on MSE*/

n = rows(R_g1); c = cols(R_g1);

 selec_series = seqa(1,1,4)';

result_selec = zeros(12,cols(selec_series));

ii = 1; do while ii <= 12;

tt = 1; do while tt <= c;

dat = R_msm1[.,tt]~R_g1[.,tt]~R_gjr1[.,tt]~R_eg1[.,tt]~R_ap1[.,tt]~R_fi1[.,tt]~R_fia[.,tt]~R_stfig[.,tt]~R_stfia[.,tt]~R_mg1[.,tt]~R_msfig[.,tt]~R_msfia[.,tt];	
 
test = dat;


B = 5000;  /* no. of bootstrapp samples */

q = 0.5;  /* prob of Geometric distr. used in bootstrapping */
	
	input_dat = test[.,ii] -test[.,1:12]; // as benchmark model
    
    input_dat = delrows(input_dat',ii);
    
    input_dat = input_dat';
      	
	m = rows(input_dat); k = cols(input_dat);

means_k = meanc(input_dat); 

/* Bootstrapping: B bootstraps for each model */

means_overB = zeros(B,k);

sigk = zeros(k,1);sigk2 = zeros(k,1);

i = 1; do while i <= k;

    results = zeros(m,B);

    rndseed 123;


    iter= 1; do while iter  <=  B;

        index_dat = ceil(m*rndu(1,1));

        results[1,iter] = input_dat[index_dat,i];

            jj = 2; do while jj <= m;

                if rndu(1,1) <= 0.5; 

                    if index_dat < m; index_dat = index_dat + 1; 

                    else; indexdat = 1; endif;

                else; index_dat = ceil(m*rndu(1,1)); endif;

                results[jj,iter] = input_dat[index_dat,i];

            jj = jj + 1; endo;

    iter = iter + 1; endo;

means_overB[.,i] = meanc(results);

u = means_overB[.,i] - meanc(means_overB[.,i]);
  
sigk[i] = sumc(u'*u)/B;

mm_input = meanc(input_dat[.,i]);

input_wmean = input_dat[.,i] - mm_input;

e0 = (input_wmean).^2;
    
w = zeros(m-1,1);

s = 1; do while s <= m-1;

	w = ((m-s)/m)*0.5.^s + (s/m)*0.5.^(m-s);

s = s + 1; endo;
    
mm_lag = shiftr(input_wmean'.*ones(m-1,m),seqa(1,1,m-1),0)';
   
e = sumc(input_wmean.*mm_lag);
    
sigk2[i] = sumc(e0)+2*sumc(w.*e); sigk2[i] = sigk2[i]/m;


i = i + 1; endo; sigk = sigk2;

mm_B = meanc(means_overB);

means_overB =  means_overB - mm_B';

/* Test statistics */

Zstat = meanc(input_dat).*sqrt(m)./ sqrt(sigk);

if ismiss(Zstat) .== 1; print "Error!"; end; endif;

Zmax = maxc(Zstat);

Zselect = (Zstat .> -sqrt(2*ln(ln(m))));

Ttest = means_overB.*sqrt(m)./ sqrt(sigk');

if sumc(Zselect) .== 0; pval = 1;

    else; Tcorr = selif(Ttest', Zselect.== 1)';

    Tmax = maxc(Tcorr');

    pval = sumc(Tmax .> Zmax)/B;
	
	
endif;

result_selec[ii,tt] = pval;

 tt = tt + 1; endo;
 
 ii = ii + 1; endo;

print "Significance MSE:" result_selec;	
 


/******** 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];




// MSE
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;


/*SPA test based on MSE*/

n = rows(R_g1); c = cols(R_g1);

 selec_series = seqa(1,1,4)';

result_selec = zeros(12,cols(selec_series));

ii = 1; do while ii <= 12;

tt = 1; do while tt <= c;

dat = R_msm1[.,tt]~R_g1[.,tt]~R_gjr1[.,tt]~R_eg1[.,tt]~R_ap1[.,tt]~R_fi1[.,tt]~R_fia[.,tt]~R_stfig[.,tt]~R_stfia[.,tt]~R_mg1[.,tt]~R_msfig[.,tt]~R_msfia[.,tt];	

test = dat;


B = 5000;  /* no. of bootstrapp samples */

q = 0.5;  /* prob of Geometric distr. used in bootstrapping */
	
	input_dat = test[.,ii] -test[.,1:12]; // as benchmark model
    
    input_dat = delrows(input_dat',ii);
    
    input_dat = input_dat';
      	
	m = rows(input_dat); k = cols(input_dat);

means_k = meanc(input_dat); 

/* Bootstrapping: B bootstraps for each model */

means_overB = zeros(B,k);

sigk = zeros(k,1);sigk2 = zeros(k,1);

i = 1; do while i <= k;

    results = zeros(m,B);

    rndseed 123;


    iter= 1; do while iter  <=  B;

        index_dat = ceil(m*rndu(1,1));

        results[1,iter] = input_dat[index_dat,i];

            jj = 2; do while jj <= m;

                if rndu(1,1) <= 0.5; 

                    if index_dat < m; index_dat = index_dat + 1; 

                    else; indexdat = 1; endif;

                else; index_dat = ceil(m*rndu(1,1)); endif;

                results[jj,iter] = input_dat[index_dat,i];

            jj = jj + 1; endo;

    iter = iter + 1; endo;

means_overB[.,i] = meanc(results);

u = means_overB[.,i] - meanc(means_overB[.,i]);
  
sigk[i] = sumc(u'*u)/B;

mm_input = meanc(input_dat[.,i]);

input_wmean = input_dat[.,i] - mm_input;

e0 = (input_wmean).^2;
    
w = zeros(m-1,1);

s = 1; do while s <= m-1;

	w = ((m-s)/m)*0.5.^s + (s/m)*0.5.^(m-s);

s = s + 1; endo;
    
mm_lag = shiftr(input_wmean'.*ones(m-1,m),seqa(1,1,m-1),0)';
   
e = sumc(input_wmean.*mm_lag);
    
sigk2[i] = sumc(e0)+2*sumc(w.*e); sigk2[i] = sigk2[i]/m;


i = i + 1; endo; sigk = sigk2;

mm_B = meanc(means_overB);

means_overB =  means_overB - mm_B';

/* Test statistics */

Zstat = meanc(input_dat).*sqrt(m)./ sqrt(sigk);

if ismiss(Zstat) .== 1; print "Error!"; end; endif;

Zmax = maxc(Zstat);

Zselect = (Zstat .> -sqrt(2*ln(ln(m))));

Ttest = means_overB.*sqrt(m)./ sqrt(sigk');

if sumc(Zselect) .== 0; pval = 1;

    else; Tcorr = selif(Ttest', Zselect.== 1)';

    Tmax = maxc(Tcorr');

    pval = sumc(Tmax .> Zmax)/B;
	
	
endif;

result_selec[ii,tt] = pval;

 tt = tt + 1; endo;
 
 ii = ii + 1; endo;
print "Significance MSE:" result_selec;	

 

/******** 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;


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];




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;


/*SPA test based on MSE*/

n = rows(R_g1); c = cols(R_g1);

 selec_series = seqa(1,1,4)';

result_selec = zeros(12,cols(selec_series));

ii = 1; do while ii <= 12;

tt = 1; do while tt <= c;

dat = R_msm1[.,tt]~R_g1[.,tt]~R_gjr1[.,tt]~R_eg1[.,tt]~R_ap1[.,tt]~R_fi1[.,tt]~R_fia[.,tt]~R_stfig[.,tt]~R_stfia[.,tt]~R_mg1[.,tt]~R_msfig[.,tt]~R_msfia[.,tt];	
 	
test = dat;


B = 5000;  /* no. of bootstrapp samples */

q = 0.5;  /* prob of Geometric distr. used in bootstrapping */
	
	input_dat = test[.,ii] -test[.,1:12]; // as benchmark model
    
    input_dat = delrows(input_dat',ii);
    
    input_dat = input_dat';
      	
	m = rows(input_dat); k = cols(input_dat);

means_k = meanc(input_dat); 

/* Bootstrapping: B bootstraps for each model */

means_overB = zeros(B,k);

sigk = zeros(k,1);sigk2 = zeros(k,1);

i = 1; do while i <= k;

    results = zeros(m,B);

    rndseed 123;


    iter= 1; do while iter  <=  B;

        index_dat = ceil(m*rndu(1,1));

        results[1,iter] = input_dat[index_dat,i];

            jj = 2; do while jj <= m;

                if rndu(1,1) <= 0.5; 

                    if index_dat < m; index_dat = index_dat + 1; 

                    else; indexdat = 1; endif;

                else; index_dat = ceil(m*rndu(1,1)); endif;

                results[jj,iter] = input_dat[index_dat,i];

            jj = jj + 1; endo;

    iter = iter + 1; endo;

means_overB[.,i] = meanc(results);

u = means_overB[.,i] - meanc(means_overB[.,i]);
  
sigk[i] = sumc(u'*u)/B;

mm_input = meanc(input_dat[.,i]);

input_wmean = input_dat[.,i] - mm_input;

e0 = (input_wmean).^2;
    
w = zeros(m-1,1);

s = 1; do while s <= m-1;

	w = ((m-s)/m)*0.5.^s + (s/m)*0.5.^(m-s);

s = s + 1; endo;
    
mm_lag = shiftr(input_wmean'.*ones(m-1,m),seqa(1,1,m-1),0)';
   
e = sumc(input_wmean.*mm_lag);
    
sigk2[i] = sumc(e0)+2*sumc(w.*e); sigk2[i] = sigk2[i]/m;


i = i + 1; endo; sigk = sigk2;

mm_B = meanc(means_overB);

means_overB =  means_overB - mm_B';

/* Test statistics */

Zstat = meanc(input_dat).*sqrt(m)./ sqrt(sigk);

if ismiss(Zstat) .== 1; print "Error!"; end; endif;

Zmax = maxc(Zstat);

Zselect = (Zstat .> -sqrt(2*ln(ln(m))));

Ttest = means_overB.*sqrt(m)./ sqrt(sigk');

if sumc(Zselect) .== 0; pval = 1;

    else; Tcorr = selif(Ttest', Zselect.== 1)';

    Tmax = maxc(Tcorr');

    pval = sumc(Tmax .> Zmax)/B;
	
	
endif;

result_selec[ii,tt] = pval;

 tt = tt + 1; endo;
 
 ii = ii + 1; endo;

print "Significance MSE:" result_selec;	
 

