VAR(p) forecast first draft, preprocessor for var command and backend for forecast

issue#70
Houtan Bastani 2016-10-26 18:19:33 +02:00 committed by Stéphane Adjemian (Charybdis)
parent d089c730d4
commit 85a7d72515
8 changed files with 91 additions and 4 deletions

View File

@ -171,6 +171,50 @@ PriorPosteriorFunctionStatement::writeOutput(ostream &output, const string &base
<< "'" << type << "');" << endl;
}
VARStatement::VARStatement(const SymbolList &symbol_list_arg,
const OptionsList &options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list(symbol_list_arg),
options_list(options_list_arg),
symbol_table(symbol_table_arg)
{
}
void
VARStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings)
{
mod_file_struct.var_model_present = true;
vector<string> symbols = symbol_list.get_symbols();
for (vector<string>::const_iterator it = symbols.begin(); it != symbols.end(); it++)
if (symbol_table.getType(*it) != eEndogenous)
{
cerr << "ERROR: You can only run VARs on endogenous variables." << endl;
exit(EXIT_FAILURE);
}
OptionsList::num_options_t::const_iterator it = options_list.num_options.find("var(varidx).order");
if (it == options_list.num_options.end())
{
cerr << "ERROR: You must provide the order option to the var command." << endl;
exit(EXIT_FAILURE);
}
OptionsList::string_options_t::const_iterator it1 = options_list.string_options.find("var(varidx).name");
if (it1 == options_list.string_options.end())
{
cerr << "ERROR: You must provide the model_name option to the var command." << endl;
exit(EXIT_FAILURE);
}
}
void
VARStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const
{
options_list.writeOutput(output);
symbol_list.writeOutput("options_.var(varidx).var_list_", output);
output << "varidx = varidx + 1;" << endl;
}
StochSimulStatement::StochSimulStatement(const SymbolList &symbol_list_arg,
const OptionsList &options_list_arg) :
symbol_list(symbol_list_arg),

View File

