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);
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
if (auto it = options_list.num_options.find("order");
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.
*
@ -3200,6 +3200,23 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de
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
for (const auto &variable : variableMapping)
{

View File

@ -1,6 +1,6 @@
// -*- C++ -*-
/*
* Copyright © 2003-2019 Dynare Team
* Copyright © 2003-2020 Dynare Team
*
* This file is part of Dynare.
*
@ -128,7 +128,7 @@ class ParsingDriver;
%precedence UNARY
%nonassoc POWER
%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 */
%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
@ -2100,6 +2100,8 @@ estimation_options : o_datafile
| o_emas_max_iter
| o_stderr_multiples
| o_diagonal_only
| o_occbin_likelihood
| o_occbin_smoother
;
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");}
| 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");} ;
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_morris : MORRIS EQUAL INT_NUMBER { driver.option_num("morris", $3); };
o_gsa_stab : STAB EQUAL INT_NUMBER { driver.option_num("stab", $3); };

View File

@ -1,6 +1,6 @@
/* -*- C++ -*- */
/*
* Copyright © 2003-2019 Dynare Team
* Copyright © 2003-2020 Dynare Team
*
* 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>use_penalized_objective_for_hessian {return token::USE_PENALIZED_OBJECTIVE_FOR_HESSIAN;}
<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 {
yylval->build<string>(yytext);