Add interface for forecast_shock_decomposition. Dynare/dynare#1657

issue#70
Dóra Kocsis 2019-11-22 18:58:31 +01:00
parent 3ec01b8612
commit 8bfcefe7fb
6 changed files with 87 additions and 1 deletions

View File

@ -2784,6 +2784,38 @@ ShockDecompositionStatement::writeJsonOutput(ostream &output) const
output << "}";
}
ForecastShockDecompositionStatement::ForecastShockDecompositionStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
{
}
void
ForecastShockDecompositionStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const
{
options_list.writeOutput(output);
symbol_list.writeOutput("var_list_", output);
output << "oo_ = forecast_shock_decomposition(M_,oo_,options_,var_list_,bayestopt_,estim_params_);" << endl;
}
void
ForecastShockDecompositionStatement::writeJsonOutput(ostream &output) const
{
output << R"({"statementName": "forecast_shock_decomposition")";
if (options_list.getNumberOfOptions())
{
output << ", ";
options_list.writeJsonOutput(output);
}
if (!symbol_list.empty())
{
output << ", ";
symbol_list.writeJsonOutput(output);
}
output << "}";
}
RealtimeShockDecompositionStatement::RealtimeShockDecompositionStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
symbol_list{move(symbol_list_arg)},

View File

