//Endogenous Variables
var c i pi c_m tau v_m c_d pi_star pi_m x tau_star y_star v_x s y pi_d mc_d mc_m i_star b_star v_s v_px wp a n
	ys_obs pis_obs is_obs i_obs ds_obs pi_obs y_obs_real y_obs_nonf y_obs_mark xs_obs im_obs tot_obs a_obs;

// Declare exogenous Variables (shock variables)
varexo e_d e_pi e_i e_ystar e_pistar e_istar e_m e_s e_a e_x e_px
	 em_r em_f em_m em_xs em_im em_tot em_a;


// Declare Model Parameters
parameters gamma eta delta delta_x beta theta_d theta_m omega alpha psi phi phi_y phi_pi phi_i p_ystar p_pistar p_istar p_m p_s p_a p_x p_px; 

// Initialise Parameters
gamma = 3;
eta = 2;
delta = 0.9;
delta_x = 0.05;
beta = 0.99;
theta_d = 0.75;
theta_m = 0.75;
omega = 0.3;
alpha = 0.18;
psi = 0.01;
phi = 2;
phi_y = 0.5;
phi_pi = 1.5;
phi_i = 0.5;
//p_ystar = 0.9;
//p_pistar = 0.8;
//p_istar = 0.7;
p_m = 0.5;
p_s = 0.5;
p_a = 0.5;
p_x = 0.5;
p_px = 0.5;


// Describe Model Equations
model(linear);
//Parameter Definitions
#mu_f_d = (beta*theta_d)/(theta_d + omega*(1-theta_d*(1-beta)));
#mu_f_f = (beta*theta_m)/(theta_m + omega*(1-theta_m*(1-beta)));
#mu_b_d = omega/(theta_d + omega*(1-theta_d*(1-beta)));
#mu_b_f = omega/(theta_m + omega*(1-theta_m*(1-beta)));
#lambda_d = ((1-omega)*(1-theta_d)*(1-theta_d*beta))/(theta_d + omega*(1-theta_d*(1-beta)));
#lambda_f = ((1-omega)*(1-theta_m)*(1-theta_m*beta))/(theta_m + omega*(1-theta_m*(1-beta)));
#rho = gamma - eta + eta*gamma;

// A1: Consumption Euler Equation
c = (gamma/rho)*c(+1) - ((eta*(1-gamma))/rho)*c(-1) - (1/rho)*(i-pi(+1)) + e_d;

// A2: Consumer Demand for Imported Goods
c_m = c - delta*tau + v_m;

// A3: Consumer Demand for Domestic Goods
c_d = c + delta*tau;

// A4: Relative price of imported goods
tau = tau(-1) + pi_m - pi;

// A5: Export Demand
x = -delta_x*tau_star + y_star + v_x;

// A6: Relative Price of goods produced domestically sold to the world
tau_star = pi - pi_star - (s - s(-1)) + tau_star(-1);

// A7: Domestic Resource Constraint
y = (1-alpha)*c_d + alpha*x;

// A8: Inflation of domestically produced goods //MAYBE COST PUSH SHOCK IS AN AR PROCESS?
pi_d = mu_f_d*pi(+1) + mu_b_d*pi(-1) +lambda_d*mc_d + e_pi;  

// A9: Inflation of imported goods
pi_m = mu_f_f*pi_m(+1) + mu_b_f*pi_m(-1) + lambda_f*mc_m + e_pi;

// A10: CPI Inflation
pi = (1-alpha)*pi_d + alpha*pi_m;

// A11: Uncovered Interest Parity Condition
i = i_star + (s(+1) - s) - psi*b_star(-1) + v_s;

// A12: Flow budget constraint
b_star = b_star(-1) + x - c_m + v_px + (s-s(-1));

// A13: Labour Supply Decision
wp = phi*n + gamma*(c - eta*c(-1));
 
// A14: Labour Supply decision
//w - p = phi*(y-a) + gamma*(c - eta*c(-1));

// A15: Real Domestic Marginal Cost
mc_d = gamma*(c - eta*c(-1)) + phi*n - a;

// A16: Real Domestic Marginal Cost
mc_d = gamma*(c - eta*c(-1)) + phi*y - (phi + 1)*a;

// A17: Real Marginal Cost of Imported goods
//mc_m = s + p_star - p;

// A18: Real Marginal Cost of Imported goods
mc_m = (s-s(-1)) + pi_star - pi + mc_m(-1);

// A19: Taylor Rule
i = phi_y*y(-1) + phi_pi*pi(-1) + phi_pi*i(-1) + e_i;

// Unrestricted VAR for exogenous World Variables
// y_star = p_ystar*y_star(-1) + e_ystar;
// pi_star = p_pistar*pi_star(-1) + e_pistar;
// i_star = p_istar*i_star(-1) +e_istar;

