% ================================================================================
% Project: "Oil Prices and Trend Growth"
% Authors: Carlos de Resende and Philipp Maier
% Purpose of this code: model simulation / estimation
% by Carlos de Resende (July, 2008) 
% ================================================================================

% periods 10000;

% Declare variables
% =================
var xt, yhat, gTt, pt, st, pit, piTt, Rt,
    Rstar, pistar, ystar, gt, rr, rrstar, Rn,
    obsR, obsystar, obss, obspi, obsp, obspistar, obsRstar, obsyUS, mu;%, obspiT;


% Declare shocks
% ==============
varexo eg, v, ep, eps, eR, emu, eystar, epistar, eRstar, epiT; 

% Declare parameters
% ==================
parameters  rhog, rhopiT, rhop, rhopistar, rhoRstar, rhoystar, rhomu,
            lambdag, alpha, betay, betapi, betapi2, betap,
            gammap, gammay, gammar, gammas, gammaystar, rhoR, rhopi, rhoy,
            gTss, pss, piss, piTss, Rss, pistarss, Rstarss, ystarss,
            yhatss, xss, sss, g, gss, rrss, rrstarss, muss, Rnss;



 
% Parameter calibration 1: Parameters to be estimated 
% ===================================================
rhog        = 0.4000; % GDP trend growth rate:           persistence
sigmag      = 0.0070; % GDP trend growth rate:           volatility
rhopiT      = 0.9900; % target inflation rate:           persistence
sigmapiT    = 0.0001; % target inflation rate:           volatility
rhop        = 0.7500; % oil price shock:                 persistence
sigmap      = 0.1200; % oil price shock:                 volatility
rhopistar   = 0.2200; % foreign inflation rate:          persistence
sigmapistar = 0.0040; % foreign inflation rate:          volatility
rhoRstar    = 0.8000; % foreign nominal interest rate:   persistence
sigmaRstar  = 0.0010; % foreign nominal interest rate:   volatility
rhoystar    = 0.8000; % foreign output:                  persistence
sigmaystar  = 0.0070; % foreign output:                  volatility
rhomu       = 0.7500; % UIP shock:                       persistence
sigmamu     = 0.0060; % UIP shock:                       volatility

sigmav     = 0.0050;  % Phillips curve (supply) shock:   volatility
sigmaeps   = 0.0001;  % IS curve (demand) shock:         volatility
sigmaR     = 0.0020;  % Monetary policy shock:           volatility

lambdag    = -0.0121; % GDP trend growth rate:   sensitivy to oil prices

betay      = 0.005;   % Phillips curve:          output gap parameter
betapi     = 0;       % Phillips curve:          past inflation parameter
betapi2    = 0;       % Phillips curve:          expected inflation parameter
betap      = 0;%0.005;   % Phillips curve:          oil prices parameter

gammay     = 0;       % IS curve:                past output gap parameter
gammar     = -0.25;   % IS curve:                real interest rate parameter
gammas     = 0.050;   % IS curve:                real exchange rate parameter
gammaystar = 0.200;   % IS curve:                foreign output parameter
gammap     = 0.000;   % IS curve:                past output gap parameter

rhoR       = 0.8000;  % mon. policy rule:        smoothing
rhopi      = 0.1000;  % mon. policy rule:        reaction to inflation
rhoy       = 0.3000;  % mon. policy rule:        reaction to output gap

% Parameter calibration (Steady-State values)
% ===========================================
rrss      = 1/0.991;    % real interest rate
gTss      = 0.007673;   % GDP treng growth
gss       = gTss;       % Actual (observable) GDP growth
pss       = 1;          % oil prices (real, relative to CPI, normalized to 1) 
piss      = 1.011442;   % domestic inflation rate 
piTss     = piss;       % domestic target for the inflation rate
Rss       = piss*rrss;  % domestic nominal interest rate
pistarss  = 1.011228;   % foreign inflation rate 
Rstarss   = 1.018422;   % foreign nominal interest rate
yhatss    = 0;          % output gap excluding irregular component
xss       = exp(yhatss);% output gap including irregular component

