% RBC model: sub out w & r 
% J. Cross, 2016 

close all; clc;

%----------------------------------------------------------------
% 1. Preamble
%----------------------------------------------------------------
var Y C I K L Z eps_A;
predetermined_variables K;
varexo u;
parameters beta sigmaL delta alpha rho sigma_A
           Yss Css Iss Kss Lss Zss ;

%----------------------------------------------------------------
% 2. Calibration
%----------------------------------------------------------------

% Parameters
beta = 0.99;
sigmaL = 1.75;
delta = 0.02;
alpha = 0.33;
sigma_A = 1;
rho = 0.95;

% Steady state
Lss = 0.3;
Kss	= Lss*(alpha/((1/beta - 1 + delta)))^(1/(1-alpha));
Yss = Kss^alpha * Lss^(1-alpha);
Iss = delta*Kss;
Css = Yss - Iss;
Zss = 1 - Lss;

%----------------------------------------------------------------
% 3. Model
%----------------------------------------------------------------

model; 
%% Resource constraints
    exp(Y) = exp(C) + exp(I);
    exp(1) = exp(L) + exp (Z);

%% Household Equations:
    % Euler consumption
    exp(C)^(-1) = beta*(((exp(C(+1)))^(-1))*(alpha*exp(eps_A(+1))*exp(K(+1))^(alpha-1)*exp(L(+1))^(1-alpha) + 1 - delta));
    % Labor Supply
    exp(Z) = (sigmaL/((1-alpha)*exp(eps_A)*exp(K)^(alpha)*exp(L)^(-alpha)))*exp(C);
    % capital accumulation
    exp(K(+1)) = (1-delta)*exp(K) + exp(I);

%% Firms
    % Cobb-Douglas Production
    exp(Y) = exp(eps_A)*(exp(K))^alpha*(exp(L))^(1-alpha);

%% Shocks
eps_A = rho*eps_A(-1) + u;

end;

initval;
K = log(Kss);
C = log(Css);
L = log(Lss);
I = log(Iss);
Z = log(Zss);
eps_A = 0;
end;

check;
steady;

%----------------------------------------------------------------
% 4. Shocks
%----------------------------------------------------------------
shocks;
var u = sigma_A^2;
end;

%----------------------------------------------------------------
% 5. Computation
%----------------------------------------------------------------
stoch_simul(order=1,irf=100) Y C I K L Z; 