y_star = 0.9798*y_star(-1)  - 0.1015*pi_star(-1) - 0.1400*i_star(-1) + e_ystar;
pi_star = -0.0545*y_star(-1)  - 0.0843*pi_star(-1) + 0.128*i_star(-1) + e_pistar;
i_star = 0.1922*y_star(-1)  + 0.3197*pi_star(-1) + 0.726*i_star(-1) + e_istar;

// Exogenous Shock processes
v_m = p_m*v_m(-1) + e_m;
v_s = p_s*v_s(-1) + e_s;
a = p_a*a(-1) + e_a;
v_x = p_x*v_x(-1) + e_x;
v_px = p_px*v_px(-1) + e_px;

// Measurement Equations
ys_obs		= y_star ;
pis_obs		= pi_star;
is_obs		= i_star;
i_obs		= i;
ds_obs		= s - s(-1);
pi_obs		= pi;
y_obs_real	= y  + em_r;
y_obs_nonf	= y + em_f;
y_obs_mark	= y + em_m;
xs_obs		= x - y  + em_xs;
im_obs		= c_m - y  + em_im;
tot_obs		= v_px - mc_m  + em_tot;
a_obs		= a  + em_a;
end;



// Initialisation values
initval;
c = 0;
i = 0;
pi = 0;
c_m = 0;
tau = 0;
v_m = 0;
c_d = 0;
pi_star = 0;
pi_m = 0;
x = 0;
tau_star = 0;
y_star = 0; 
v_x = 0;
s = 0;
y = 0;
pi_d = 0;
mc_d = 0;
mc_m = 0;
i_star = 0;
b_star = 0;
v_s = 0;
v_px = 0;
wp = 0;
//p = 0;
//p_star = 0;
a = 0;
n= 0;
end;

steady;
check;

//Priors Distributions
estimated_params;
        // Households and Firms
gamma,		normal_pdf,	3,	0.44;
eta,		normal_pdf,	2,	0.66;
phi,		normal_pdf,	2,	0.44;
omega,		beta_pdf,	0.3,	0.10;
delta,		normal_pdf,	1,	0.1;
delta_x,	normal_pdf,	1,	0.1;
theta_d,	beta_pdf,	0.75,	0.04;
theta_m,	beta_pdf,	0.75,	0.04;
psi,		normal_pdf,	0.01,	0.02;

phi_y,		normal_pdf,	0.5,	0.25;
phi_pi,		normal_pdf,	1.5,	0.29;
phi_i,		beta_pdf,	0.5,	0.25;

p_a,		beta_pdf,	0.5,	0.28;
p_s,		beta_pdf,	0.5,	0.28;
p_px,		beta_pdf,	0.5,	0.28;
p_x,		beta_pdf,	0.5,	0.28;
p_m,		beta_pdf,	0.5,	0.28;

p_ystar,	beta_pdf,	0.9,	0.05;
p_pistar,	beta_pdf,	0.8,	0.1;
p_istar,	beta_pdf,	0.8,	0.1;
       

	// Exogenous Shock Processes

stderr e_a, uniform_pdf,	,	,	0,	realmax;
stderr e_s, uniform_pdf,	,	,	0,	realmax;
stderr e_d, uniform_pdf,	,	,	0,	realmax;
stderr e_pi,uniform_pdf,	,	,	0,	realmax;
stderr e_px,uniform_pdf,	,	,	0,	realmax;
stderr e_x, uniform_pdf,	,	,	0,	realmax;
stderr e_m, uniform_pdf,	,	,	0,	realmax;
stderr e_i, uniform_pdf,	,	,	0,	realmax;

	// Exogenous International Shock Processes
stderr e_ystar,	 	 uniform_pdf,	,	,	0,	realmax;
stderr e_pistar,	 uniform_pdf,	,	,	0,	realmax;
stderr e_istar, 	 uniform_pdf,	,	,	0,	realmax;

	// Measurement Errors
stderr em_r,	 	 uniform_pdf,	,	,	0,	realmax;
stderr em_f,	 	 uniform_pdf,	,	,	0,	realmax;
stderr em_m,	 	 uniform_pdf,	,	,	0,	realmax;
stderr em_xs,	 	 uniform_pdf,	,	,	0,	realmax;
stderr em_im,	 	 uniform_pdf,	,	,	0,	realmax;
stderr em_tot,	 uniform_pdf,	,	,	0,	realmax;
stderr em_a,	 	 uniform_pdf,	,	,	0,	realmax;

      
end;

varobs ys_obs pis_obs is_obs i_obs ds_obs pi_obs y_obs_real  xs_obs im_obs	tot_obs a_obs;

estimation(
    datafile = SmallOEDSGE_RBA,
    first_obs = 6,
    mode_compute = 6,
    mh_replic=40000,
    mh_nblocks = 2,
    mh_jscale=.47,
    nograph,
    mh_init_scale = 0.92
);  





