// A TWO COUNTRY MONETARY UNION MODEL


// PREAMBLE

var y q pi pih s c mc a R pstar ystar mcstar astar eR epstar eystar ed epih pi_obs pstar_obs y_obs;

varexo e_a e_d e_pih e_ystar e_R e_pstar e_astar me_y;

parameters beta alpha h sigma phi eta thetah delta_h rhoa rhod rhoeR rhopih rhoystar rhopstar rhoastar rhor phi1 phi2 thetast delta_st sigmaf phif;

beta    =   0.99;      
alpha   =   0.85;      // Malta's average imports/GDP ratio over past decade
h       =   0.65;          
sigma   =   2.50;       
phi     =   2.00;          
eta     =   1.00;          

sigmaf  =   2.50;       
phif    =   2.00;       

thetah  =   0.75;       
delta_h =   0.50;      

thetast =   0.75;      
delta_st=   0.50;      

rhoa    =   0.80;    
rhod    =   0.80;    
rhopih  =   0.80;    

rhoystar=   0.80;    
rhopstar=   0.80;    
rhoeR   =   0.80;    
rhoastar=   0.80;    

rhor    =   0.80;    
phi1    =   1.70;    
phi2    =   0.125;   


// MODEL EQUATIONS

model(linear);

    #mu_f_d = beta/(1+delta_h*beta);
    #mu_b_d = delta_h/(1+delta_h*beta);
    #lambda_d = (1-thetah)*(1-thetah*beta)/(thetah*(1+delta_h*beta));

    #mu_f_st = beta/(1+delta_st*beta);
    #mu_b_st = delta_st/(1+delta_st*beta);
    #lambda_st = (1-thetast)*(1-thetast*beta)/(thetast*(1+delta_st*beta));
    
    //#mu_f_d = (beta*thetah)/(thetah + delta_h*(1-thetah*(1-beta)));
    //#mu_b_d = delta_h/(thetah + delta_h*(1-thetah*(1-beta)));
    //#lambda_d = ((1-delta_h)*(1-thetah)*(1-thetah*beta))/(thetah + delta_h*(1-thetah*(1-beta)));

    //#mu_f_st = (beta*thetast)/(thetast + delta_st*(1-thetast*(1-beta)));
    //#mu_b_st = delta_st/(thetast + delta_st*(1-thetast*(1-beta)));
    //#lambda_st = ((1-delta_st)*(1-thetast)*(1-thetast*beta))/(thetast + delta_st*(1-thetast*(1-beta)));

    
    // 1.  Consumption Euler equation and International Risk Sharing 
    c = h*c(-1) + ystar(+1) - h*ystar - ((1-h)/sigma)*q(+1) - ((1-h)/sigma)*(R - pi(+1) + ed);

    // 2.  Market clearing condition
    y = (1-alpha)*c + (2-alpha)*alpha*eta*s + alpha*ystar;

    // 4.  CPI differentials
    q - q(-1) = pi - pstar;

    // 5.  Terms of trade
    s - s(-1) = pstar - pih;

    // 6.  Overall inflation
    pi = (1-alpha)*pih + alpha*pstar;

    // 7.  Domestic inflation - Indexation
    pih = mu_f_d*pih(+1) + mu_b_d*pih(-1) + lambda_d*mc;
    
    // 8.  Marginal cost of domestic producers
    mc = (sigma/(1-h))*(c - h*c(-1)) + phi*y + alpha*s - (1+phi)*a + epih;

    // 9.  Exogenous Technology Shock
    a = rhoa*a(-1) + e_a;

    // 10. Exogenous Preference shock
    ed     = rhod*ed(-1) + e_d;

    // 12. Exogenous Domestic Inflation shock
    epih   = rhopih*epih(-1) + e_pih;          

    // REST OF MONETARY UNION

    // 13. Union Dynamic IS Curve 
    ystar = (1/(1+h))*ystar(+1) + (h/(1+h))*ystar(-1) - ((1-h)/(sigma*(1+h)))*(R - pstar(+1) + eystar);

    // 14. Union Aggregate Demand shock
    eystar = rhoystar*eystar(-1) + e_ystar;

    // 15. Union New Keynesian Phillips Curve
    pstar = mu_f_st*pstar(+1) + mu_b_st*pstar(-1) + lambda_st*mcstar;

    // 16. Union Marginal Cost equation - including habit
    mcstar = ((sigmaf/(1+h))+phif)*ystar + (sigmaf*h/(1-h))*ystar(-1) - (1+phif)*astar + epstar;

    // 17. Union Aggreate Supply Shock
    epstar = rhopstar*epstar(-1) + e_pstar;

    // 18. Union Technology Shock
    astar = rhoastar*astar(-1) + e_astar; 

    // MONETARY POLICY

    // 19. Taylor Rule
    R = rhor*R(-1) + (1-rhor)*(phi1*pstar + phi2*ystar) + eR;

    // 20. Monetary Policy Shock
    eR= rhoeR*eR(-1) + e_R;
   

    // OBSERVATION EQUATIONS

    pi_obs  =   4*pi;
    pstar_obs=  4*pstar;
    y_obs   =   y + me_y;
    

