%----------------------------------------------------------
% Repeat estimation with simulated data using a version of SW model
% without zero lower bound on the nominal interest rate
%----------------------------------------------------------

clear all;
clc;

nrep = 200;           % number of replication

npara = 28;         % number of structural parameters (excluding s.d. of shocks)
nshock = 7;         % number of shocks

postmean1 = zeros(npara,nrep);
postmean2 = zeros(nshock,nrep);
posthpdinf1 = zeros(npara,nrep);
posthpdinf2 = zeros(nshock,nrep);
posthpdsup1 = zeros(npara,nrep);
posthpdsup2 = zeros(nshock,nrep);
irfmean = zeros(15,21,nrep);
irfhpdinf = zeros(15,21,nrep);
irfhpdsup = zeros(15,21,nrep);

load('simyy.mat');

for rep = 1:nrep
    
    dc = simyy(:,1,rep);
    dinve = simyy(:,2,rep);
    dy = simyy(:,3,rep);
    labobs = simyy(:,4,rep);
    pinfobs = simyy(:,5,rep);
    dw = simyy(:,6,rep);
    robs = simyy(:,7,rep);
    
    save('simdata','dc','dinve','dy','labobs','pinfobs','dw','robs');

    dynare SWmodel3_est noclearall;
    
    postmean1(:,rep) = [
        oo_.posterior_mean.parameters.crhoa;
        oo_.posterior_mean.parameters.crhob;
        oo_.posterior_mean.parameters.crhog;
        oo_.posterior_mean.parameters.crhoqs;
        oo_.posterior_mean.parameters.crhoms;
        oo_.posterior_mean.parameters.crhopinf;
        oo_.posterior_mean.parameters.crhow;
        oo_.posterior_mean.parameters.cmap;
        oo_.posterior_mean.parameters.cmaw;
        oo_.posterior_mean.parameters.cgy;
        oo_.posterior_mean.parameters.csadjcost;
        oo_.posterior_mean.parameters.csigma;
        oo_.posterior_mean.parameters.chabb;
        oo_.posterior_mean.parameters.cprobw;
        oo_.posterior_mean.parameters.csigl;
        oo_.posterior_mean.parameters.cprobp;
        oo_.posterior_mean.parameters.cindw;
        oo_.posterior_mean.parameters.cindp;
        oo_.posterior_mean.parameters.czcap;
        oo_.posterior_mean.parameters.cfc;
        oo_.posterior_mean.parameters.crpi;
        oo_.posterior_mean.parameters.crr;
        oo_.posterior_mean.parameters.cry;
        oo_.posterior_mean.parameters.constepinf;
        oo_.posterior_mean.parameters.constebeta;
        oo_.posterior_mean.parameters.constelab;
        oo_.posterior_mean.parameters.ctrend;
        oo_.posterior_mean.parameters.calfa];

    postmean2(:,rep) = [
        oo_.posterior_mean.shocks_std.ea;
        oo_.posterior_mean.shocks_std.eb;
        oo_.posterior_mean.shocks_std.eg;
        oo_.posterior_mean.shocks_std.eqs;
        oo_.posterior_mean.shocks_std.em;
        oo_.posterior_mean.shocks_std.epinf;
        oo_.posterior_mean.shocks_std.ew];
    
    posthpdinf1(:,rep) = [
        oo_.posterior_hpdinf.parameters.crhoa;
        oo_.posterior_hpdinf.parameters.crhob;
        oo_.posterior_hpdinf.parameters.crhog;
        oo_.posterior_hpdinf.parameters.crhoqs;
        oo_.posterior_hpdinf.parameters.crhoms;
        oo_.posterior_hpdinf.parameters.crhopinf;
        oo_.posterior_hpdinf.parameters.crhow;
        oo_.posterior_hpdinf.parameters.cmap;
        oo_.posterior_hpdinf.parameters.cmaw;
        oo_.posterior_hpdinf.parameters.cgy;
        oo_.posterior_hpdinf.parameters.csadjcost;
        oo_.posterior_hpdinf.parameters.csigma;
        oo_.posterior_hpdinf.parameters.chabb;
        oo_.posterior_hpdinf.parameters.cprobw;
        oo_.posterior_hpdinf.parameters.csigl;
        oo_.posterior_hpdinf.parameters.cprobp;
        oo_.posterior_hpdinf.parameters.cindw;
        oo_.posterior_hpdinf.parameters.cindp;
        oo_.posterior_hpdinf.parameters.czcap;
        oo_.posterior_hpdinf.parameters.cfc;
        oo_.posterior_hpdinf.parameters.crpi;
        oo_.posterior_hpdinf.parameters.crr;
        oo_.posterior_hpdinf.parameters.cry;
        oo_.posterior_hpdinf.parameters.constepinf;
        oo_.posterior_hpdinf.parameters.constebeta;
        oo_.posterior_hpdinf.parameters.constelab;
        oo_.posterior_hpdinf.parameters.ctrend;
        oo_.posterior_hpdinf.parameters.calfa];

    posthpdinf2(:,rep) = [
        oo_.posterior_hpdinf.shocks_std.ea;
        oo_.posterior_hpdinf.shocks_std.eb;
        oo_.posterior_hpdinf.shocks_std.eg;
        oo_.posterior_hpdinf.shocks_std.eqs;
        oo_.posterior_hpdinf.shocks_std.em;
        oo_.posterior_hpdinf.shocks_std.epinf;
        oo_.posterior_hpdinf.shocks_std.ew];

    posthpdsup1(:,rep) = [
        oo_.posterior_hpdsup.parameters.crhoa;
        oo_.posterior_hpdsup.parameters.crhob;
        oo_.posterior_hpdsup.parameters.crhog;
        oo_.posterior_hpdsup.parameters.crhoqs;
        oo_.posterior_hpdsup.parameters.crhoms;
        oo_.posterior_hpdsup.parameters.crhopinf;
        oo_.posterior_hpdsup.parameters.crhow;
        oo_.posterior_hpdsup.parameters.cmap;
        oo_.posterior_hpdsup.parameters.cmaw;
        oo_.posterior_hpdsup.parameters.cgy;
        oo_.posterior_hpdsup.parameters.csadjcost;
        oo_.posterior_hpdsup.parameters.csigma;
        oo_.posterior_hpdsup.parameters.chabb;
        oo_.posterior_hpdsup.parameters.cprobw;
        oo_.posterior_hpdsup.parameters.csigl;
        oo_.posterior_hpdsup.parameters.cprobp;
        oo_.posterior_hpdsup.parameters.cindw;
        oo_.posterior_hpdsup.parameters.cindp;
        oo_.posterior_hpdsup.parameters.czcap;
        oo_.posterior_hpdsup.parameters.cfc;
        oo_.posterior_hpdsup.parameters.crpi;
        oo_.posterior_hpdsup.parameters.crr;
        oo_.posterior_hpdsup.parameters.cry;
        oo_.posterior_hpdsup.parameters.constepinf;
        oo_.posterior_hpdsup.parameters.constebeta;
        oo_.posterior_hpdsup.parameters.constelab;
        oo_.posterior_hpdsup.parameters.ctrend;
        oo_.posterior_hpdsup.parameters.calfa];

    posthpdsup2(:,rep) = [
        oo_.posterior_hpdsup.shocks_std.ea;
        oo_.posterior_hpdsup.shocks_std.eb;
        oo_.posterior_hpdsup.shocks_std.eg;
        oo_.posterior_hpdsup.shocks_std.eqs;
        oo_.posterior_hpdsup.shocks_std.em;
        oo_.posterior_hpdsup.shocks_std.epinf;
        oo_.posterior_hpdsup.shocks_std.ew];
    
    irfmean(:,:,rep) = [
        oo_.PosteriorIRF.dsge.Mean.y_ea ...
        oo_.PosteriorIRF.dsge.Mean.pinf_ea ...
        oo_.PosteriorIRF.dsge.Mean.r_ea ...
        oo_.PosteriorIRF.dsge.Mean.y_eb ...
        oo_.PosteriorIRF.dsge.Mean.pinf_eb ...
        oo_.PosteriorIRF.dsge.Mean.r_eb ...
        oo_.PosteriorIRF.dsge.Mean.y_eg ...
        oo_.PosteriorIRF.dsge.Mean.pinf_eg ...
        oo_.PosteriorIRF.dsge.Mean.r_eg ...
        oo_.PosteriorIRF.dsge.Mean.y_eqs ...
        oo_.PosteriorIRF.dsge.Mean.pinf_eqs ...
        oo_.PosteriorIRF.dsge.Mean.r_eqs ...
        oo_.PosteriorIRF.dsge.Mean.y_em ...
        oo_.PosteriorIRF.dsge.Mean.pinf_em ...
        oo_.PosteriorIRF.dsge.Mean.r_em ...
        oo_.PosteriorIRF.dsge.Mean.y_epinf ...
        oo_.PosteriorIRF.dsge.Mean.pinf_epinf ...
        oo_.PosteriorIRF.dsge.Mean.r_epinf ...
        oo_.PosteriorIRF.dsge.Mean.y_ew ...
        oo_.PosteriorIRF.dsge.Mean.pinf_ew ...
        oo_.PosteriorIRF.dsge.Mean.r_ew];

    irfhpdinf(:,:,rep) = [
        oo_.PosteriorIRF.dsge.HPDinf.y_ea ...
        oo_.PosteriorIRF.dsge.HPDinf.pinf_ea ...
        oo_.PosteriorIRF.dsge.HPDinf.r_ea ...
        oo_.PosteriorIRF.dsge.HPDinf.y_eb ...
        oo_.PosteriorIRF.dsge.HPDinf.pinf_eb ...
        oo_.PosteriorIRF.dsge.HPDinf.r_eb ...
        oo_.PosteriorIRF.dsge.HPDinf.y_eg ...
        oo_.PosteriorIRF.dsge.HPDinf.pinf_eg ...
        oo_.PosteriorIRF.dsge.HPDinf.r_eg ...
        oo_.PosteriorIRF.dsge.HPDinf.y_eqs ...
        oo_.PosteriorIRF.dsge.HPDinf.pinf_eqs ...
        oo_.PosteriorIRF.dsge.HPDinf.r_eqs ...
        oo_.PosteriorIRF.dsge.HPDinf.y_em ...
        oo_.PosteriorIRF.dsge.HPDinf.pinf_em ...
        oo_.PosteriorIRF.dsge.HPDinf.r_em ...
        oo_.PosteriorIRF.dsge.HPDinf.y_epinf ...
        oo_.PosteriorIRF.dsge.HPDinf.pinf_epinf ...
        oo_.PosteriorIRF.dsge.HPDinf.r_epinf ...
        oo_.PosteriorIRF.dsge.HPDinf.y_ew ...
        oo_.PosteriorIRF.dsge.HPDinf.pinf_ew ...
        oo_.PosteriorIRF.dsge.HPDinf.r_ew];

    irfhpdsup(:,:,rep) = [
        oo_.PosteriorIRF.dsge.HPDsup.y_ea ...
        oo_.PosteriorIRF.dsge.HPDsup.pinf_ea ...
        oo_.PosteriorIRF.dsge.HPDsup.r_ea ...
        oo_.PosteriorIRF.dsge.HPDsup.y_eb ...
        oo_.PosteriorIRF.dsge.HPDsup.pinf_eb ...
        oo_.PosteriorIRF.dsge.HPDsup.r_eb ...
        oo_.PosteriorIRF.dsge.HPDsup.y_eg ...
        oo_.PosteriorIRF.dsge.HPDsup.pinf_eg ...
        oo_.PosteriorIRF.dsge.HPDsup.r_eg ...
        oo_.PosteriorIRF.dsge.HPDsup.y_eqs ...
        oo_.PosteriorIRF.dsge.HPDsup.pinf_eqs ...
        oo_.PosteriorIRF.dsge.HPDsup.r_eqs ...
        oo_.PosteriorIRF.dsge.HPDsup.y_em ...
        oo_.PosteriorIRF.dsge.HPDsup.pinf_em ...
        oo_.PosteriorIRF.dsge.HPDsup.r_em ...
        oo_.PosteriorIRF.dsge.HPDsup.y_epinf ...
        oo_.PosteriorIRF.dsge.HPDsup.pinf_epinf ...
        oo_.PosteriorIRF.dsge.HPDsup.r_epinf ...
        oo_.PosteriorIRF.dsge.HPDsup.y_ew ...
        oo_.PosteriorIRF.dsge.HPDsup.pinf_ew ...
        oo_.PosteriorIRF.dsge.HPDsup.r_ew];

    save('results_temp');
    
    close all;
    clc;

end

save('results_all');