131 lines
4.4 KiB
Modula-2
131 lines
4.4 KiB
Modula-2
// This program replicates figure 11.3.1 from chapter 11 of RMT2 by Ljungqvist and Sargent
|
|
// This is a commented version of the program given in the handout.
|
|
|
|
// Note: y_ records the simulated endogenous variables in alphabetical order
|
|
// ys0_ records the initial steady state
|
|
// ys_ records the terminal steady state
|
|
// We check that these line up at the end points
|
|
// Note: y_ has ys0_ in first column, ys_ in last column, explaining why it is 102 long;
|
|
// The sample of size 100 is in between.
|
|
|
|
// Warning: we align c, k, and the taxes to exploit the dynare syntax. See comments below.
|
|
// So k in the program corresponds to k_{t+1} and the same timing holds for the taxes.
|
|
|
|
//Declares the endogenous variables;
|
|
var c k;
|
|
//declares the exogenous variables // investment tax credit, consumption tax, capital tax, government spending
|
|
varexo taui tauc tauk g;
|
|
|
|
parameters bet gam del alpha A;
|
|
|
|
bet=.95; // discount factor
|
|
gam=2; // CRRA parameter
|
|
del=.2; // depreciation rate
|
|
alpha=.33; // capital's share
|
|
A=1; // productivity
|
|
|
|
// Alignment convention:
|
|
// g tauc taui tauk are now columns of ex_. Because of a bad design decision
|
|
// the date of ex_(1,:) doesn't necessarily match the date in y_. Whether they match depends
|
|
// on the number of lag periods in endogenous versus exogenous variables.
|
|
// In this example they match because tauc(-1) and taui(-1) enter the model.
|
|
|
|
// These decisions and the timing conventions mean that
|
|
// y_(:,1) records the initial steady state, while y_(:,102) records the terminal steady state values.
|
|
// For j > 2, y_(:,j) records [c(j-1) .. k(j-1) .. G(j-1)] where k(j-1) means
|
|
// end of period capital in period j-1, which equals k(j) in chapter 11 notation.
|
|
// Note that the jump in G occurs in y_(;,11), which confirms this timing.
|
|
// the jump occurs now in ex_(11,1)
|
|
|
|
model;
|
|
// equation 11.3.8.a
|
|
k=A*k(-1)^alpha+(1-del)*k(-1)-c-g;
|
|
// equation 11.3.8e + 11.3.8.g
|
|
c^(-gam)= bet*(c(+1)^(-gam))*((1+tauc(-1))/(1+tauc))*((1-taui)*(1-del)/(1-taui(-1))+
|
|
((1-tauk)/(1-taui(-1)))*alpha*A*k(-1)^(alpha-1));
|
|
end;
|
|
|
|
initval;
|
|
k=1.5;
|
|
c=0.6;
|
|
g = 0.2;
|
|
tauc = 0;
|
|
taui = 0;
|
|
tauk = 0;
|
|
end;
|
|
steady; // put this in if you want to start from the initial steady state, comment it out to start from the indicated values
|
|
|
|
endval; // The following values determine the new steady state after the shocks.
|
|
k=1.5;
|
|
c=0.4;
|
|
g =.4;
|
|
tauc =0;
|
|
taui =0;
|
|
tauk =0;
|
|
end;
|
|
|
|
steady; // We use steady again and the enval provided are initial guesses for dynare to compute the ss.
|
|
|
|
// The following lines produce a g sequence with a once and for all jump in g
|
|
shocks;
|
|
// we use shocks to undo that for the first 9 periods and leave g at
|
|
// it's initial value of 0
|
|
|
|
var g;
|
|
periods 1:9;
|
|
values 0.2;
|
|
end;
|
|
|
|
|
|
// now solve the model
|
|
simul(periods=100);
|
|
|
|
// Note: y_ records the simulated endogenous variables in alphabetical order
|
|
// ys0_ records the initial steady state
|
|
// ys_ records the terminal steady state
|
|
// check that these line up at the end points
|
|
y_(:,1) -ys0_(:)
|
|
y_(:,102) - ys_(:)
|
|
|
|
// Compute the initial steady state for consumption to later do the plots.
|
|
co=ys0_(var_index('c'));
|
|
ko = ys0_(var_index('k'));
|
|
// g is in ex_(:,1) since it is stored in alphabetical order
|
|
go = ex_(1,1)
|
|
|
|
// The following equation compute the other endogenous variables use in the plots below
|
|
// Since they are function of capital and consumption, so we can compute them from the solved
|
|
// model above.
|
|
|
|
// These equations were taken from page 333 of RMT2
|
|
rbig0=1/bet;
|
|
rbig=y_(var_index('c'),2:101).^(-gam)./(bet*y_(var_index('c'),3:102).^(-gam));
|
|
rq0=alpha*A*ko^(alpha-1);
|
|
rq=alpha*A*y_(var_index('k'),1:100).^(alpha-1);
|
|
wq0=A*ko^alpha-ko*alpha*A*ko^(alpha-1);
|
|
wq=A*y_(var_index('k'),1:100).^alpha-y_(var_index('k'),1:100).*alpha*A.*y_(var_index('k'),1:100).^(alpha-1);
|
|
sq0=(1-ex_(1,4))*A*alpha*ko^(alpha-1)+(1-del);
|
|
sq=(1-ex_(1:100,4)')*A*alpha.*y_(var_index('k'),1:100).^(alpha-1)+(1-del);
|
|
|
|
//Now we plot the responses of the endogenous variables to the shock.
|
|
|
|
figure
|
|
subplot(2,3,1)
|
|
plot([ko*ones(100,1) y_(var_index('k'),1:100)' ]) // note the timing: we lag capital to correct for syntax
|
|
title('k')
|
|
subplot(2,3,2)
|
|
plot([co*ones(100,1) y_(var_index('c'),2:101)' ])
|
|
title('c')
|
|
subplot(2,3,3)
|
|
plot([rbig0*ones(100,1) rbig' ])
|
|
title('R')
|
|
subplot(2,3,4)
|
|
plot([wq0*ones(100,1) wq' ])
|
|
title('w/q')
|
|
subplot(2,3,5)
|
|
plot([sq0*ones(100,1) sq' ])
|
|
title('s/q')
|
|
subplot(2,3,6)
|
|
plot([rq0*ones(100,1) rq' ])
|
|
title('r/q')
|