end;

// CALCULATION OF THE STEADY STATE

steady;

check;

// SHOCK STRUCTURE

shocks;
var e_d;      stderr 0.1;
var e_pih;    stderr 0.1;
var e_a;      stderr 0.1;
var e_ystar;  stderr 0.1;
var e_R;      stderr 0.1;
var e_pstar;  stderr 0.1;
var e_astar;  stderr 0.1;
end;

// STOCHASTIC SIMULATION

//stoch_simul(irf=30) y c pi pih mc q s ystar pstar R;

// BAYESIAN ESTIMATION

// OBSERVED VARIABLES

varobs y_obs pi_obs ystar pstar_obs R;

// ESTIMATION

estimated_params;
h,  beta_pdf, 0.65, 0.15;
alpha, beta_pdf, 0.85, 0.1;
sigma, normal_pdf, 2.5, 0.3;  
phi, gamma_pdf, 2.0, 0.4;   
eta, gamma_pdf, 1.0, 0.3;

sigmaf, normal_pdf, 1.0, 0.3;
phif, gamma_pdf, 2.0, 0.3;

thetah, beta_pdf, 0.75, 0.15;
delta_h, beta_pdf, 0.50, 0.15;

thetast, beta_pdf, 0.75, 0.15; 
delta_st, beta_pdf, 0.50, 0.15;

rhoa, beta_pdf, 0.80, 0.1;
rhod, beta_pdf, 0.80, 0.1;
rhopih, beta_pdf, 0.80, 0.1;
   
rhoystar, beta_pdf, 0.8, 0.1;
rhopstar, beta_pdf, 0.8, 0.1;
rhoeR, beta_pdf, 0.8, 0.1;
rhoastar, beta_pdf, 0.8, 0.1;

phi1, normal_pdf, 1.7, 0.1; 
phi2, normal_pdf, 0.125, 0.1; 
rhor, beta_pdf, 0.8, 0.1;

stderr e_d, inv_gamma_pdf, 0.15, 2;
stderr e_pih, inv_gamma_pdf, 0.15, 2;
stderr e_a, inv_gamma_pdf, 0.15, 2;

stderr e_ystar, inv_gamma_pdf, 0.1, 2; 
stderr e_pstar, inv_gamma_pdf, 0.1, 2;
stderr e_R, inv_gamma_pdf, 0.1, 2;
stderr e_astar, inv_gamma_pdf, 0.1, 2;

stderr me_y, uniform_pdf, , , 0, 0.1;
end;

estimation(datafile=data, mh_replic=20000, mh_nblocks=2, mh_drop=0.30, mh_jscale=0.37, filtered_vars) y pi pstar ystar R;
//shock_decomposition;