@ -717,6 +717,18 @@ public:
void writeJsonOutput(ostream &output) const override;
};
class ForecastShockDecompositionStatement : public Statement
{
private:
const SymbolList symbol_list;
const OptionsList options_list;
public:
ForecastShockDecompositionStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg);
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override;
};
class RealtimeShockDecompositionStatement : public Statement
{
private:

View File

@ -113,7 +113,7 @@ class ParsingDriver;
%token RELATIVE_IRF REPLIC SIMUL_REPLIC RPLOT SAVE_PARAMS_AND_STEADY_STATE PARAMETER_UNCERTAINTY TARGETS
%token SHOCKS SHOCK_DECOMPOSITION SHOCK_GROUPS USE_SHOCK_GROUPS SIGMA_E SIMUL SIMUL_ALGO SIMUL_SEED ENDOGENOUS_TERMINAL_PERIOD
%token SMOOTHER SMOOTHER2HISTVAL SQUARE_ROOT_SOLVER STACK_SOLVE_ALGO STEADY_STATE_MODEL SOLVE_ALGO SOLVER_PERIODS ROBUST_LIN_SOLVE
%token STDERR STEADY STOCH_SIMUL SYLVESTER SYLVESTER_FIXED_POINT_TOL REGIMES REGIME REALTIME_SHOCK_DECOMPOSITION
%token STDERR STEADY STOCH_SIMUL SYLVESTER SYLVESTER_FIXED_POINT_TOL REGIMES REGIME REALTIME_SHOCK_DECOMPOSITION FORECAST_SHOCK_DECOMPOSITION UNCONDITIONAL CONDITIONAL
%token TEX RAMSEY_MODEL RAMSEY_POLICY RAMSEY_CONSTRAINTS PLANNER_DISCOUNT DISCRETIONARY_POLICY DISCRETIONARY_TOL
%token <string> TEX_NAME
%token UNIFORM_PDF UNIT_ROOT_VARS USE_DLL USEAUTOCORR GSA_SAMPLE_FILE USE_UNIVARIATE_FILTERS_IF_SINGULARITY_IS_DETECTED
@ -269,6 +269,7 @@ statement : parameters
| write_latex_original_model
| write_latex_steady_state_model
| shock_decomposition
| forecast_shock_decomposition
| realtime_shock_decomposition
| plot_shock_decomposition
| initial_condition_decomposition
@ -2396,6 +2397,16 @@ shock_decomposition : SHOCK_DECOMPOSITION ';'
{ driver.shock_decomposition(); }
;
forecast_shock_decomposition : FORECAST_SHOCK_DECOMPOSITION ';'
{driver.forecast_shock_decomposition(); }
| FORECAST_SHOCK_DECOMPOSITION '(' forecast_shock_decomposition_options_list ')' ';'
{ driver.forecast_shock_decomposition(); }
| FORECAST_SHOCK_DECOMPOSITION symbol_list ';'
{ driver.forecast_shock_decomposition(); }
| FORECAST_SHOCK_DECOMPOSITION '(' forecast_shock_decomposition_options_list ')' symbol_list ';'
{ driver.forecast_shock_decomposition(); }
;
realtime_shock_decomposition : REALTIME_SHOCK_DECOMPOSITION ';'
{driver.realtime_shock_decomposition(); }
| REALTIME_SHOCK_DECOMPOSITION '(' realtime_shock_decomposition_options_list ')' ';'
@ -2795,6 +2806,21 @@ shock_decomposition_option : o_parameter_set
| o_init_state
;
forecast_shock_decomposition_options_list : forecast_shock_decomposition_option COMMA forecast_shock_decomposition_options_list
| forecast_shock_decomposition_option
;
forecast_shock_decomposition_option : o_parameter_set
| o_datafile
| o_use_shock_groups
| o_colormap
| o_shock_decomposition_nograph
| o_first_obs
| o_nobs
| o_init_state
| o_fsd_type
;
realtime_shock_decomposition_options_list : realtime_shock_decomposition_option COMMA realtime_shock_decomposition_options_list
| realtime_shock_decomposition_option
;
@ -3220,6 +3246,11 @@ o_posterior_nograph : POSTERIOR_NOGRAPH
;
o_shock_decomposition_nograph : NOGRAPH { driver.option_num("no_graph.shock_decomposition", "true"); }
o_init_state : INIT_STATE EQUAL INT_NUMBER { driver.option_num("shock_decomp.init_state", $3); };
o_fsd_type : TYPE EQUAL UNCONDITIONAL
{ driver.option_str("forecast_shock_decomp.type", "unconditional"); }
| TYPE EQUAL CONDITIONAL
{ driver.option_str("forecast_shock_decomp.type", "conditional"); }
;
o_shock_decomposition_presample : PRESAMPLE EQUAL INT_NUMBER { driver.option_num("shock_decomp.presample", $3); };
o_shock_decomposition_forecast : FORECAST EQUAL INT_NUMBER { driver.option_num("shock_decomp.forecast", $3); };
o_save_realtime : SAVE_REALTIME EQUAL vec_int { driver.option_vec_int("shock_decomp.save_realtime", $3); };

View File

@ -158,6 +158,7 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4]|w([1-9]{1}|[1-4][0-9]|5[0-2]))
<INITIAL>histval_file {BEGIN DYNARE_STATEMENT; return token::HISTVAL_FILE;}
<INITIAL>forecast {BEGIN DYNARE_STATEMENT; return token::FORECAST;}
<INITIAL>shock_decomposition {BEGIN DYNARE_STATEMENT; return token::SHOCK_DECOMPOSITION;}
<INITIAL>forecast_shock_decomposition {BEGIN DYNARE_STATEMENT; return token::FORECAST_SHOCK_DECOMPOSITION;}
<INITIAL>realtime_shock_decomposition {BEGIN DYNARE_STATEMENT; return token::REALTIME_SHOCK_DECOMPOSITION;}
<INITIAL>plot_shock_decomposition {BEGIN DYNARE_STATEMENT; return token::PLOT_SHOCK_DECOMPOSITION;}
<INITIAL>initial_condition_decomposition {BEGIN DYNARE_STATEMENT; return token::INITIAL_CONDITION_DECOMPOSITION;}

View File

@ -2348,6 +2348,14 @@ ParsingDriver::shock_decomposition()
options_list.clear();
}
void
ParsingDriver::forecast_shock_decomposition()
{
mod_file->addStatement(make_unique<ForecastShockDecompositionStatement>(symbol_list, options_list));
symbol_list.clear();
options_list.clear();
}
void
ParsingDriver::realtime_shock_decomposition()
{

View File

@ -682,6 +682,8 @@ public:
void markov_switching();
//! Shock decomposition
void shock_decomposition();
//! Forecast Shock decomposition
void forecast_shock_decomposition();
//! Realtime Shock decomposition
void realtime_shock_decomposition();
//! Plot Shock decomposition