%--------------------------------------------------------------------------
% BGG model: Financial acccelerator in business cycle
% By CHEN Sihao
% 5th May 2013
%--------------------------------------------------------------------------

var premium y c i g ce n rk r q k x a h pi rn; % low case variables denote percentage deviations

varexo eM eG eA;% M for money, G for government, A for technology

parameters sigma alpha beta eta delta omega gamma epsilon psi R Rk S C_Y I_Y Ce_Y G_Y K_N Y_N X rhoA rhoG rho sigmaA sigmaG sigmaM nu mu theta kappa;

alpha=0.35; 
beta=0.99; 
eta=3; 
delta=0.025; 
omega=0.99; 
gamma=1-0.0272; 
X=1.1; 
mu=0.12;
theta=0.75; 
psi=0.25;
C_Y=0.61; 
I_Y=0.18; 
Ce_Y=0.01; 
G_Y=0.2; 
K_N=2.0; 
Y_N=0.28; 
rhoA=1; 
rhoG=0.95; 
rho=0.9; 
sigmaA=0.2; 
sigmaG=0.2;
sigmaM=0.3; 
sigma=0.11; 
nu=0;//In baseline model, nu=0, turn off the premium.in BGG model, nu=0.2, here we got the financial accelerator 
kappa=((1-theta)/theta)*(1-theta*beta);
epsilon=(1-delta)/((1-delta) + ((alpha/X)*(Y_N/K_N)));
R=1/beta;
Rk=R+0.02;


model(linear);
%aggregate demand
y = C_Y*c + I_Y*i + G_Y*g + Ce_Y*ce;       //same as equation 4.14
c = -r + c(+1);                             //4.15
ce = n;                                     //4.16
rk(+1) - r = -nu*(n -(q + k));              //4.17
rk = (1-epsilon)*(y - k(-1) - x) + epsilon*q - q(-1);//4.18
q = psi*(i-k(-1));                      //4.19

%aggregate supply
y = a + alpha*k(-1) + (1-alpha)*omega*h;    //4.20
y - h - x - c = (eta^(-1))*h;               //4.21
pi = kappa*(-x) + beta*pi(+1);            //4.22

%state variables
k = delta*i + (1-delta)*k(-1);                //4.23
n = gamma*R*K_N*(rk - r(-1)) + r(-1) + n(-1);  //4.24

%shock process
rn = rho*rn(-1) + sigma*pi(-1) - eM;           //4.25
g = rhoG*g(-1) + eG;                        //4.26
a = rhoA*a(-1) + eA;                        //4.27

%nominal interest rate
rn = r + pi(+1);

%premium
premium=rk(+1)-r;
end;

check;
steady;

shocks;
  var eG; stderr sigmaG;
  var eA; stderr sigmaA;
  var eM; stderr sigmaM;
end;

varobs y c i pi rn ;

estimated_params;


stderr eG,0.1387,0.000000000001,100,INV_GAMMA2_PDF,0.01,inf;
stderr eA,0.0036,0.000000000001,100,INV_GAMMA2_PDF,0.01,inf;
stderr eM,0.0038,0.000000000001,100,INV_GAMMA2_PDF,0.01,inf;

rhoG, ,.00000001,.99999999999,BETA_PDF,0.85,0.1;
rhoA, ,.00000001,.99999999999,BETA_PDF,0.85,0.1;
rho, ,.00000001,.99999999999,BETA_PDF,0.85,0.1;
end;

estimation(datafile=ABC,mh_replic=20000,mh_nblocks=2,mh_drop=0.45,mh_jscale=0.4) premium;

stoch_simul(order=1,irf=24);
         