From 535fa1a7215c8b12b9b2f593729a543e24c8e998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Tue, 6 Dec 2016 22:57:12 +0100 Subject: [PATCH] Added integration test... For nonlinear simul_backward_model. Use a Solow model with varying growth rates of efficiency and population. --- tests/Makefile.am | 1 + .../solow_cd_with_steadystate.mod | 67 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 tests/stochastic-backward-models/solow_cd_with_steadystate.mod diff --git a/tests/Makefile.am b/tests/Makefile.am index 77a506684..d327d07e8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -240,6 +240,7 @@ MODFILES = \ ep/linearmodel1.mod \ 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 \ diff --git a/tests/stochastic-backward-models/solow_cd_with_steadystate.mod b/tests/stochastic-backward-models/solow_cd_with_steadystate.mod new file mode 100644 index 000000000..da0bb1e8d --- /dev/null +++ b/tests/stochastic-backward-models/solow_cd_with_steadystate.mod @@ -0,0 +1,67 @@ +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.00; // Do not change this calibration +PopulationGrowth_ss = 1.00; // Do not change this calibration + +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; + +histval; + Efficiency(0) = .5; + EfficiencyGrowth(0) = 1.02; + Population(0) = 1; + PopulationGrowth(0) = 1.02; + PhysicalCapitalStock(0) = 1; +end; + +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)); +LongRunEfficiencyGrowth = EfficiencyGrowth_ss; +LongRunPopulationGrowth = PopulationGrowth_ss; +LongRunIntensiveCapitalStock = LongRunEfficiencyGrowth*LongRunPopulationGrowth*(s/(LongRunEfficiencyGrowth*LongRunPopulationGrowth-1+delta))^(1/(1-alpha)); + +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)); + +if abs(oo_.endo_simul(1,end)-LongRunEfficiency)>1e-10 + error('Wrong long run level!') +end + +if abs(oo_.endo_simul(3,end)-LongRunPopulation)>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)); + +if abs(IntensiveCapitalStock-LongRunIntensiveCapitalStock)>1e-6 + error('Wrong long run level!') +end