diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc index 86e665731a01b21c8f9598b5c0c23d6445bf6a3f..d77f040d5058df125f45185e9d3c9dfe5081520d 100644 --- a/src/ComputingTasks.cc +++ b/src/ComputingTasks.cc @@ -5109,18 +5109,19 @@ MethodOfMomentsStatement::checkPass(ModFileStructure &mod_file_struct, mod_file_struct.order_option = max(mod_file_struct.order_option, order); } - if (!options_list.contains("datafile")) + if (!options_list.contains("mom.mom_method")) { - cerr << "ERROR: The method_of_moments statement requires a data file to be supplied via the datafile option." << endl; + cerr << "ERROR: The 'method_of_moments' statement requires a method to be supplied via the 'mom_method' option. Possible values are 'GMM', 'SMM', or 'IRF_MATCHING'." << endl; exit(EXIT_FAILURE); } - if (!options_list.contains("mom.mom_method")) + auto mom_method_value = options_list.get_if<OptionsList::StringVal>("mom.mom_method"); + if ((mom_method_value == "GMM" || mom_method_value == "SMM") && !options_list.contains("datafile")) { - cerr << "ERROR: The method_of_moments statement requires a method to be supplied via the mom_method option. Possible values are GMM or SMM." << endl; + cerr << "ERROR: The 'method_of_moments' statement requires a data file to be supplied via the 'datafile' option." << endl; exit(EXIT_FAILURE); } - + if (auto opt = options_list.get_if<OptionsList::StringVal>("mom.mom_method"); opt && *opt == "GMM") mod_file_struct.GMM_present = true; diff --git a/src/DynareBison.yy b/src/DynareBison.yy index 61f233fc5e405591c6c79e550eb49c569dcb3e62..4ab1fd171a2bd1b12d6794a6a8d0d5c64d50ec9b 100644 --- a/src/DynareBison.yy +++ b/src/DynareBison.yy @@ -152,7 +152,7 @@ class ParsingDriver; %token RESTRICTION RESTRICTION_FNAME CROSS_RESTRICTIONS NLAGS CONTEMP_REDUCED_FORM REAL_PSEUDO_FORECAST %token DUMMY_OBS NSTATES INDXSCALESSTATES NO_BAYESIAN_PRIOR SPECIFICATION SIMS_ZHA %token <string> ALPHA BETA ABAND NINV CMS NCMS CNUM GAMMA INV_GAMMA INV_GAMMA1 INV_GAMMA2 NORMAL UNIFORM EPS PDF FIG DR NONE PRIOR PRIOR_VARIANCE HESSIAN IDENTITY_MATRIX DIRICHLET DIAGONAL OPTIMAL -%token GSIG2_LMDM Q_DIAG FLAT_PRIOR NCSK NSTD WEIBULL WEIBULL_PDF GMM SMM +%token GSIG2_LMDM Q_DIAG FLAT_PRIOR NCSK NSTD WEIBULL WEIBULL_PDF %token INDXPARR INDXOVR INDXAP APBAND INDXIMF INDXFORE FOREBAND INDXGFOREHAT INDXGIMFHAT %token INDXESTIMA INDXGDLS EQ_MS FILTER_COVARIANCE UPDATED_COVARIANCE FILTER_DECOMPOSITION SMOOTHED_STATE_UNCERTAINTY SMOOTHER_REDUX %token EQ_CMS TLINDX TLNUMBER RESTRICTIONS POSTERIOR_SAMPLER_OPTIONS @@ -180,9 +180,11 @@ class ParsingDriver; %token PAC_TARGET_INFO COMPONENT TARGET AUXNAME AUXNAME_TARGET_NONSTATIONARY PAC_TARGET_NONSTATIONARY %token <string> KIND LL DL DD ADD MULTIPLY /* Method of Moments */ -%token METHOD_OF_MOMENTS MOM_METHOD +%token GMM SMM IRF_MATCHING +%token METHOD_OF_MOMENTS MOM_METHOD SIMULATION_METHOD %token BARTLETT_KERNEL_LAG WEIGHTING_MATRIX WEIGHTING_MATRIX_SCALING_FACTOR ANALYTIC_STANDARD_ERRORS ANALYTIC_JACOBIAN PENALIZED_ESTIMATOR VERBOSE %token SIMULATION_MULTIPLE MOM_SEED SEED BOUNDED_SHOCK_SUPPORT ADDITIONAL_OPTIMIZER_STEPS MOM_SE_TOLX SE_TOLX MOM_BURNIN BURNIN +%token IRF_MATCHING_FILE ADD_TINY_NUMBER_TO_CHOLESKY %token EQTAGS %token ANALYTICAL_GIRF IRF_IN_PERCENT EMAS_GIRF EMAS_DROP EMAS_TOLF EMAS_MAX_ITER %token NO_IDENTIFICATION_STRENGTH NO_IDENTIFICATION_REDUCEDFORM NO_IDENTIFICATION_MOMENTS @@ -1555,6 +1557,43 @@ method_of_moments_option : o_mom_method | o_mode_check_neighbourhood_size | o_mode_check_symmetric_plots | o_mode_check_number_of_points + | o_add_tiny_number_to_cholesky + | o_brooks_gelman_plotrows + | o_cova_compute + | o_drop + | o_geweke_interval + | o_irf_matching_file + | o_load_mh_file + | o_load_results_after_load_mh + | o_mcmc_jumping_covariance + | o_mh_conf_sig + | o_mh_drop + | o_mh_init_scale_factor + | o_mh_initialize_from_previous_mcmc + | o_mh_initialize_from_previous_mcmc_directory + | o_mh_initialize_from_previous_mcmc_prior + | o_mh_initialize_from_previous_mcmc_record + | o_mh_jscale + | o_mh_nblocks + | o_mh_posterior_mode_estimation + | o_mh_recover + | o_mh_replic + | o_mh_tune_guess + | o_mh_tune_jscale + | o_mode_file + | o_no_posterior_kernel_density + | o_nodiagnostic + | o_posterior_max_subsample_draws + | o_posterior_sampler_options + | o_posterior_sampling_method + | o_raftery_lewis_diagnostics + | o_raftery_lewis_qrs + | o_relative_irf + | o_replic + | o_simulation_method + | o_sub_draws + | o_taper_steps + | o_use_penalized_objective_for_hessian ; prior_function : PRIOR_FUNCTION '(' prior_posterior_function_options_list ')' ';' @@ -4099,30 +4138,28 @@ o_fsolve_options : FSOLVE_OPTIONS EQUAL '(' name_value_pair_with_boolean_list ') // Some options to "method_of_moments" o_bartlett_kernel_lag : BARTLETT_KERNEL_LAG EQUAL INT_NUMBER { driver.option_num("mom.bartlett_kernel_lag", $3); }; - o_weighting_matrix : WEIGHTING_MATRIX EQUAL vec_str { driver.option_vec_cellstr("mom.weighting_matrix", $3); } - o_weighting_matrix_scaling_factor : WEIGHTING_MATRIX_SCALING_FACTOR EQUAL non_negative_number { driver.option_num("mom.weighting_matrix_scaling_factor", $3); }; - o_analytic_standard_errors : ANALYTIC_STANDARD_ERRORS { driver.option_num("mom.analytic_standard_errors", "true"); }; - o_analytic_jacobian : ANALYTIC_JACOBIAN { driver.option_num("mom.analytic_jacobian", "true"); }; - o_mom_method : MOM_METHOD EQUAL GMM { driver.option_str("mom.mom_method", "GMM"); } | MOM_METHOD EQUAL SMM { driver.option_str("mom.mom_method", "SMM"); } - ; + | MOM_METHOD EQUAL IRF_MATCHING + { driver.option_str("mom.mom_method", "IRF_MATCHING"); }; +o_simulation_method : SIMULATION_METHOD EQUAL STOCH_SIMUL + { driver.option_str("mom.simulation_method", "STOCH_SIMUL"); }; o_penalized_estimator : PENALIZED_ESTIMATOR { driver.option_num("mom.penalized_estimator", "true"); }; o_verbose : VERBOSE { driver.option_num("mom.verbose", "true"); }; - o_simulation_multiple : SIMULATION_MULTIPLE EQUAL INT_NUMBER { driver.option_num("mom.simulation_multiple", $3); }; o_mom_burnin : BURNIN EQUAL INT_NUMBER { driver.option_num("mom.burnin", $3); }; o_bounded_shock_support : BOUNDED_SHOCK_SUPPORT { driver.option_num("mom.bounded_shock_support", "true"); }; o_mom_seed : SEED EQUAL INT_NUMBER { driver.option_num("mom.seed", $3); }; o_additional_optimizer_steps : ADDITIONAL_OPTIMIZER_STEPS EQUAL vec_int { driver.option_vec_int("additional_optimizer_steps", $3); }; - o_mom_se_tolx : SE_TOLX EQUAL non_negative_number { driver.option_num("mom.se_tolx", $3); }; +o_irf_matching_file : IRF_MATCHING_FILE EQUAL filename { driver.option_str("mom.irf_matching_file.name", $3); }; +o_add_tiny_number_to_cholesky : ADD_TINY_NUMBER_TO_CHOLESKY EQUAL non_negative_number { driver.option_num("add_tiny_number_to_cholesky", $3); }; o_analytical_girf : ANALYTICAL_GIRF { driver.option_num("irf_opt.analytical_GIRF", "true"); }; o_irf_in_percent : IRF_IN_PERCENT { driver.option_num("irf_opt.percent", "true"); }; diff --git a/src/DynareFlex.ll b/src/DynareFlex.ll index dc550cfd7b904bde1e050949780c4bdeb3abe76d..921d716f28ff0980c341e940f8de9f5f6a8b2c1c 100644 --- a/src/DynareFlex.ll +++ b/src/DynareFlex.ll @@ -734,11 +734,14 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4]) } <DYNARE_STATEMENT>gmm {return token::GMM;} <DYNARE_STATEMENT>smm {return token::SMM;} +<DYNARE_STATEMENT>irf_matching {return token::IRF_MATCHING;} +<DYNARE_STATEMENT>stoch_simul {return token::STOCH_SIMUL;} <DYNARE_STATEMENT>weighting_matrix {return token::WEIGHTING_MATRIX; } <DYNARE_STATEMENT>weighting_matrix_scaling_factor {return token::WEIGHTING_MATRIX_SCALING_FACTOR; } <DYNARE_STATEMENT>analytic_standard_errors {return token::ANALYTIC_STANDARD_ERRORS; } <DYNARE_STATEMENT>analytic_jacobian {return token::ANALYTIC_JACOBIAN; } <DYNARE_STATEMENT>mom_method {return token::MOM_METHOD; } +<DYNARE_STATEMENT>simulation_method {return token::SIMULATION_METHOD; } <DYNARE_STATEMENT>penalized_estimator {return token::PENALIZED_ESTIMATOR; } <DYNARE_STATEMENT>verbose {return token::VERBOSE; } <DYNARE_STATEMENT>simulation_multiple {return token::SIMULATION_MULTIPLE; } @@ -746,6 +749,9 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4]) <DYNARE_STATEMENT>seed {return token::SEED; } <DYNARE_STATEMENT>se_tolx {return token::SE_TOLX;} <DYNARE_STATEMENT>bounded_shock_support {return token::BOUNDED_SHOCK_SUPPORT; } +<DYNARE_STATEMENT>irf_matching_file {return token::IRF_MATCHING_FILE;} +<DYNARE_STATEMENT>add_tiny_number_to_cholesky {return token::ADD_TINY_NUMBER_TO_CHOLESKY; } + <DYNARE_STATEMENT>analytical_girf {return token::ANALYTICAL_GIRF; } <DYNARE_STATEMENT>irf_in_percent {return token::IRF_IN_PERCENT; } <DYNARE_STATEMENT>emas_girf {return token::EMAS_GIRF; }