% 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 lY lY_f lY_i lC_f lC_i d lK lH lh_f lh_i llambda lx r A_f A_i tb ca G p lC ;

var  tau kappa lY lY_f lY_i lC_f lC_i ld lK lH lh_f lh_i llambda lx r A_f A_i lG tb ca lp  lC ;


%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);

exp(lC) = exp(lC_f)^(alpha)*exp(lC_i)^(1-alpha);

%Y = Y_f + p*Y_i;

exp(lY)= exp(lY_f)+exp(lp)*exp(lY_i);
 

%lambda = lambda(+1)*beta*(1+r);
exp(llambda) = exp(llambda(+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;

alpha*(exp(lC_i)/exp(lC_f))^(1-alpha)*(exp(lC_f)^(alpha)*exp(lC_i)^(1-alpha)-((exp(lh_f)+exp(lh_i))^(omega))/omega)^(-sigma) = exp(llambda);


%(1-alpha)*(C_f/C_i)^(alpha)*(C_f^(alpha)*C_i^(1-alpha)-((h_f + h_i)^omega)/omega)^(-sigma) = p*lambda;

(1-alpha)*(exp(lC_f)/exp(lC_i))^(alpha)*(exp(lC_f)^(alpha)*exp(lC_i)^(1-alpha)-((exp(lh_f) + exp(lh_i))^(omega))/omega)^(-sigma) = exp(lp)*exp(llambda);


%(1-alpha)*(C_f/C_i)^(alpha)*(C_f^(alpha)*C_i^(1-alpha)-((h_f + h_i)^omega)/omega)^(-sigma) = p*lambda;

(1-alpha)*(exp(lC_f)/exp(lC_i))^(alpha)*(exp(lC_f)^(alpha)*exp(lC_i)^(1-alpha)-((exp(lh_f) + exp(lh_i))^(omega))/omega)^(-sigma) = exp(lp)*exp(llambda);

%(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;

(exp(lh_f) + exp(lh_i))^(omega-1)*(exp(lC_f)^(alpha)*exp(lC_i)^(1-alpha)-((exp(lh_f) + exp(lh_i))^(omega))/omega)^(-sigma) = (1-(tau)*(kappa))*exp(llambda)*exp(lp)*gamma*exp(lY_i)/exp(lh_i);

%lambda*(1+phi*(K-K(-1))) = lambda(+1)*beta*((1-tau)*(1-theta)*Y_f(+1)/K+1-delta+phi*(K(+1)-K));

exp(llambda)*(1+phi*(exp(lK)-exp(lK(-1)))) = exp(llambda(+1))*beta*((1-(tau))*(1-theta)*exp(lY_f(+1))/exp(lK)+1-delta+phi*exp((lK(+1))-exp(lK)));

%r = r_star + R*(exp(d-d_bar)- 1);

r = r_star + R*(exp(exp(ld)-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;

exp(ld) = (1+(r(-1)))*exp(ld(-1))-exp(lY_f)-exp(lp)*exp(lY_i)+exp(lC_f)+exp(lp)*exp(lC_i) + exp(lx)+(phi/2)*(exp(lK)-exp(lK(-1)))^(2)+(1-etta)*exp(lG);

%Y_f = exp(A_f)*h_f^theta*K(-1)^(1-theta) +etta*G ;

exp(lY_f) = exp(A_f)*exp(lh_f)^(theta)*exp(lK(-1))^(1-theta) ;

%Y_i = exp(A_i)*h_i^(gamma);

exp(lY_i) = exp(A_i)*exp(lh_i)^(gamma);

%x = K - (1-delta)*K(-1);

exp(lx) = exp(lK) - (1-delta)*exp(lK(-1));

%tau*kappa*p*1.5*Y_i + tau*Y_f = G;

tau*kappa*exp(lp)*exp(lY_i) + tau*exp(lY_f) = exp(lG);


%h_f + h_i = H;

exp(lh_f) + exp(lh_i) = exp(lH);

%Y_i = C_i ;

exp(lY_i) = exp(lC_i) ;

%tb = Y_f - C_f - (1-etta)*G - x - (phi/2)*(K)^2+phi*K*K(-1)-(phi/2)*K(-1)^2;

exp(tb) = exp(lY_f) - exp(lC_f) - (1-etta)*exp(lG) - exp(lx) - (phi/2)*(exp(lK))^2+phi*exp(lK)*exp(lK(-1))-(phi/2)*exp(lK(-1))^2;

%ca = -(d-d(-1));

exp(ca) = -(exp(ld)-exp(ld(-1)));

%A_f = rho_f*A_f(-1)+ ef;
%A_i = rho_i*A_i(-1) + ei;

(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 = log(1.5);
h_ss = log(1.1);
d_bar = log(0.007442);
d_ss = d_bar;

initval;

tau    		= 0.2;
kappa  		 =0.25;
%U      =		 -1.28132;
lY      	=	log(2.87263);
lY_f    	=	 log(2.87263);
lY_i    	=	 log(0.374144);
lC_f    	=	 log(1.10319);
lC_i    	=	 log(0.374144);
ld      	=	 log(d_ss);
lK      	=	 log(7.72465);
lH      	=	 log(0.646782);
lh_f    	=	 log(0.509551);
lh_i    	=	 log(.137231);
llambda 	=	 log(1.77451);
lx      	=	 log(0.772465);
r      	=	 0.0416667;
A_f    	=	 0;
A_i    	=	 0;
%%tb     	=	 0.00875296;
%ca     	=	 0;
lG      	=	 log(G_ss);
lp      	=	 log(p_ss);
lC      	=	 log(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) lY lY_f lY_i lC lC_f lC_i lH lh_f lh_i ld r lK lx lp tau kappa;

%forecast (periods = 100);











