% Mendoza (1991) Model 
%
% Marcelo Olguín Ribera
% Torcuato Di Tella, March 18, 2010

%----------------------------------------------------------------
% 0. Housekeeping (close all graphic windows)
%----------------------------------------------------------------

close all;

%----------------------------------------------------------------
% 1. Defining variables
%----------------------------------------------------------------

var y c k i l A b lambda nu gamma;
varexo e;

parameters alpha rho phi r omega psi1 psi2 delta sigma;

%----------------------------------------------------------------
% 2. Calibration
%----------------------------------------------------------------

alpha   = 0.32;
rho     = 0.42;  
phi     = 0.028;
r       = 0.04;
omega   = 1.455;
psi1    = 2.00;
psi2    = 0.11;
delta   = 0.10;
sigma   = 0.0129;


%----------------------------------------------------------------
% 3. Model
%----------------------------------------------------------------

model; 
  
  lambda = (1+c-l^omega/omega)^(-psi2)*(1+r)*lambda(+1);         //F.O.C. Ld(+1)
  (c-l^omega/omega)^(1-psi1)/(c-l^omega/omega)+nu*(1+c-l^omega/omega)^(-psi2)*psi2/(1+c-l^omega/omega) = lambda;       //F.O.C. Lc
  nu = -((c(+1)-l(+1)^omega/omega)^(1-psi1)-1)/(1-psi1)+nu(+1)*(1+c(+1)-l(+1)^omega/omega)^(-psi2);        //F.O.C. Lgamma(+1)
  (c-l^omega/omega)^(1-psi1)*l^omega/(l*(c-l^omega/omega))+nu*(1+c-l^omega/omega)^(-psi2)*psi2*l^omega/(l*(1+c-l^omega/omega)) = lambda*A*k(-1)^alpha*l^(1-alpha)*(1-alpha)/l;      //F.O.C. Ll
  lambda*(1-phi*(k-k(-1))) = lambda(+1)*((1+c-l^omega/omega)^(-psi2))*(A(+1)*k^alpha*alpha*l(+1)^(1-alpha)/k+1-delta-phi*(k(+1)-k));         //F.O.C. Lk(+1)


  b(+1) = (1+r)*b-y+c+i;                            //F.O.C. lambda
  gamma(+1)=((1+c-l^omega/omega)^(-psi2))*gamma;    //F.O.C. nu  

  y = A*(k^alpha)*l^(1-alpha);                  //Eq. Technology
  i = k-(1-delta)*k(-1)+phi*(k-k(-1))^2;            //Eq. Investment
  log(A(+1)) = rho*log(A)+e;                        //Eq. Shock

end;

%----------------------------------------------------------------
% 4. Computation
%----------------------------------------------------------------

initval;
  k = 0.3977;
  c = 0;
  l = 0.12311;
  i = 0;
  b = -608.07;
  gamma=1;
  A = 1.00;
  e = 0;
  y = 0.59027;
end;

shocks;
var e = sigma^2;
end;

steady;
check;

//stoch_simul(order=1,periods=1000,irf=100);

stoch_simul(hp_filter = 1600, order = 1);

%----------------------------------------------------------------
% 5. Some Results
%----------------------------------------------------------------

//statistic1 = 100*sqrt(diag(oo_.var(1:6,1:6)))./oo_.mean(1:6);
//table('Relative standard deviations in %',strvcat('VARIABLE','REL. S.D.'),lgy_(1:6,:),statistic1,10,8,4);
