From dabe0ada331ad8ffd28fc556dfd5c36a58bfa878 Mon Sep 17 00:00:00 2001 From: Willi Mutschler <willi@mutschler.eu> Date: Thu, 7 Jan 2021 14:14:13 +0100 Subject: [PATCH] MoM: Add test for optimizers Note that mode_compute=11 and 12 need some fixing --- tests/Makefile.am | 1 + .../RBC/RBC_MoM_optimizer.mod | 146 ++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 tests/estimation/method_of_moments/RBC/RBC_MoM_optimizer.mod diff --git a/tests/Makefile.am b/tests/Makefile.am index 1b7929a582..cd60e04735 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -54,6 +54,7 @@ MODFILES = \ estimation/method_of_moments/RBC/RBC_MoM_Andreasen.mod \ estimation/method_of_moments/RBC/RBC_MoM_SMM_ME.mod \ estimation/method_of_moments/RBC/RBC_MoM_prefilter.mod \ + estimation/method_of_moments/RBC/RBC_MoM_optimizer.mod \ estimation/method_of_moments/AFVRR/AFVRR_M0.mod \ estimation/method_of_moments/AFVRR/AFVRR_MFB.mod \ estimation/method_of_moments/AFVRR/AFVRR_MFB_RRA.mod \ diff --git a/tests/estimation/method_of_moments/RBC/RBC_MoM_optimizer.mod b/tests/estimation/method_of_moments/RBC/RBC_MoM_optimizer.mod new file mode 100644 index 0000000000..08b1ed882f --- /dev/null +++ b/tests/estimation/method_of_moments/RBC/RBC_MoM_optimizer.mod @@ -0,0 +1,146 @@ +% Test optimizers +% +% Copyright (C) 2020-2021 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. +% ========================================================================= +% TO DO +% [ ] fix optimizers 11 and 12; +% note that 12 and 102 require GADS_Toolbox which is not available on servers, but need to be tested locally + +% Define testscenario +@#define orderApp = 2 + +% Note that we will set the numerical optimization tolerance levels very large to speed up the testsuite + +@#include "RBC_MoM_common.inc" + +shocks; +var u_a; stderr 0.0072; +end; + +varobs c iv n; + +%-------------------------------------------------------------------------- +% Method of Moments Estimation +%-------------------------------------------------------------------------- +matched_moments; +c; +n; +iv; +c*c; +c*iv; +iv*n; +iv*iv; +n*c; +n*n; +c*c(-1); +n*n(-1); +iv*iv(-1); +end; + +% reduce options to speed up testsuite +options_.newrat.maxiter = 10; +options_.newrat.tolerance.f = 1e-2; +options_.newrat.tolerance.f_analytic = 1e-2; + +options_.mh_jscale = 0.6; +options_.gmhmaxlik.iterations=1; +options_.gmhmaxlik.number=2000; +options_.gmhmaxlik.nclimb=2000; +options_.gmhmaxlik.nscale=2000; +options_.gmhmaxlik.target=0.5; + +options_.solveopt.MaxIter=300; +options_.solveopt.LBGradientStep=1e-3; +options_.solveopt.TolFun = 1e-3; +options_.solveopt.TolX = 1e-3; +options_.solveopt.TolXConstraint=1e-3; + + +@#for estimParams in [0, 1, 2] + clear estim_params_; + @#if estimParams == 0 + estimated_params; + %DELTA, 0.025; + %BETTA, 0.984; + %B, 0.5; + %ETAc, 2; + ALFA, 0.667; + RHOA, 0.979; + stderr u_a, 0.0072; + end; + @#define OPTIMIZERS = [1, 2, 3, 4, 5, 7, 8, 9, 10, 13, 101] + @#endif + + @#if estimParams == 1 + estimated_params; + %DELTA, , 0, 1; + %BETTA, , 0, 1; + %B, , 0, 1; + %ETAc, , 0, 10; + ALFA, , 0, 1; + RHOA, , 0, 1; + stderr u_a, , 0, 1; + end; + @#define OPTIMIZERS = [1, 2, 3, 4, 7, 8, 9, 10, 13, 101] + @#endif + + @#if estimParams == 2 + estimated_params; + %DELTA, 0.025, 0, 1, normal_pdf, 0.02, 0.5; + %BETTA, 0.98, 0, 1, beta_pdf, 0.90, 0.25; + %B, 0.45, 0, 1, normal_pdf, 0.40, 0.5; + %ETAl, 1, 0, 10, normal_pdf, 0.25, 0.0.1; + %ETAc, 1.8, 0, 10, normal_pdf, 1.80, 0.5; + ALFA, 0.65, 0, 1, normal_pdf, 0.60, 0.5; + RHOA, 0.95, 0, 1, normal_pdf, 0.90, 0.5; + stderr u_a, 0.01, 0, 1, normal_pdf, 0.01, 0.5; + %THETA, 3.48, 0, 10, normal_pdf, 0.25, 0.0.1; + end; + @#define OPTIMIZERS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 101] + @#endif + + estimated_params_init(use_calibration); + end; + + @#for optimizer in OPTIMIZERS + method_of_moments( + mom_method = GMM % method of moments method; possible values: GMM|SMM + , datafile = 'RBC_Andreasen_Data_2.mat' % name of filename with data + , order = @{orderApp} % order of Taylor approximation in perturbation + , weighting_matrix = ['OPTIMAL'] % weighting matrix in moments distance objective function; possible values: OPTIMAL|IDENTITY_MATRIX|DIAGONAL|filename. Size of cell determines stages in iterated estimation, e.g. two state with ['DIAGONAL','OPTIMAL'] + , nograph % do not create graphs (which implies that they are not saved to the disk nor displayed) + , mode_compute = @{optimizer} % specifies the optimizer for minimization of moments distance + @#if optimizer == 102 + , optim = ('TolFun' , 1D-3 % termination tolerance on the function value, a positive scalar + ,'MaxIter' , 300 % maximum number of iterations allowed, a positive integer + ,'MaxFunEvals' , 1D3 % maximum number of function evaluations allowed, a positive integer + ) + @#else + , optim = ('TolFun' , 1D-3 % termination tolerance on the function value, a positive scalar + ,'TolX' , 1e-3 % termination tolerance on x, a positive scalar + ,'MaxIter' , 300 % maximum number of iterations allowed, a positive integer + ,'MaxFunEvals' , 1D3 % maximum number of function evaluations allowed, a positive integer + ) + @#endif + %, silent_optimizer % run minimization of moments distance silently without displaying results or saving files in between + ); + @#endfor +@#endfor + + + -- GitLab