occbin: support occbin tags in equation tags, add occbin_likelihood and occbin_smoother as options to estimation

issue#70
Houtan Bastani 2020-02-11 14:12:24 +01:00
parent f9a7d8ded3
commit 14be6bad00
No known key found for this signature in database
GPG Key ID: 000094FB955BE169
4 changed files with 41 additions and 6 deletions

View File

@ -1247,6 +1247,20 @@ EstimationStatement::writeOutput(ostream &output, const string &basename, bool m
{ {
options_list.writeOutput(output); options_list.writeOutput(output);
bool occbin_option_present = false;
if (auto it = options_list.num_options.find("occbin_likelihood");
it != options_list.num_options.end() && it->second == "true")
occbin_option_present = true;
if (auto it = options_list.num_options.find("occbin_smoother");
it != options_list.num_options.end() && it->second == "true")
occbin_option_present = true;
if (occbin_option_present)
output << "options_ = set_default_occbin_options(options_, M_);" << endl
<< "clear mr_runsim_occbin_fn" << endl
<< "M_ = get_wish_list(M_);" << endl;
// Special treatment for order option and particle filter // Special treatment for order option and particle filter
if (auto it = options_list.num_options.find("order"); if (auto it = options_list.num_options.find("order");
it == options_list.num_options.end()) it == options_list.num_options.end())

View File

@ -1,5 +1,5 @@
/* /*
* Copyright © 2003-2019 Dynare Team * Copyright © 2003-2020 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -3200,6 +3200,23 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de
output << "};" << endl; output << "};" << endl;
} }
// Write Occbin tags
map<int, vector<pair<string, string>>> occbin_options;
for (const auto &[eqn, tag] : equation_tags)
if (tag.first == "pswitch"
|| tag.first == "bind"
|| tag.first == "relax"
|| tag.first == "pcrit")
occbin_options[eqn].push_back(tag);
int idx = 0;
for (const auto &[eqn, tags] : occbin_options)
{
idx++;
for (const auto &[tag_name, tag_value] : tags)
output << "M_.occbin.constraint(" << idx << ")." << tag_name << " = '" << tag_value << "';" << endl;
}
// Write mapping for variables and equations they are present in // Write mapping for variables and equations they are present in
for (const auto &variable : variableMapping) for (const auto &variable : variableMapping)
{ {

View File

@ -1,6 +1,6 @@
// -*- C++ -*- // -*- C++ -*-
/* /*
* Copyright © 2003-2019 Dynare Team * Copyright © 2003-2020 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -128,7 +128,7 @@ class ParsingDriver;
%precedence UNARY %precedence UNARY
%nonassoc POWER %nonassoc POWER
%token EXP LOG LN LOG10 SIN COS TAN ASIN ACOS ATAN ERF DIFF ADL AUXILIARY_MODEL_NAME %token EXP LOG LN LOG10 SIN COS TAN ASIN ACOS ATAN ERF DIFF ADL AUXILIARY_MODEL_NAME
%token SQRT CBRT NORMCDF NORMPDF STEADY_STATE EXPECTATION VAR_ESTIMATION %token SQRT CBRT NORMCDF NORMPDF STEADY_STATE EXPECTATION VAR_ESTIMATION OCCBIN_LIKELIHOOD OCCBIN_SMOOTHER
/* GSA analysis */ /* GSA analysis */
%token DYNARE_SENSITIVITY MORRIS STAB REDFORM PPRIOR PRIOR_RANGE PPOST ILPTAU MORRIS_NLIV %token DYNARE_SENSITIVITY MORRIS STAB REDFORM PPRIOR PRIOR_RANGE PPOST ILPTAU MORRIS_NLIV
%token MORRIS_NTRA NSAM LOAD_REDFORM LOAD_RMSE LOAD_STAB ALPHA2_STAB LOGTRANS_REDFORM THRESHOLD_REDFORM %token MORRIS_NTRA NSAM LOAD_REDFORM LOAD_RMSE LOAD_STAB ALPHA2_STAB LOGTRANS_REDFORM THRESHOLD_REDFORM
@ -2100,6 +2100,8 @@ estimation_options : o_datafile
| o_emas_max_iter | o_emas_max_iter
| o_stderr_multiples | o_stderr_multiples
| o_diagonal_only | o_diagonal_only
| o_occbin_likelihood
| o_occbin_smoother
; ;
list_optim_option : QUOTED_STRING COMMA QUOTED_STRING list_optim_option : QUOTED_STRING COMMA QUOTED_STRING
@ -3484,8 +3486,8 @@ o_proposal_approximation : PROPOSAL_APPROXIMATION EQUAL CUBATURE {driver.option_
o_distribution_approximation : DISTRIBUTION_APPROXIMATION EQUAL CUBATURE {driver.option_num("particle.distribution_approximation.cubature", "true"); driver.option_num("particle.distribution_approximation.unscented", "false"); driver.option_num("particle.distribution_approximation.montecarlo", "false");} o_distribution_approximation : DISTRIBUTION_APPROXIMATION EQUAL CUBATURE {driver.option_num("particle.distribution_approximation.cubature", "true"); driver.option_num("particle.distribution_approximation.unscented", "false"); driver.option_num("particle.distribution_approximation.montecarlo", "false");}
| DISTRIBUTION_APPROXIMATION EQUAL UNSCENTED {driver.option_num("particle.distribution_approximation.cubature", "false"); driver.option_num("particle.distribution_approximation.unscented", "true"); driver.option_num("particle.distribution_approximation.montecarlo", "false");} | DISTRIBUTION_APPROXIMATION EQUAL UNSCENTED {driver.option_num("particle.distribution_approximation.cubature", "false"); driver.option_num("particle.distribution_approximation.unscented", "true"); driver.option_num("particle.distribution_approximation.montecarlo", "false");}
| DISTRIBUTION_APPROXIMATION EQUAL MONTECARLO {driver.option_num("particle.distribution_approximation.cubature", "false"); driver.option_num("particle.distribution_approximation.unscented", "false"); driver.option_num("particle.distribution_approximation.montecarlo", "true");} ; | DISTRIBUTION_APPROXIMATION EQUAL MONTECARLO {driver.option_num("particle.distribution_approximation.cubature", "false"); driver.option_num("particle.distribution_approximation.unscented", "false"); driver.option_num("particle.distribution_approximation.montecarlo", "true");} ;
o_occbin_likelihood : OCCBIN_LIKELIHOOD { driver.option_num("occbin_likelihood", "true"); };
o_occbin_smoother : OCCBIN_SMOOTHER { driver.option_num("occbin_smoother", "true"); };
o_gsa_identification : IDENTIFICATION EQUAL INT_NUMBER { driver.option_num("identification", $3); }; /*not in doc */ o_gsa_identification : IDENTIFICATION EQUAL INT_NUMBER { driver.option_num("identification", $3); }; /*not in doc */
o_gsa_morris : MORRIS EQUAL INT_NUMBER { driver.option_num("morris", $3); }; o_gsa_morris : MORRIS EQUAL INT_NUMBER { driver.option_num("morris", $3); };
o_gsa_stab : STAB EQUAL INT_NUMBER { driver.option_num("stab", $3); }; o_gsa_stab : STAB EQUAL INT_NUMBER { driver.option_num("stab", $3); };

View File

@ -1,6 +1,6 @@
/* -*- C++ -*- */ /* -*- C++ -*- */
/* /*
* Copyright © 2003-2019 Dynare Team * Copyright © 2003-2020 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -434,6 +434,8 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4]|w([1-9]{1}|[1-4][0-9]|5[0-2]))
<DYNARE_STATEMENT>rescale_prediction_error_covariance {return token::RESCALE_PREDICTION_ERROR_COVARIANCE;} <DYNARE_STATEMENT>rescale_prediction_error_covariance {return token::RESCALE_PREDICTION_ERROR_COVARIANCE;}
<DYNARE_STATEMENT>use_penalized_objective_for_hessian {return token::USE_PENALIZED_OBJECTIVE_FOR_HESSIAN;} <DYNARE_STATEMENT>use_penalized_objective_for_hessian {return token::USE_PENALIZED_OBJECTIVE_FOR_HESSIAN;}
<DYNARE_STATEMENT>expression {return token::EXPRESSION;} <DYNARE_STATEMENT>expression {return token::EXPRESSION;}
<DYNARE_STATEMENT>occbin_likelihood {return token::OCCBIN_LIKELIHOOD;}
<DYNARE_STATEMENT>occbin_smoother {return token::OCCBIN_SMOOTHER;}
<DYNARE_STATEMENT>alpha { <DYNARE_STATEMENT>alpha {
yylval->build<string>(yytext); yylval->build<string>(yytext);