@ -110,6 +110,20 @@ public:
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
};
class VARStatement : public Statement
{
private:
const SymbolList symbol_list;
const OptionsList options_list;
const SymbolTable &symbol_table;
public:
VARStatement(const SymbolList &symbol_list_arg,
const OptionsList &options_list_arg,
const SymbolTable &symbol_table_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
};
class ForecastStatement : public Statement
{
private:

View File

@ -115,7 +115,7 @@ class ParsingDriver;
%token <string_val> NAME
%token USE_PENALIZED_OBJECTIVE_FOR_HESSIAN INIT_STATE
%token NAN_CONSTANT NO_STATIC NOBS NOCONSTANT NODISPLAY NOCORR NODIAGNOSTIC NOFUNCTIONS NO_HOMOTOPY
%token NOGRAPH POSTERIOR_NOGRAPH POSTERIOR_GRAPH NOMOMENTS NOPRINT NORMAL_PDF SAVE_DRAWS
%token NOGRAPH POSTERIOR_NOGRAPH POSTERIOR_GRAPH NOMOMENTS NOPRINT NORMAL_PDF SAVE_DRAWS MODEL_NAME
%token OBSERVATION_TRENDS OPTIM OPTIM_WEIGHTS ORDER OSR OSR_PARAMS MAX_DIM_COVA_GROUP ADVANCED OUTFILE OUTVARS OVERWRITE
%token PARALLEL_LOCAL_FILES PARAMETERS PARAMETER_SET PARTIAL_INFORMATION PERIODS PERIOD PLANNER_OBJECTIVE PLOT_CONDITIONAL_FORECAST PLOT_PRIORS PREFILTER PRESAMPLE
%token PERFECT_FORESIGHT_SETUP PERFECT_FORESIGHT_SOLVER NO_POSTERIOR_KERNEL_DENSITY FUNCTION
@ -131,7 +131,7 @@ class ParsingDriver;
%token UNIFORM_PDF UNIT_ROOT_VARS USE_DLL USEAUTOCORR GSA_SAMPLE_FILE USE_UNIVARIATE_FILTERS_IF_SINGULARITY_IS_DETECTED
%token VALUES VAR VAREXO VAREXO_DET VAROBS VAREXOBS PREDETERMINED_VARIABLES
%token WRITE_LATEX_DYNAMIC_MODEL WRITE_LATEX_STATIC_MODEL WRITE_LATEX_ORIGINAL_MODEL
%token XLS_SHEET XLS_RANGE LMMCP OCCBIN BANDPASS_FILTER COLORMAP
%token XLS_SHEET XLS_RANGE LMMCP OCCBIN BANDPASS_FILTER COLORMAP VAR_MODEL
%left COMMA
%left EQUAL_EQUAL EXCLAMATION_EQUAL
%left LESS GREATER LESS_EQUAL GREATER_EQUAL
@ -224,6 +224,7 @@ statement : parameters
| estimated_params_init
| set_time
| data
| var_model
| prior
| prior_eq
| subsamples
@ -346,6 +347,16 @@ var : VAR var_list ';'
{ driver.end_nonstationary_var(true, $6); }
;
var_model : VAR '(' var_model_options_list ')' symbol_list ';' { driver.var_model(); } ;
var_model_options_list : var_model_options_list COMMA var_model_options
| var_model_options
;
var_model_options : o_var_name
| o_var_order
;
nonstationary_var_list : nonstationary_var_list symbol
{ driver.declare_nonstationary_var($2); }
| nonstationary_var_list COMMA symbol
@ -2816,6 +2827,8 @@ o_simul_seed : SIMUL_SEED EQUAL INT_NUMBER { driver.error("'simul_seed' option i
o_qz_criterium : QZ_CRITERIUM EQUAL non_negative_number { driver.option_num("qz_criterium", $3); };
o_qz_zero_threshold : QZ_ZERO_THRESHOLD EQUAL non_negative_number { driver.option_num("qz_zero_threshold", $3); };
o_file : FILE EQUAL filename { driver.option_str("file", $3); };
o_var_name : MODEL_NAME EQUAL symbol { driver.option_str("var(varidx).name", $3); };
o_var_order : ORDER EQUAL INT_NUMBER { driver.option_num("var(varidx).order", $3); };
o_series : SERIES EQUAL symbol { driver.option_str("series", $3); };
o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); };
o_dirname : DIRNAME EQUAL filename { driver.option_str("dirname", $3); };

View File

@ -136,6 +136,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2
<INITIAL>check {BEGIN DYNARE_STATEMENT; return token::CHECK;}
<INITIAL>simul {BEGIN DYNARE_STATEMENT; return token::SIMUL;}
<INITIAL>stoch_simul {BEGIN DYNARE_STATEMENT; return token::STOCH_SIMUL;}
<INITIAL>var_model {BEGIN DYNARE_STATEMENT; return token::VAR_MODEL;}
<INITIAL>dsample {BEGIN DYNARE_STATEMENT; return token::DSAMPLE;}
<INITIAL>Sigma_e {BEGIN DYNARE_STATEMENT; sigma_e = 1; return token::SIGMA_E;}
<INITIAL>planner_objective {BEGIN DYNARE_STATEMENT; return token::PLANNER_OBJECTIVE;}
@ -331,6 +332,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2
<DYNARE_STATEMENT>nocorr {return token::NOCORR;}
<DYNARE_STATEMENT>optim {return token::OPTIM;}
<DYNARE_STATEMENT>periods {return token::PERIODS;}
<DYNARE_STATEMENT>model_name {return token::MODEL_NAME;}
<DYNARE_STATEMENT>endogenous_terminal_period {return token::ENDOGENOUS_TERMINAL_PERIOD;}
<DYNARE_STATEMENT>sub_draws {return token::SUB_DRAWS;}
<DYNARE_STATEMENT>minimal_solving_periods {return token::MINIMAL_SOLVING_PERIODS;}

View File

@ -808,6 +808,9 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool clear_glo
static_model.writeOutput(mOutputFile, block);
}
if (mod_file_struct.var_model_present)
mOutputFile << "varidx = 1;" << endl;
// Print statements
for (vector<Statement *>::const_iterator it = statements.begin();
it != statements.end(); it++)

View File

@ -1279,6 +1279,14 @@ ParsingDriver::stoch_simul()
options_list.clear();
}
void
ParsingDriver::var_model()
{
mod_file->addStatement(new VARStatement(symbol_list, options_list, mod_file->symbol_table));
symbol_list.clear();
options_list.clear();
}
void
ParsingDriver::simul()
{

View File

@ -418,6 +418,8 @@ public:
void rplot();
//! Writes a stock_simul command
void stoch_simul();
//! Writes a var (vector autoregression) command
void var_model();
//! Writes a simul command
void simul();
//! Writes check command

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2006-2015 Dynare Team
* Copyright (C) 2006-2016 Dynare Team
*
* This file is part of Dynare.
*
@ -122,7 +122,8 @@ public:
int orig_eq_nbr;
//! Stores the number of equations added to the Ramsey model
int ramsey_eq_nbr;
//! Whether a VAR statement is present
bool var_model_present;
};
class Statement