Fixed integration tests related to simulation of backward models.

time-shift
Stéphane Adjemian (Scylla) 2017-09-30 16:44:23 +02:00
parent 6dde1b1ee7
commit f284169248
5 changed files with 17 additions and 67 deletions

View File

@ -250,7 +250,6 @@ MODFILES = \
stochastic-backward-models/solow_cd.mod \
stochastic-backward-models/solow_ces.mod \
stochastic-backward-models/solow_cd_with_steadystate.mod \
stochastic-backward-models/backward_linear.mod \
deterministic_simulations/purely_forward/ar1.mod \
deterministic_simulations/purely_forward/nk.mod \
deterministic_simulations/purely_backward/ar1.mod \

View File

@ -1,41 +0,0 @@
var y gdp gdp_pot g pi P rs;
varexo e_y e_g e_p;
parameters alpha_1 alpha_2 beta_1 beta_2 theta gamma_1 gamma_2 pi_tar g_ss rr_bar;
alpha_1 = 0.9;
alpha_2 = -0.1;
beta_1 = 0.8;
beta_2 = 0.1;
theta = 0.9;
gamma_1 = 1.5;
gamma_2 = 0.5;
pi_tar = 2;
g_ss = 0.005;
rr_bar = 1;
model(linear);
gdp = gdp_pot + y;
y = alpha_1*y(-1) + alpha_2*(rs - pi - rr_bar) + e_y;
gdp_pot = gdp_pot(-1) + g;
g = (1 - theta)*g_ss + theta*g(-1) + e_g;
pi = (1 - beta_1)*pi_tar + beta_1*pi(-1) + beta_2*y + e_p;
P = pi/400 + P(-1);
rs = rr_bar + pi_tar + gamma_1*(pi(-1) - pi_tar) + gamma_2*y(-1);
end;
histval;
gdp_pot(0) = 1;
P(0) = 1;
g(0) = g_ss;
pi(0) = pi_tar;
end;
oo_.steadystate = NaN(7,1);
oo_ = simul_backward_model(M_.endo_histval, 10, options_, M_, oo_, zeros(11,3));
err1 = norm(abs(oo_.endo_simul([1 4 5 7],2:end) - repmat([0 0.005 2 3]',1,10)));
err2 = norm(abs(oo_.endo_simul([2 3 6],2:end) - repmat(linspace(1.005,1.05,10),3,1)));
if err1 > 1e-14 || err2 > 1e-14;
error('Error in backward_linear.mod');
end;

View File

@ -54,4 +54,6 @@ shocks;
var e_n = 0.001;
end;
oo_ = simul_backward_nonlinear_model([], 5000, options_, M_, oo_);
initialconditions = dseries([1 1.02 1 1.02 1], 2000Q1, {'Efficiency'; 'EfficiencyGrowth'; 'Population'; 'PopulationGrowth'; 'PhysicalCapitalStock'});
simulations = simul_backward_model(initialconditions, 5000);

View File

@ -33,35 +33,31 @@ model;
PhysicalCapitalStock = (1-delta)*PhysicalCapitalStock(-1) + s*Output;
end;
histval;
Efficiency(0) = .5;
EfficiencyGrowth(0) = 1.00;
Population(0) = 1;
PopulationGrowth(0) = 1.04;
PhysicalCapitalStock(0) = 15;
end;
d = dseries([.5 1 1 1.04 15], 2000Q1, {'Efficiency'; 'EfficiencyGrowth'; 'Population'; 'PopulationGrowth'; 'PhysicalCapitalStock'});
LongRunEfficiency = M_.endo_histval(1)*M_.endo_histval(2)^(rho_x/(1-rho_x));
LongRunPopulation = M_.endo_histval(3)*M_.endo_histval(4)^(rho_n/(1-rho_n));
LongRunEfficiency = d.Efficiency*d.EfficiencyGrowth^(rho_x/(1-rho_x));
LongRunPopulation = d.Population*d.PopulationGrowth^(rho_n/(1-rho_n));
LongRunEfficiencyGrowth = EfficiencyGrowth_ss;
LongRunPopulationGrowth = PopulationGrowth_ss;
LongRunIntensiveCapitalStock = LongRunEfficiencyGrowth*LongRunPopulationGrowth*(s/(LongRunEfficiencyGrowth*LongRunPopulationGrowth-1+delta))^(1/(1-alpha));
LongRunIntensiveCapitalStock = (s/(LongRunEfficiencyGrowth*LongRunPopulationGrowth-1+delta))^(1/(1-alpha)); //LongRunEfficiencyGrowth*LongRunPopulationGrowth*
precision = 1e-6;
T = 5*floor(log(precision)/log(max(rho_x, rho_n)));
oo_ = simul_backward_model(M_.endo_histval, T, options_, M_, oo_, zeros(T+1,2));
e = dseries(zeros(T, 2), 2000Q2, {'e_x'; 'e_n'});
if abs(oo_.endo_simul(1,end)-LongRunEfficiency)>1e-10
simulations = simul_backward_model(d, T, e);
if abs(simulations.Efficiency.data(end)-LongRunEfficiency.data)>1e-10
error('Wrong long run level!')
end
if abs(oo_.endo_simul(3,end)-LongRunPopulation)>1e-10
if abs(simulations.Population.data(end)-LongRunPopulation.data)>1e-10
error('Wrong long run level!')
end
IntensiveCapitalStock = oo_.endo_simul(6,1:end)./(oo_.endo_simul(1,1:end).*oo_.endo_simul(3,1:end));
IntensiveCapitalStock = simulations.PhysicalCapitalStock/(simulations.Efficiency*simulations.Population);
if abs(IntensiveCapitalStock(end)-LongRunIntensiveCapitalStock>1e-10)
error('Wrong long run level!')
if abs(IntensiveCapitalStock.data(end)-LongRunIntensiveCapitalStock)>1e-3
error('Wrong long run level!')
end

View File

@ -35,17 +35,11 @@ model;
PhysicalCapitalStock = (1-delta)*PhysicalCapitalStock(-1) + s*Output;
end;
histval;
Efficiency(0) = 1;
EfficiencyGrowth(0) = 1.02;
Population(0) = 1;
PopulationGrowth(0) = 1.02;
PhysicalCapitalStock(0) = 1;
end;
d = dseries([1 1.02 1 1.02 1], 2000Q1, {'Efficiency'; 'EfficiencyGrowth'; 'Population'; 'PopulationGrowth'; 'PhysicalCapitalStock'});
shocks;
var e_x = 0.005;
var e_n = 0.001;
end;
oo_ = simul_backward_nonlinear_model([], 5000, options_, M_, oo_);
simulations = simul_backward_model(d, 5000);