dynare/tests/ecb/backward-models/solow_irf.mod

106 lines
2.9 KiB
Modula-2

close all
var Efficiency $A$
EfficiencyGrowth $X$
Population $L$
PopulationGrowth $N$
Output $Y$
PhysicalCapitalStock $K$ ;
varexo e_x $\varepsilon_x$
e_n $\varepsilon_n$;
parameters alpha $\alpha$
delta $\delta$
s $s$
rho_x $\rho_x$
rho_n $\rho_n$
EfficiencyGrowth_ss $X^{\star}$
PopulationGrowth_ss $N^{\star}$ ;
alpha = .33;
delta = .02;
s = .20;
rho_x = .90;
rho_n = .95;
EfficiencyGrowth_ss = 1.0;
PopulationGrowth_ss = 1.0;
model;
Efficiency = EfficiencyGrowth*Efficiency(-1);
EfficiencyGrowth/EfficiencyGrowth_ss = (EfficiencyGrowth(-1)/EfficiencyGrowth_ss)^(rho_x)*exp(e_x);
Population = PopulationGrowth*Population(-1);
PopulationGrowth/PopulationGrowth_ss = (PopulationGrowth(-1)/PopulationGrowth_ss)^(rho_n)*exp(e_n);
Output = PhysicalCapitalStock(-1)^alpha*(Efficiency*Population)^(1-alpha);
PhysicalCapitalStock = (1-delta)*PhysicalCapitalStock(-1) + s*Output;
end;
shocks;
var e_x = 0.005;
var e_n = 0.001;
end;
/*
** FIRST APPROACH (PASS A DSERIES OBJECT FOR THE INITIAL CONDITION)
*/
// Define a dseries object.
ds = dseries(repmat([1, .5, 1, .5, 0, 1], 10, 1), 1990Q1, M_.endo_names, M_.endo_names_tex);
// Alternatively we could build this object with a stochastic simulation of the model.
//oo_ = simul_backward_model(rand(6,1), 10, options_, M_, oo_);
// Set the initial condition for the IRFs using observation 1991Q1 in ds.
set_historical_values ds 1991Q1;
// Define the shocks for which we want to compute the IRFs
listofshocks = {'e_x', 'e_n'};
// Define the variables for which we want to compute the IRFs
listofvariables = {'Efficiency', 'Population', 'Output'};
// Compute the IRFs
irfs = backward_model_irf(1991Q1, listofshocks, listofvariables, 50); // 10 is the number of periods (default value is 40).
// Plot an IRF (shock on technology)
figure(1)
plot(irfs.e_x.Output)
legend('Output')
title('IRF (shock on the growth rate of efficiency)')
/*
** SECOND APPROACH (USE THE HISTVAL BLOCK FOR SETTING THE INITIAL CONDITION)
**
** In this case the first argument of the backward_model_irf routine is a date object (for specifying
** the period of the initial condition).
*/
histval;
Efficiency(0) = 1;
EfficiencyGrowth(0) = .5;
Population(0) = 1;
PopulationGrowth(0) = .5;
PhysicalCapitalStock(0) = 1;
end;
// Define the shocks for which we want to compute the IRFs
listofshocks = {'e_x', 'e_n'};
// Define the variables for which we want to compute the IRFs
listofvariables = {'Efficiency', 'Population', 'Output'};
// Compute the IRFs
irfs = backward_model_irf(1991Q1, listofshocks, listofvariables, 50); // 10 is the number of periods (default value is 40).
// Plot an IRF (shock on technology)
figure(2)
plot(irfs.e_x.Output)
legend('Output')
title('IRF (shock on the growth rate of efficiency)')
/* REMARK
** ------
**
** This model is nonlinear and non stationary. For different initial conditions the IRFs may look quite different.
*/