//Imperfect Pass-Through : Monacelli 2003

var p y lop e q pw yw z r y_obs p_obs lop_obs e_obs q_obs r_obs; 

varexo uyw upw ud uq ur uz;

parameters t, gamma, lambda_h, lambda_f, cz, cr, cd, cq, ro, cyw, cpw, rr, csi1, csi2, csi3;

model (linear);

//Phillips curve

//#b = exp(-rr/400);

p = exp( -rr / 400 ) * p(+1)+ (1-gamma) * lambda_h * (1 + ( (1/t) / (1 + gamma * (2 - gamma) * ((1/t) - 1)))) * y +
    (((1 - gamma) * lambda_h * (1 - ((1 + gamma * ((1/t) - 1))/(1 + gamma * (2 - gamma) * ((1/t) -1))))) + gamma*lambda_f) * lop;

//IS curve

y = y(+1) - cz*z - ((1 + gamma * (2 - gamma)*((1/t) -1))/(1/t))*(r - p(+1)) -((1 + gamma * (2 - gamma)*((1/t) -1))/(1/t))*gamma*q(+1) + 
     (((1 + gamma * (2 - gamma)*( (1/t) -1))/(1/t)) * (1/t) * (((gamma*(2 - gamma)*((1/t) -1)))/((1/t) + (1+gamma*(2-gamma)*((1/t) -1)))))*yw(+1)-
     (((1 + gamma * (2 - gamma)*((1/t) -1))/(1/t))*((((1/t) * (1 - ro) * (1 + 1) )/((1/t)+(1+gamma*(2-gamma)*((1/t)-1))))))*z+
     ((gamma * (1 - gamma)*((1/t) - 1))/(1/t))*(lop(+1) - lop);

//CPI equation 

p = e + pw - lop + lop(-1) - (1 - gamma) * q;

//Taylor rule

r = cr * r(-1) + ( 1 - cr ) * ( csi1 * p + csi2 * y + csi3 * e ) + ur; 

//Terms of trade process

q = cq * q(-1) + uq; 

//RoW output

yw = cyw * yw(-1) + uyw; 

//RoW inflation

pw = cpw * pw(-1) + upw; 

//Productivity

z = cz * z(-1) + uz;

//LOP deviation

lop - lop(-1) = cd * (lop(-1) - lop(-2)) + ud;

//Observable variables

y_obs = y - y(-1) + z;

r_obs = 4 * r;

p_obs = 4 * p;

q_obs = q;

e_obs = e;

/*
y_obs = 100 * (y - y(-1) + z);

r_obs = 400 * r;

p_obs = 400 * p;

q_obs = 100 * q;

e_obs = 100 * e;
*/
lop_obs = lop - lop(-1);

//t=1/sigma;

end;

varobs r_obs y_obs q_obs p_obs e_obs lop_obs;

/*
initval;

lop = 0;

end;

/*
steady;

check;
*/


estimated_params;

csi1, gamma_pdf, 1.5, 0.5, 0.001; 

csi2, gamma_pdf, 0.25, 0.13, 0.001; 

csi3, gamma_pdf, 0.25, 0.13, 0.001; 

cr, beta_pdf, 0.5, 0.2, 0, 0.99; 
/*
a, beta_pdf, 0.2, 0.05, 0, 0.99;  

k, gamma_pdf, 0.5, 0.25, 0.001;  
*/

ro,beta_pdf, 0.2, 0.05, 0, 0.99;

lambda_h, gamma_pdf, 0.5, 0.25, 0.001;

lambda_f, gamma_pdf, 0.5, 0.25, 0.001;

t, beta_pdf, 0.5, 0.2, 0.01, 0.99; 

gamma, beta_pdf, 0.2, 0.05, 0, 0.99;

//eta,gamma_pdf, 0.5, 0.25, 0.001;

//lelast, gamma_pdf, 0.5, 0.25, 0.001;

rr, gamma_pdf, 2.5, 1, 0.001;

cq, beta_pdf, 0.4, 0.2, 0.01, 0.99; 

cd, beta_pdf, 0.4, 0.2, 0.01, 0.99;

cz, beta_pdf, 0.4, 0.10 , 0.01, 0.99; 

cyw, beta_pdf, 0.9, 0.05, 0.01, 0.99; 

cpw, beta_pdf, 0.8, 0.1, 0.01, 0.99; 

stderr ur, inv_gamma_pdf, 0.25, Inf; 

stderr uq, inv_gamma_pdf, 0.75, Inf;

stderr ud, inv_gamma_pdf, 0.75, Inf;

stderr uz, inv_gamma_pdf, 0.5, Inf; 

stderr uyw, inv_gamma_pdf, 0.75, Inf; 

stderr upw, inv_gamma_pdf, 0.275, Inf;

end;

estimation (datafile=brazilipt,nobs=42,mh_replic=50000,mode_compute=4,mh_nblocks=2,mh_drop=0.45,mh_jscale=0.65,bayesian_irf,irf=12,moments_varendo); 

stoch_simul (irf=12);