% The RBC Model with informal sector

% Informal goods: consumption only
% Formal goods: consumption and investment
% GHH Preference

close all;

%----------------------------------------------------------------------
%1. Defining Variables
%----------------------------------------------------------------------

var  tau kappa U Y Y_f Y_i C_f C_i d K H h_f h_i lambda x r A_f A_i tb ca G p  C ;

%varexo_det kappa tau;
varexo ef ei eg ekappa etau;

parameters  alpha etta beta theta gamma sigma r_star R rho_f rho_i sigma_f sigma_i sigma_g sigma_kappa d_bar phi delta  G_ss rho_G omega rho_tau sigma_tau rho_kappa tau_ss kappa_ss;

%----------------------------------------------------------------------
% 2. Calibration
% Taken from Ihrig & Moe 2004 and Mitra 2013
%----------------------------------------------------------------------

alpha = 0.70;  %formal good share of utility
beta = 0.96;  %discount rate

%elasticity of formal output wrt laborgov
theta = 0.43;
etta = 0;

%elasticity of informal output wrt labor
gamma = .495;

sigma = 1.5;
r_star = 0.04;
R = 0.00742;

%data from J. Fernandez's model
rho_f = 0.90;
rho_i = 0.64;
sigma_f = 0.10;
sigma_i = 0.10;
sigma_g = 0.10;
sigma_kappa = 0.10;

phi = 0.028 ;  %coefficient of capital adjustment
delta = 0.1; %capital depreciation

omega = 1.4556789;

G_ss = 0.20;
rho_G = 0.8;
kappa_ss = 0.25;
rho_kappa = .8;

rho_tau = .8;
sigma_tau = .10;
tau_ss = .2;
%----------------------------------------------------------------------
%3. Model
%----------------------------------------------------------------------

model;

C = C_f^(alpha)*C_i^(1-alpha);

Y = Y_f + p*Y_i;

U = ((C_f^alpha*C_i^(1-alpha)-((h_f+h_i)^omega)/omega)^(1-sigma)-1)/(1-sigma);

lambda = lambda(+1)*beta*(1+r);

alpha*(C_i/C_f)^(1-alpha)*(C_f^(alpha)*C_i^(1-alpha)-((h_f + h_i)^omega)/omega)^(-sigma) = lambda;

(1-alpha)*(C_f/C_i)^(alpha)*(C_f^(alpha)*C_i^(1-alpha)-((h_f + h_i)^omega)/omega)^(-sigma) = p*lambda;

(h_f + h_i)^(omega-1)*(C_f^(alpha)*C_i^(1-alpha)-((h_f + h_i)^omega)/omega)^(-sigma) = (1-tau)*lambda*theta*Y_f/h_f;

(h_f + h_i)^(omega-1)*(C_f^(alpha)*C_i^(1-alpha)-((h_f + h_i)^omega)/omega)^(-sigma) = (1-tau*kappa)*lambda*p*gamma*Y_i/h_i;

lambda*(1+phi*(K-K(-1))) = lambda(+1)*beta*((1-tau)*(1-theta)*Y_f(+1)/K+1-delta+phi*(K(+1)-K));

r = r_star + R*(exp(d-d_bar)- 1);

d = (1+r(-1))*d(-1)-Y_f-p*Y_i+C_f+p*C_i + x+(phi/2)*(K-K(-1))^2+(1-etta)*G;

Y_f = exp(A_f)*h_f^theta*K(-1)^(1-theta) +etta*G ;

Y_i = exp(A_i)*h_i^(gamma);

x = K - (1-delta)*K(-1);

tau*kappa*p*1.5*Y_i + tau*Y_f = G;

%g_1 + g_2 = G;

h_f + h_i = H;

Y_i = C_i ;

tb = Y_f - C_f - (1-etta)*G - x - (phi/2)*(K)^2+phi*K*K(-1)-(phi/2)*K(-1)^2;

ca = -(d-d(-1));

A_f = rho_f*A_f(-1)+ ef;
A_i = rho_i*A_i(-1) + ei;

%G-G_ss = rho_G*(G(-1)-G_ss)+eg;

kappa-kappa_ss = rho_kappa*(kappa(-1)-kappa_ss)+ekappa;

tau - tau_ss = rho_tau*(tau(-1)-tau_ss) - etau;

end;

%------------------------------------------------------------------
% 4. Computation
%------------------------------------------------------------------

G_ss = .1;

p_ss = 1.5;
h_ss = 1.1;
d_bar = 0.007442;
d_ss = d_bar

initval;

tau    		= 0.2;
kappa  		 =0.25;
U      =		 -1.28132;
Y      	=	 2.51114;
Y_f    	=	 2.01664;
Y_i    	=	 0.382547;
C_f    	=	 0.918351;
C_i    	=	 0.382547;
d      	=	 0.210071;
K      	=	 6.49121;
H      	=	 0.571717;
h_f    	=	 0.428188;
h_i    	=	 0.143529;
lambda 	=	 2.11278;
x      	=	 0.649121;
r      	=	 0.0416667;
A_f    	=	 0;
A_i    	=	 0;
tb     	=	 0.00875296;
ca     	=	 0;
G      	=	 0.440415;
p      	=	 1.29264;
C      	=	 0.67592;

end;
G_ss = .1;

p_ss = 1.5;
h_ss = 1.1;
d_bar = 0.007442;
d_ss = d_bar

shocks;

%var ef = (sigma_f)^2;
%var ei = (sigma_i)^2;
%var eg = (sigma_g)^2;
var ekappa  = (sigma_kappa)^2;
var etau = (sigma_tau)^2;

%var kappa;
%periods 10:19;
%values .5;
end;

steady;

check;

stoch_simul(hp_filter = 100, order = 1, irf = 100) Y Y_f Y_i C C_f C_i H h_f h_i tb ca d r K x G U p tau kappa;

%forecast (periods = 100);











