%Porto 2012, Replication of Greenwood and Wright 'Frontiers of Business cycle Research - chapter 6', 1995
%code by Joćo Ricardo M. G. costa Filho
close all;

%----------------------------------------------------------------------------------------------------------------------------------------------------------
% 1. Defining variables
%----------------------------------------------------------------------------------------------------------------------------------------------------------
var c cm ch y km hm kh hh w l r xm xh x zm zh;
    
varexo em eh;

parameters 
beta th tk deltam deltah theta eta hmbar hhbar rhom rhoh sigmam sigmah e
rbar kmbar ybar xmbar wbar lbar khbar xhbar xbar cmbar chbar phi psi kappa omega a cbar b;

%----------------------------------------------------------------------------------------------------------------------------------------------------------
% 2. Calibration/Steady State
%----------------------------------------------------------------------------------------------------------------------------------------------------------
beta=.9898;                                                                                                  %discount factor
th=0.35;                                                                                                     %tax rate on labor income
tk=0.70;                                                                                                     %tax rate on capital income
deltam=0.235;                                                                                                %market capital depreciation rate
deltah=0.235;                                                                                                %home capital depreciation rate
theta=0.2944;                                                                                                % 
eta=0.3245;                                                                                                  %exponent of home consumption function
hmbar=0.33;                                                                                                  %market hours
hhbar=0.25;                                                                                                  %home hours
rhom=0.95;                                                                                                   %ar coefficient of market technology
rhoh=0.95;                                                                                                   %ar coefficient of home technology
sigmam=0.7;                                                                                                  %market innovation standard deviation
sigmah=0.7;                                                                                                  %home innovation standard deviation
e=2/3; gamma=2/3;                                                                                            %model 2
%e=0.4; gamma=0;                                                                                             %model 3
rbar=(1/beta+deltam-1-tk*deltam)/(1-tk);                                                                     %equilibrium interest rate
kmbar=hmbar*(theta/rbar)^(1/(1-theta));                                                                      %equilibrium market capital stock
ybar=kmbar*(rbar/theta);                                                                                     %equilibrium output
xmbar=deltam*kmbar;                                                                                          %equilibrium market investment
wbar=(ybar/hmbar)*(1-theta);                                                                                 %equilibrium wage
lbar=1-hmbar-hmbar;                                                                                          %equilibrium leisure
khbar=((1/(hhbar^(2-eta))*wbar)*((1-eta)/(1-th))*((1-beta*(1-deltah))/(eta+beta*eta)))^(1/(eta-1));          %equilibrium home capital stock
xhbar=deltah*khbar;                                                                                          %equilibrium home investment
xbar=xmbar+xhbar;                                                                                            %equilibrium total investment
cmbar=ybar-xbar;                                                                                             %equilibrium market consumption
chbar=(khbar^eta)*(hhbar^(1-eta));                                                                           %equilibrium home-produced-goods consumption
phi=(cmbar^(e-1))*wbar*(1-th);                                                                               %auxiliary variable
psi=1/lbar;                                                                                                  %auxiliary variable
kappa=(chbar^(e-1))*(1-eta);                                                                                 %auxiliary variable
omega= hhbar/lbar;                                                                                           %auxiliary variable
a=kappa*psi/(phi*omega+kappa*psi);                                                                           %market consumption weight on total consumption
cbar=(a*cmbar^e+(1-a)*chbar^e)^(1/e);                                                                        %equilibrium total consumption
b=(psi*cbar^e)/(a*phi+psi*cbar^e);                                                                           %
%----------------------------------------------------------------------------------------------------------------------------------------------------------
% 3. Model 
%----------------------------------------------------------------------------------------------------------------------------------------------------------
model(linear); 

c=(cbar^-e)*(a*(cmbar^e)*cm+(1-a)*(chbar^e)*ch);                                                                               
y=theta*km(-1)+(1-theta)*zm+(1-theta)*hm;                                                                                                  
ch=eta*kh(-1)+(1-eta)*zh+(1-eta)*hh;                                                                                               
zm=rhom*zm(-1)+em;                                                                                                              
zh=rhoh*zh(-1)+eh;                                                                                                             
ybar*y=cmbar*cm+xbar*x;                                                                                                          
xmbar*xm=kmbar*(km-(1-deltam)*km(-1));                                                                                         
xhbar*xh=khbar*(kh-(1-deltah)*kh(-1));                                                                                          
xbar*x=xmbar*xm+xhbar*xh;                                                                                                       
(e-1)*cm+w-e*c=-l;                                                           
(e-1)*ch-e*c=hh-l;                                              
beta*((rbar*(1-tk)+tk*deltam+(1-deltam))*((e-1)*cm(+1)-e*c(+1))+(1-tk)*rbar*r(+1))=(e-1)*cm-e*c;  
-e*((1-a)*(chbar^e)*eta/khbar-a*(cmbar^(e-1)))*c+(1-a)*e*(ch^e)*(eta/khbar)*(ch-kh)-a*(e-1)*(cmbar^(e-1))*cm=beta*(e*c(+1)*(a*(cmbar^(e-1))*(1-deltah)+(1-a)*(chbar^e)*eta/khbar)-(1-deltah)*a*(e-1)*(cmbar^(e-1))*cm(+1)-(((1-a)*e*eta*chbar^e)/khbar)*(kh-eta*ch(+1)));
y-km(-1)=r;                   
y-hm=w;                   
lbar*l=-(hmbar*hm+hhbar*hh);                        

end;
%----------------------------------------------------------------------------------------------------------------------------------------------------------
shocks;
var em=sigmam^2;
var eh=sigmah^2;
corr em, eh=gamma;
end;

steady;

stoch_simul(ar=1,irf=100)  y cm ch hh hm;

%----------------------------------------------------------------
% 5. Some Results 
%----------------------------------------------------------------
%statistic1 = sqrt(diag(oo_.var(1:6,1:6)))./sqrt(oo_.var(1,1));

%table('Relative standard deviations in %',strvcat('VARIABLE','REL. S.D.'),var_list_(1:6,:),statistic1,10,8,4)