muss      = 1 - (Rss/piss)*(pistarss/Rstarss); % UIP shock
rrstarss  = Rstarss/pistarss;                  % foreign real interest rate

g         = gTss - (lambdag/(1-rhog))*pss;
ystarss   = 1;
sss       = -(gammar/gammas)*(Rss/piss) - ((gammaystar*ystarss+gammap)/gammas); 
alpha     = 1-betapi-betapi2-betay-betap;     % Phillips curve: intercept

Rnss      = Rss;

% The Model: system of equations
% ==============================

model;

Rn = rrss*piTt; % Rn = Rss

xt = exp(yhat);

gTt = (1-rhog)*g + rhog*gTt(-1) + lambdag*pt + eg;

1 + gt = (1 + gTt) * (xt/xt(-1));

pit/piTt = alpha + betay*exp(yhat) + betapi*(pit(-1)/piTt(-1)) + betapi2*(pit(+1)/piTt(+1)) + betap*pt + v;

yhat = gammay*yhat(-1) + gammar*(Rt/pit(+1)) + gammas*st + gammaystar*ystar + gammap*pt + eps;

Rt/Rn =(Rt(-1)/Rn)^rhoR*(pit/piTt)^rhopi*(xt)^rhoy*exp(eR);

rr = Rt/pit(+1);
rrstar = Rstar/pistar(+1);

st(+1)/st = (rr/rrstar) + mu;

log(piTt)   = (1-rhopiT)*log(piTss)+ rhopiT*log(piTt(-1)) + epiT;
log(pt)     = (1-rhop)*log(pss) + rhop*log(pt(-1)) + ep;
log(pistar) = (1-rhopistar)*log(pistarss) + rhopistar*log(pistar(-1)) + epistar;
log(Rstar)  = (1-rhoRstar)*log(Rstarss) + rhoRstar*log(Rstar(-1)) + eRstar;
log(ystar)  = (1-rhoystar)*log(ystarss) + rhoystar*log(ystar(-1)) + eystar;

mu   = (1-rhomu)*muss + rhomu*mu(-1) + emu;

% observed data
% -------------
obspi    = log(pit)    - log(piTt);
obsp     = log(pt)     - log(pss);
obsR     = log(Rt)     - log(Rn);    % deviations wrt Rn = rr*piTt or Rn = Rss
obspistar= log(pistar) - log(pistarss);
obsRstar = log(Rstar)  - log(Rstarss);
obsystar = log(ystar)  - log(ystarss);
obsyUS   = log(ystar)  - log(ystarss);
obss     = log(st)     - log(sss);

%obspiT   = log(piTt)   - log(piTss);

end;

% Initial values = SS values
% ==========================

initval;

xt = xss; yhat = yhatss; gTt = gss; mu = muss; pt = pss; 
pit  = piss;  gt = gss; Rt = Rss; st = sss; piTt = piTss; 
rrstar = rrstarss; rr = rrss; ystar = ystarss;
Rstar = Rstarss; pistar = pistarss; Rn = Rnss;

eg = 0.00; v = 0.00; ep = 0.00; eps = 0.00; 
eR = 0.00; emu = 0.00; eystar = 0.00;
epistar = 0.00; eRstar = 0.00; epiT = 0.00; 

obsR = 0.00; obsp = 0.00;
obsystar = 0.00; obss = 0.00; obspi = 0.00;
obspistar = 0.00; obsRstar = 0.00;  obsyUS = 0.00; %obspiT = 0.00;

end;



% Shock processes
% ===============

shocks;

var epiT;    stderr sigmapiT;
var eg;      stderr sigmag;
var v;       stderr sigmav;
var ep;      stderr sigmap;
var eps;     stderr sigmaeps;
var eR;      stderr sigmaR;
var emu;     stderr sigmamu;
var epistar; stderr sigmapistar;
var eRstar;  stderr sigmaRstar;
var eystar;  stderr sigmaystar;

end;


% rand('state',0)
check;
steady;
stoch_simul(periods=1000,irf=10);


//
% Estimation
% ==========

% estimated_params;
% 
% % 1) Monetary policy rule:
% % ------------------------
% rhopi,  0.1, 0.01, 1;
% rhoy,   0.3, 0.01, 1;
% rhoR,   0.8, 0.01, 1;
% 
% % 2) AR coefficients (** = calibrated):
% % -------------------------------------
% rhop,       0.75;                % relative price of oil
% rhog,       0.40;                % trend growth
% rhoystar,   0.80;                % foreign output
% rhopistar,  0.22;                % foreign inflation
% rhoRstar,   0.80;                % foreign interest rate
% rhomu,      0.75;                % UIP shock 
% 
% %rhopiT,     0.8530, 0.001, 0.999;  % inflation target **
% 
% 
% % 3) Phillips Curve:
% % ------------------
% betay,     0.0050, 0.0001, 5.000; 
% %betap,     0.0050, 0.004, 0.006; 
% %betapi2,   0.0000,  0.000, 5.000; 
% %betapi,    0.0000;%, -0.999, 0.999;
% 
% 
% % 4) IS Curve (** = calibrated):
% % ------------------------------
% gammar,     -0.2500, -5.000, -0.0001;
% gammas,      0.0500,  0.001,  5.000; 
% gammaystar,  0.2000,  0.001,  5.000;  
% %gammap,      0.0010;%,  0.001,  5.000;  
% 
% %gammay,      0.001,  0.001,  0.999;
% 
% % 5) Sensitivity of trend growth to oil prices:
% % ---------------------------------------------
% lambdag,    -0.0121;  
% 
% % 6) standard deviations  (** = calibrated):
% % ------------------------------------------
% stderr ep,       0.1200, 0.001, 0.5;
% stderr eg,       0.0100, 0.001, 0.5;
% stderr v,        0.0050, 0.001, 0.5;
% stderr eR,       0.0020, 0.001, 0.5;
% stderr eystar,   0.0070, 0.001, 0.5;
% stderr epistar,  0.0040, 0.001, 0.5; 
% stderr eRstar,   0.0010, 0.001, 0.5;
% stderr emu,      0.0060, 0.001, 0.5;
% 
% %stderr eps,      0.0001, 0.000, 0.5; % **
% %stderr epiT,     0.0001, 0.000, 0.5; % **
% 
% muss, -0.0020; 
% end;
% 
% 
% estimated_params_init;
%          rhopi, 0.0947;
%           rhoy, 0.2957;
%           rhoR, 0.8034;
%           rhop, 0.7474;
%           rhog, 0.4228;
%       rhoystar, 0.8200;
%      rhopistar, 0.2195;
%       rhoRstar, 0.8297;
%          rhomu, 0.7629;
%          betay, 0.0050;
%         betapi, 0.0040;
%         gammar, -0.2247;
%         gammas, 0.0612;
%     gammaystar, 0.1628;
%        lambdag, -0.0121;
% 
%          ep, 0.1202;
%          eg, 0.0073;
%           v, 0.0054;
%          eR, 0.0020;
%      eystar, 0.0074;
%     epistar, 0.0042;
%      eRstar, 0.0014;
%         emu, 0.0059;
% end;
% 
% 
% %oo_.mle_mode.parameters  oo_.mle_mode.shocks_std
% 
% varobs gt obspi obsp obsR obss obsyUS obsRstar obspistar; % obspiT;
% 
% % estimation(datafile=CAN_data_input,nobs=149,periods=149,mode_check); 
% estimation(datafile=CAN_data_input,nobs=149,mode_check); 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% %stoch_simul(order=1,irf=20, periods = 149) yhat gt gTt pit Rt rr st; 
% 
% %varexo ey, eg, v, ep, eps, eR, emu, eystar, epistar, eRstar, epiT; 
% 
% % Save inpulse responses
% % ======================
% 
% % Growth shocks
% %mat_eg=[yhat_eg pit_eg];
% 
% % Oil price shocks
% %mat_ep=[yhat_ep gt_ep gTt_ep pit_ep Rt_ep rr_ep st_ep];
% 
% 
% 
% %forecast yhat gt gTt pit piTt;
% 
% //
% 

