Merge branch 'master' of https://github.com/DynareTeam/dynare
commit
9e9f882c81
|
@ -364,7 +364,7 @@ If you want to give a URL, use the address of the Dynare website:
|
|||
@node Software requirements
|
||||
@section Software requirements
|
||||
|
||||
Packaged versions of Dynare are available for Windows XP/Vista/Seven,
|
||||
Packaged versions of Dynare are available for Windows XP/Vista/7/8,
|
||||
@uref{http://www.debian.org,Debian GNU/Linux},
|
||||
@uref{http://www.ubuntu.com/,Ubuntu} and Mac OS X Leopard/Snow
|
||||
Leopard. Dynare should work on other systems, but some compilation
|
||||
|
@ -884,6 +884,7 @@ Declarations of variables and parameters are made with the following commands:
|
|||
|
||||
@deffn Command var @var{VARIABLE_NAME} [$@var{LATEX_NAME}$]@dots{};
|
||||
@deffnx Command var (deflator = @var{MODEL_EXPRESSION}) @var{VARIABLE_NAME} [$@var{LATEX_NAME}$]@dots{};
|
||||
@deffnx Command var (log_deflator = @var{MODEL_EXPRESSION}) @var{VARIABLE_NAME} [$@var{LATEX_NAME}$]@dots{};
|
||||
|
||||
@descriptionhead
|
||||
|
||||
|
@ -910,7 +911,15 @@ trend.
|
|||
The expression used to detrend an endogenous variable. All trend
|
||||
variables, endogenous variables and parameters referenced in
|
||||
@var{MODEL_EXPRESSION} must already have been declared by the
|
||||
@code{trend_var}, @code{var} and @code{parameters} commands.
|
||||
@code{trend_var}, @code{log_trend_var}, @code{var} and
|
||||
@code{parameters} commands. The deflator is assumed to be
|
||||
multiplicative; for an additive deflator, use @code{log_deflator}.
|
||||
|
||||
@item log_deflator = @var{MODEL_EXPRESSION}
|
||||
Same as @code{deflator}, except that the deflator is assumed to be
|
||||
additive instead of multiplicative (or, to put it otherwise, the
|
||||
declared variable is equal to the log of a variable with a
|
||||
multiplicative trend).
|
||||
@end table
|
||||
|
||||
@examplehead
|
||||
|
@ -1093,6 +1102,9 @@ model. @xref{Conventions}, for the syntax of @var{MODEL_EXPRESSION} and
|
|||
@var{VARIABLE_NAME}. Optionally it is possible to give a LaTeX name to
|
||||
the variable.
|
||||
|
||||
The variable is assumed to have a multiplicative growth trend. For an
|
||||
additive growth trend, use @code{log_trend_var} instead.
|
||||
|
||||
Trend variables are required if the user wants to be able to write a
|
||||
nonstationary model in the @code{model} block. The @code{trend_var}
|
||||
command must appear before the @code{var} command that references the
|
||||
|
@ -1117,6 +1129,17 @@ trend_var (growth_factor=gA) A;
|
|||
|
||||
@end deffn
|
||||
|
||||
@deffn Command log_trend_var (log_growth_factor = @var{MODEL_EXPRESSION}) @var{VARIABLE_NAME} [$@var{LATEX_NAME}$]@dots{};
|
||||
|
||||
@descriptionhead
|
||||
|
||||
Same as @code{trend_var}, except that the variable is supposed to have
|
||||
an additive trend (or, to put it otherwise, to be equal to the log of
|
||||
a variable with a multiplicative trend).
|
||||
|
||||
@end deffn
|
||||
|
||||
|
||||
@node Expressions
|
||||
@section Expressions
|
||||
|
||||
|
@ -7265,7 +7288,7 @@ is @file{$HOME/.dynare}, while on Windows it is
|
|||
@file{%APPDATA%\dynare.ini} (typically @file{C:\Documents and
|
||||
Settings\@var{USERNAME}\Application Data\dynare.ini} under Windows XP,
|
||||
or @file{C:\Users\@var{USERNAME}\AppData\dynare.ini} under Windows
|
||||
Vista or Windows 7). You can specify a non standard location using the
|
||||
Vista/7/8). You can specify a non standard location using the
|
||||
@code{conffile} option of the @code{dynare} command (@pxref{Dynare
|
||||
invocation}).
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2011 Dynare Team
|
||||
* Copyright (C) 2007-2013 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -148,7 +148,8 @@ enum SymbolType
|
|||
eModFileLocalVariable = 11, //!< Local variable whose scope is mod file (model excluded)
|
||||
eExternalFunction = 12, //!< External (user-defined) function
|
||||
eTrend = 13, //!< Trend variable
|
||||
eStatementDeclaredVariable = 14 //!< Local variable assigned within a Statement (see subsample statement for example)
|
||||
eStatementDeclaredVariable = 14, //!< Local variable assigned within a Statement (see subsample statement for example)
|
||||
eLogTrend = 15 //!< Log-trend variable
|
||||
};
|
||||
|
||||
enum ExpressionType
|
||||
|
|
|
@ -3532,6 +3532,7 @@ DynamicModel::computeDerivIDs()
|
|||
equations[i]->collectVariables(eExogenousDet, dynvars);
|
||||
equations[i]->collectVariables(eParameter, dynvars);
|
||||
equations[i]->collectVariables(eTrend, dynvars);
|
||||
equations[i]->collectVariables(eLogTrend, dynvars);
|
||||
}
|
||||
|
||||
for (set<pair<int, int> >::const_iterator it = dynvars.begin();
|
||||
|
@ -3657,6 +3658,7 @@ DynamicModel::computeDynJacobianCols(bool jacobianExo)
|
|||
break;
|
||||
case eParameter:
|
||||
case eTrend:
|
||||
case eLogTrend:
|
||||
// We don't assign a dynamic jacobian column to parameters or trend variables
|
||||
break;
|
||||
default:
|
||||
|
@ -3692,21 +3694,21 @@ DynamicModel::testTrendDerivativesEqualToZero(const eval_context_t &eval_context
|
|||
{
|
||||
for (deriv_id_table_t::const_iterator it = deriv_id_table.begin();
|
||||
it != deriv_id_table.end(); it++)
|
||||
if (symbol_table.getType(it->first.first) == eTrend)
|
||||
if (symbol_table.getType(it->first.first) == eTrend
|
||||
|| symbol_table.getType(it->first.first) == eLogTrend)
|
||||
for (int eq = 0; eq < (int) equations.size(); eq++)
|
||||
{
|
||||
expr_t testeq = AddLog(AddMinus(equations[eq]->get_arg1(), // F: a = b -> ln(a - b)
|
||||
equations[eq]->get_arg2()));
|
||||
assert(testeq != NULL);
|
||||
testeq = testeq->getDerivative(it->second); // d F / d Trend
|
||||
for (deriv_id_table_t::const_iterator endogit = deriv_id_table.begin();
|
||||
endogit != deriv_id_table.end(); endogit++)
|
||||
if (symbol_table.getType(endogit->first.first) == eEndogenous)
|
||||
{
|
||||
double nearZero = testeq->getDerivative(endogit->second)->eval(eval_context); // eval d F / d Trend d Endog
|
||||
if (nearZero < -ZERO_BAND || nearZero > ZERO_BAND)
|
||||
if (fabs(nearZero) > ZERO_BAND)
|
||||
{
|
||||
cerr << "ERROR: the second-order cross partial of equation " << eq + 1 << " w.r.t. trend variable "
|
||||
cerr << "ERROR: trends not compatible with balanced growth path; the second-order cross partial of equation " << eq + 1 << " w.r.t. trend variable "
|
||||
<< symbol_table.getName(it->first.first) << " and endogenous variable "
|
||||
<< symbol_table.getName(endogit->first.first) << " is not null. " << endl;
|
||||
exit(EXIT_FAILURE);
|
||||
|
@ -3715,19 +3717,6 @@ DynamicModel::testTrendDerivativesEqualToZero(const eval_context_t &eval_context
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModel::print_trend_vars()
|
||||
{
|
||||
for (trend_symbols_map_t::const_iterator it = nonstationary_symbols_map.begin();
|
||||
it != nonstationary_symbols_map.end(); it++)
|
||||
{
|
||||
cout << "it->first:" << symbol_table.getName(it->first) << " ";
|
||||
it->second->print_deflator();
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModel::writeParamsDerivativesFile(const string &basename) const
|
||||
{
|
||||
|
@ -4109,11 +4098,11 @@ DynamicModel::transformPredeterminedVariables()
|
|||
void
|
||||
DynamicModel::detrendEquations()
|
||||
{
|
||||
for (trend_symbols_map_t::const_iterator it = nonstationary_symbols_map.begin();
|
||||
for (nonstationary_symbols_map_t::const_iterator it = nonstationary_symbols_map.begin();
|
||||
it != nonstationary_symbols_map.end(); it++)
|
||||
for (int i = 0; i < (int) equations.size(); i++)
|
||||
{
|
||||
BinaryOpNode *substeq = dynamic_cast<BinaryOpNode *>(equations[i]->detrend(it->first, it->second));
|
||||
BinaryOpNode *substeq = dynamic_cast<BinaryOpNode *>(equations[i]->detrend(it->first, it->second.first, it->second.second));
|
||||
assert(substeq != NULL);
|
||||
equations[i] = dynamic_cast<BinaryOpNode *>(substeq);
|
||||
}
|
||||
|
|
|
@ -230,7 +230,6 @@ public:
|
|||
virtual int getDerivID(int symb_id, int lag) const throw (UnknownDerivIDException);
|
||||
virtual int getDynJacobianCol(int deriv_id) const throw (UnknownDerivIDException);
|
||||
virtual void addAllParamDerivId(set<int> &deriv_id_set);
|
||||
void print_trend_vars();
|
||||
|
||||
//! Returns true indicating that this is a dynamic model
|
||||
virtual bool
|
||||
|
|
|
@ -110,7 +110,7 @@ class ParsingDriver;
|
|||
%token INV_GAMMA_PDF INV_GAMMA1_PDF INV_GAMMA2_PDF IRF IRF_SHOCKS
|
||||
%token KALMAN_ALGO KALMAN_TOL SUBSAMPLES OPTIONS
|
||||
%token LABELS LAPLACE LIK_ALGO LIK_INIT LINEAR LOAD_IDENT_FILES LOAD_MH_FILE LOAD_PARAMS_AND_STEADY_STATE LOGLINEAR LYAPUNOV
|
||||
%token LYAPUNOV_FIXED_POINT_TOL LYAPUNOV_DOUBLING_TOL LYAPUNOV_SQUARE_ROOT_SOLVER_TOL MARKOWITZ MARGINAL_DENSITY MAX MAXIT
|
||||
%token LYAPUNOV_FIXED_POINT_TOL LYAPUNOV_DOUBLING_TOL LYAPUNOV_SQUARE_ROOT_SOLVER_TOL LOG_DEFLATOR LOG_TREND_VAR LOG_GROWTH_FACTOR MARKOWITZ MARGINAL_DENSITY MAX MAXIT
|
||||
%token MFS MH_DROP MH_INIT_SCALE MH_JSCALE MH_MODE MH_NBLOCKS MH_REPLIC MH_RECOVER MIN MINIMAL_SOLVING_PERIODS SOLVE_MAXIT
|
||||
%token MODE_CHECK MODE_COMPUTE MODE_FILE MODEL MODEL_COMPARISON MODEL_INFO MSHOCKS ABS SIGN
|
||||
%token MODEL_DIAGNOSTICS MODIFIEDHARMONICMEAN MOMENTS_VARENDO DIFFUSE_FILTER SUB_DRAWS
|
||||
|
@ -262,6 +262,7 @@ statement : parameters
|
|||
| external_function
|
||||
| steady_state_model
|
||||
| trend_var
|
||||
| log_trend_var
|
||||
| ms_estimation
|
||||
| ms_simulation
|
||||
| ms_compute_mdd
|
||||
|
@ -287,22 +288,42 @@ trend_var : TREND_VAR '(' GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_sid
|
|||
;
|
||||
|
||||
trend_var_list : trend_var_list symbol
|
||||
{ driver.declare_trend_var($2); }
|
||||
{ driver.declare_trend_var(false, $2); }
|
||||
| trend_var_list COMMA symbol
|
||||
{ driver.declare_trend_var($3); }
|
||||
{ driver.declare_trend_var(false, $3); }
|
||||
| symbol
|
||||
{ driver.declare_trend_var($1); }
|
||||
{ driver.declare_trend_var(false, $1); }
|
||||
| trend_var_list symbol TEX_NAME
|
||||
{ driver.declare_trend_var($2, $3); }
|
||||
{ driver.declare_trend_var(false, $2, $3); }
|
||||
| trend_var_list COMMA symbol TEX_NAME
|
||||
{ driver.declare_trend_var($3, $4); }
|
||||
{ driver.declare_trend_var(false, $3, $4); }
|
||||
| symbol TEX_NAME
|
||||
{ driver.declare_trend_var($1, $2); }
|
||||
{ driver.declare_trend_var(false, $1, $2); }
|
||||
;
|
||||
|
||||
log_trend_var : LOG_TREND_VAR '(' LOG_GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' log_trend_var_list ';'
|
||||
{ driver.end_trend_var($6); }
|
||||
;
|
||||
|
||||
log_trend_var_list : log_trend_var_list symbol
|
||||
{ driver.declare_trend_var(true, $2); }
|
||||
| log_trend_var_list COMMA symbol
|
||||
{ driver.declare_trend_var(true, $3); }
|
||||
| symbol
|
||||
{ driver.declare_trend_var(true, $1); }
|
||||
| log_trend_var_list symbol TEX_NAME
|
||||
{ driver.declare_trend_var(true, $2, $3); }
|
||||
| log_trend_var_list COMMA symbol TEX_NAME
|
||||
{ driver.declare_trend_var(true, $3, $4); }
|
||||
| symbol TEX_NAME
|
||||
{ driver.declare_trend_var(true, $1, $2); }
|
||||
;
|
||||
|
||||
var : VAR var_list ';'
|
||||
| VAR '(' DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' nonstationary_var_list ';'
|
||||
{ driver.end_nonstationary_var($6); }
|
||||
{ driver.end_nonstationary_var(false, $6); }
|
||||
| VAR '(' LOG_DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' nonstationary_var_list ';'
|
||||
{ driver.end_nonstationary_var(true, $6); }
|
||||
;
|
||||
|
||||
nonstationary_var_list : nonstationary_var_list symbol
|
||||
|
|
|
@ -103,6 +103,7 @@ string eofbuff;
|
|||
<INITIAL>varexo {BEGIN DYNARE_STATEMENT; return token::VAREXO;}
|
||||
<INITIAL>varexo_det {BEGIN DYNARE_STATEMENT; return token::VAREXO_DET;}
|
||||
<INITIAL>trend_var {BEGIN DYNARE_STATEMENT; return token::TREND_VAR;}
|
||||
<INITIAL>log_trend_var {BEGIN DYNARE_STATEMENT; return token::LOG_TREND_VAR;}
|
||||
<INITIAL>predetermined_variables {BEGIN DYNARE_STATEMENT; return token::PREDETERMINED_VARIABLES;}
|
||||
<INITIAL>parameters {BEGIN DYNARE_STATEMENT; return token::PARAMETERS;}
|
||||
<INITIAL>periods {BEGIN DYNARE_STATEMENT; return token::PERIODS;}
|
||||
|
@ -467,7 +468,9 @@ string eofbuff;
|
|||
<DYNARE_STATEMENT>selected_variables_only {return token::SELECTED_VARIABLES_ONLY; }
|
||||
<DYNARE_STATEMENT>pruning {return token::PRUNING; }
|
||||
<DYNARE_STATEMENT>deflator {return token::DEFLATOR;}
|
||||
<DYNARE_STATEMENT>log_deflator {return token::LOG_DEFLATOR;}
|
||||
<DYNARE_STATEMENT>growth_factor {return token::GROWTH_FACTOR;}
|
||||
<DYNARE_STATEMENT>log_growth_factor {return token::LOG_GROWTH_FACTOR;}
|
||||
<DYNARE_STATEMENT>cova_compute {return token::COVA_COMPUTE;}
|
||||
<DYNARE_STATEMENT>discretionary_tol {return token::DISCRETIONARY_TOL;}
|
||||
<DYNARE_STATEMENT>analytic_derivation {return token::ANALYTIC_DERIVATION;}
|
||||
|
|
|
@ -175,64 +175,6 @@ ExprNode::writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output
|
|||
// Nothing to do
|
||||
}
|
||||
|
||||
void
|
||||
ExprNode::print_deflator()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
VariableNode::print_deflator()
|
||||
{
|
||||
cout << datatree.symbol_table.getName(symb_id);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UnaryOpNode::print_deflator()
|
||||
{
|
||||
arg->print_deflator();
|
||||
}
|
||||
|
||||
void
|
||||
BinaryOpNode::print_deflator()
|
||||
{
|
||||
arg1->print_deflator();
|
||||
arg2->print_deflator();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TrinaryOpNode::print_deflator()
|
||||
{
|
||||
arg1->print_deflator();
|
||||
arg2->print_deflator();
|
||||
arg3->print_deflator();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ExternalFunctionNode::print_deflator()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
FirstDerivExternalFunctionNode::print_deflator()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SecondDerivExternalFunctionNode::print_deflator()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ExprNode::compileExternalFunctionOutput(ostream &CompileCode, unsigned int &instruction_number,
|
||||
bool lhs_rhs, const temporary_terms_t &temporary_terms,
|
||||
|
@ -355,12 +297,6 @@ NumConstNode::collectTemporary_terms(const temporary_terms_t &temporary_terms, t
|
|||
temporary_terms_inuse.insert(idx);
|
||||
}
|
||||
|
||||
void
|
||||
NumConstNode::print_deflator()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
NumConstNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
|
||||
const temporary_terms_t &temporary_terms,
|
||||
|
@ -528,7 +464,7 @@ NumConstNode::replaceTrendVar() const
|
|||
}
|
||||
|
||||
expr_t
|
||||
NumConstNode::detrend(int symb_id, expr_t trend) const
|
||||
NumConstNode::detrend(int symb_id, bool log_trend, expr_t trend) const
|
||||
{
|
||||
return const_cast<NumConstNode *>(this);
|
||||
}
|
||||
|
@ -569,6 +505,7 @@ VariableNode::prepareForDerivation()
|
|||
case eExogenousDet:
|
||||
case eParameter:
|
||||
case eTrend:
|
||||
case eLogTrend:
|
||||
// For a variable or a parameter, the only non-null derivative is with respect to itself
|
||||
non_null_derivatives.insert(datatree.getDerivID(symb_id, lag));
|
||||
break;
|
||||
|
@ -597,6 +534,7 @@ VariableNode::computeDerivative(int deriv_id)
|
|||
case eExogenousDet:
|
||||
case eParameter:
|
||||
case eTrend:
|
||||
case eLogTrend:
|
||||
if (deriv_id == datatree.getDerivID(symb_id, lag))
|
||||
return datatree.One;
|
||||
else
|
||||
|
@ -649,7 +587,7 @@ VariableNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
|
|||
output << "\\bar{";
|
||||
output << datatree.symbol_table.getTeXName(symb_id);
|
||||
if (output_type == oLatexDynamicModel
|
||||
&& (type == eEndogenous || type == eExogenous || type == eExogenousDet || type == eModelLocalVariable || type == eTrend))
|
||||
&& (type == eEndogenous || type == eExogenous || type == eExogenousDet || type == eModelLocalVariable || type == eTrend || type == eLogTrend))
|
||||
{
|
||||
output << "_{t";
|
||||
if (lag != 0)
|
||||
|
@ -821,6 +759,7 @@ VariableNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
|
|||
|
||||
case eExternalFunction:
|
||||
case eTrend:
|
||||
case eLogTrend:
|
||||
case eStatementDeclaredVariable:
|
||||
cerr << "Impossible case" << endl;
|
||||
exit(EXIT_FAILURE);
|
||||
|
@ -974,6 +913,7 @@ VariableNode::getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recur
|
|||
case eExogenousDet:
|
||||
case eParameter:
|
||||
case eTrend:
|
||||
case eLogTrend:
|
||||
if (deriv_id == datatree.getDerivID(symb_id, lag))
|
||||
return datatree.One;
|
||||
else
|
||||
|
@ -1108,6 +1048,7 @@ VariableNode::decreaseLeadsLags(int n) const
|
|||
case eExogenous:
|
||||
case eExogenousDet:
|
||||
case eTrend:
|
||||
case eLogTrend:
|
||||
return datatree.AddVariable(symb_id, lag-n);
|
||||
case eModelLocalVariable:
|
||||
return datatree.local_variables_table[symb_id]->decreaseLeadsLags(n);
|
||||
|
@ -1312,43 +1253,76 @@ VariableNode::replaceTrendVar() const
|
|||
{
|
||||
if (get_type() == eTrend)
|
||||
return datatree.One;
|
||||
else if (get_type() == eLogTrend)
|
||||
return datatree.Zero;
|
||||
else
|
||||
return const_cast<VariableNode *>(this);
|
||||
}
|
||||
|
||||
expr_t
|
||||
VariableNode::detrend(int symb_id, expr_t trend) const
|
||||
VariableNode::detrend(int symb_id, bool log_trend, expr_t trend) const
|
||||
{
|
||||
if (get_symb_id() != symb_id)
|
||||
return const_cast<VariableNode *>(this);
|
||||
|
||||
if (get_lag() == 0)
|
||||
return datatree.AddTimes(const_cast<VariableNode *>(this), trend);
|
||||
if (log_trend)
|
||||
{
|
||||
if (get_lag() == 0)
|
||||
return datatree.AddPlus(const_cast<VariableNode *>(this), trend);
|
||||
else
|
||||
return datatree.AddPlus(const_cast<VariableNode *>(this), trend->decreaseLeadsLags(-1*get_lag()));
|
||||
}
|
||||
else
|
||||
return datatree.AddTimes(const_cast<VariableNode *>(this), trend->decreaseLeadsLags(-1*get_lag()));
|
||||
{
|
||||
if (get_lag() == 0)
|
||||
return datatree.AddTimes(const_cast<VariableNode *>(this), trend);
|
||||
else
|
||||
return datatree.AddTimes(const_cast<VariableNode *>(this), trend->decreaseLeadsLags(-1*get_lag()));
|
||||
}
|
||||
}
|
||||
|
||||
expr_t
|
||||
VariableNode::removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const
|
||||
{
|
||||
if (get_type() != eTrend || get_lag() == 0)
|
||||
if ((get_type() != eTrend && get_type() != eLogTrend) || get_lag() == 0)
|
||||
return const_cast<VariableNode *>(this);
|
||||
|
||||
map<int, expr_t>::const_iterator it = trend_symbols_map.find(symb_id);
|
||||
expr_t noTrendLeadLagNode = new VariableNode(datatree, it->first, 0);
|
||||
bool log_trend = get_type() == eLogTrend;
|
||||
expr_t trend = it->second;
|
||||
|
||||
if (get_lag() > 0)
|
||||
{
|
||||
expr_t growthFactorSequence = it->second->decreaseLeadsLags(-1);
|
||||
for (int i = 1; i < get_lag(); i++)
|
||||
growthFactorSequence = datatree.AddTimes(growthFactorSequence, it->second->decreaseLeadsLags(-1*(i+1)));
|
||||
return datatree.AddTimes(noTrendLeadLagNode, growthFactorSequence);
|
||||
expr_t growthFactorSequence = trend->decreaseLeadsLags(-1);
|
||||
if (log_trend)
|
||||
{
|
||||
for (int i = 1; i < get_lag(); i++)
|
||||
growthFactorSequence = datatree.AddPlus(growthFactorSequence, trend->decreaseLeadsLags(-1*(i+1)));
|
||||
return datatree.AddPlus(noTrendLeadLagNode, growthFactorSequence);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 1; i < get_lag(); i++)
|
||||
growthFactorSequence = datatree.AddTimes(growthFactorSequence, trend->decreaseLeadsLags(-1*(i+1)));
|
||||
return datatree.AddTimes(noTrendLeadLagNode, growthFactorSequence);
|
||||
}
|
||||
}
|
||||
else //get_lag < 0
|
||||
{
|
||||
expr_t growthFactorSequence = it->second;
|
||||
for (int i = 1; i < abs(get_lag()); i++)
|
||||
growthFactorSequence = datatree.AddTimes(growthFactorSequence, it->second->decreaseLeadsLags(i));
|
||||
return datatree.AddDivide(noTrendLeadLagNode, growthFactorSequence);
|
||||
expr_t growthFactorSequence = trend;
|
||||
if (log_trend)
|
||||
{
|
||||
for (int i = 1; i < abs(get_lag()); i++)
|
||||
growthFactorSequence = datatree.AddPlus(growthFactorSequence, trend->decreaseLeadsLags(i));
|
||||
return datatree.AddMinus(noTrendLeadLagNode, growthFactorSequence);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 1; i < abs(get_lag()); i++)
|
||||
growthFactorSequence = datatree.AddTimes(growthFactorSequence, trend->decreaseLeadsLags(i));
|
||||
return datatree.AddDivide(noTrendLeadLagNode, growthFactorSequence);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2433,9 +2407,9 @@ UnaryOpNode::replaceTrendVar() const
|
|||
}
|
||||
|
||||
expr_t
|
||||
UnaryOpNode::detrend(int symb_id, expr_t trend) const
|
||||
UnaryOpNode::detrend(int symb_id, bool log_trend, expr_t trend) const
|
||||
{
|
||||
expr_t argsubst = arg->detrend(symb_id, trend);
|
||||
expr_t argsubst = arg->detrend(symb_id, log_trend, trend);
|
||||
return buildSimilarUnaryOpNode(argsubst, datatree);
|
||||
}
|
||||
|
||||
|
@ -3729,10 +3703,10 @@ BinaryOpNode::replaceTrendVar() const
|
|||
}
|
||||
|
||||
expr_t
|
||||
BinaryOpNode::detrend(int symb_id, expr_t trend) const
|
||||
BinaryOpNode::detrend(int symb_id, bool log_trend, expr_t trend) const
|
||||
{
|
||||
expr_t arg1subst = arg1->detrend(symb_id, trend);
|
||||
expr_t arg2subst = arg2->detrend(symb_id, trend);
|
||||
expr_t arg1subst = arg1->detrend(symb_id, log_trend, trend);
|
||||
expr_t arg2subst = arg2->detrend(symb_id, log_trend, trend);
|
||||
return buildSimilarBinaryOpNode(arg1subst, arg2subst, datatree);
|
||||
}
|
||||
|
||||
|
@ -4333,11 +4307,11 @@ TrinaryOpNode::replaceTrendVar() const
|
|||
}
|
||||
|
||||
expr_t
|
||||
TrinaryOpNode::detrend(int symb_id, expr_t trend) const
|
||||
TrinaryOpNode::detrend(int symb_id, bool log_trend, expr_t trend) const
|
||||
{
|
||||
expr_t arg1subst = arg1->detrend(symb_id, trend);
|
||||
expr_t arg2subst = arg2->detrend(symb_id, trend);
|
||||
expr_t arg3subst = arg3->detrend(symb_id, trend);
|
||||
expr_t arg1subst = arg1->detrend(symb_id, log_trend, trend);
|
||||
expr_t arg2subst = arg2->detrend(symb_id, log_trend, trend);
|
||||
expr_t arg3subst = arg3->detrend(symb_id, log_trend, trend);
|
||||
return buildSimilarTrinaryOpNode(arg1subst, arg2subst, arg3subst, datatree);
|
||||
}
|
||||
|
||||
|
@ -4919,11 +4893,11 @@ ExternalFunctionNode::replaceTrendVar() const
|
|||
}
|
||||
|
||||
expr_t
|
||||
ExternalFunctionNode::detrend(int symb_id, expr_t trend) const
|
||||
ExternalFunctionNode::detrend(int symb_id, bool log_trend, expr_t trend) const
|
||||
{
|
||||
vector<expr_t> arguments_subst;
|
||||
for (vector<expr_t>::const_iterator it = arguments.begin(); it != arguments.end(); it++)
|
||||
arguments_subst.push_back((*it)->detrend(symb_id, trend));
|
||||
arguments_subst.push_back((*it)->detrend(symb_id, log_trend, trend));
|
||||
return buildSimilarExternalFunctionNode(arguments_subst, datatree);
|
||||
}
|
||||
|
||||
|
|
|
@ -284,7 +284,6 @@ public:
|
|||
//! Returns the relative period of the most forward term in this expression
|
||||
/*! A negative value means that the expression contains only lagged variables */
|
||||
virtual int maxLead() const = 0;
|
||||
virtual void print_deflator();
|
||||
|
||||
//! Returns a new expression where all the leads/lags have been shifted backwards by the same amount
|
||||
/*!
|
||||
|
@ -390,10 +389,11 @@ public:
|
|||
//! Constructs a new expression where the variable indicated by symb_id has been detrended
|
||||
/*!
|
||||
\param[in] symb_id indicating the variable to be detrended
|
||||
\param[in] expr_t indicating the trend
|
||||
\param[out] expr_t the new binary op pointing to a detrended variable
|
||||
\param[in] log_trend indicates if the trend is in log
|
||||
\param[in] trend indicating the trend
|
||||
\return the new binary op pointing to a detrended variable
|
||||
*/
|
||||
virtual expr_t detrend(int symb_id, expr_t trend) const = 0;
|
||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const = 0;
|
||||
|
||||
//! Add ExprNodes to the provided datatree
|
||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const = 0;
|
||||
|
@ -453,10 +453,9 @@ public:
|
|||
virtual bool containsEndogenous(void) const;
|
||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||
virtual expr_t replaceTrendVar() const;
|
||||
virtual expr_t detrend(int symb_id, expr_t trend) const;
|
||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||
virtual void print_deflator();
|
||||
};
|
||||
|
||||
//! Symbol or variable node
|
||||
|
@ -485,7 +484,6 @@ public:
|
|||
virtual double eval(const eval_context_t &eval_context) const throw (EvalException, EvalExternalFunctionException);
|
||||
virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
|
||||
virtual expr_t toStatic(DataTree &static_datatree) const;
|
||||
virtual void print_deflator();
|
||||
SymbolType
|
||||
get_type() const
|
||||
{
|
||||
|
@ -516,7 +514,7 @@ public:
|
|||
virtual bool containsEndogenous(void) const;
|
||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||
virtual expr_t replaceTrendVar() const;
|
||||
virtual expr_t detrend(int symb_id, expr_t trend) const;
|
||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||
};
|
||||
|
@ -557,7 +555,6 @@ public:
|
|||
virtual void collectTemporary_terms(const temporary_terms_t &temporary_terms, temporary_terms_inuse_t &temporary_terms_inuse, int Curr_Block) const;
|
||||
static double eval_opcode(UnaryOpcode op_code, double v) throw (EvalException, EvalExternalFunctionException);
|
||||
virtual double eval(const eval_context_t &eval_context) const throw (EvalException, EvalExternalFunctionException);
|
||||
virtual void print_deflator();
|
||||
virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
|
||||
//! Returns operand
|
||||
expr_t
|
||||
|
@ -593,7 +590,7 @@ public:
|
|||
virtual bool containsEndogenous(void) const;
|
||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||
virtual expr_t replaceTrendVar() const;
|
||||
virtual expr_t detrend(int symb_id, expr_t trend) const;
|
||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||
};
|
||||
|
@ -637,7 +634,6 @@ public:
|
|||
virtual double eval(const eval_context_t &eval_context) const throw (EvalException, EvalExternalFunctionException);
|
||||
virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
|
||||
virtual expr_t Compute_RHS(expr_t arg1, expr_t arg2, int op, int op_type) const;
|
||||
virtual void print_deflator();
|
||||
//! Returns first operand
|
||||
expr_t
|
||||
get_arg1() const
|
||||
|
@ -683,7 +679,7 @@ public:
|
|||
virtual bool containsEndogenous(void) const;
|
||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||
virtual expr_t replaceTrendVar() const;
|
||||
virtual expr_t detrend(int symb_id, expr_t trend) const;
|
||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||
//! Function to write out the oPowerNode in expr_t terms as opposed to writing out the function itself
|
||||
|
@ -738,7 +734,6 @@ public:
|
|||
virtual int maxEndoLag() const;
|
||||
virtual int maxExoLag() const;
|
||||
virtual int maxLead() const;
|
||||
virtual void print_deflator();
|
||||
virtual expr_t decreaseLeadsLags(int n) const;
|
||||
virtual expr_t substituteEndoLeadGreaterThanTwo(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool deterministic_model) const;
|
||||
//! Creates another TrinaryOpNode with the same opcode, but with a possibly different datatree and arguments
|
||||
|
@ -753,7 +748,7 @@ public:
|
|||
virtual bool containsEndogenous(void) const;
|
||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||
virtual expr_t replaceTrendVar() const;
|
||||
virtual expr_t detrend(int symb_id, expr_t trend) const;
|
||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||
};
|
||||
|
@ -803,7 +798,6 @@ public:
|
|||
bool lhs_rhs, const temporary_terms_t &temporary_terms,
|
||||
const map_idx_t &map_idx, bool dynamic, bool steady_dynamic,
|
||||
deriv_node_temp_terms_t &tef_terms) const;
|
||||
virtual void print_deflator();
|
||||
|
||||
virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
|
||||
virtual expr_t toStatic(DataTree &static_datatree) const;
|
||||
|
@ -828,7 +822,7 @@ public:
|
|||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||
virtual void writePrhs(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const string &ending) const;
|
||||
virtual expr_t replaceTrendVar() const;
|
||||
virtual expr_t detrend(int symb_id, expr_t trend) const;
|
||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||
};
|
||||
|
@ -862,7 +856,6 @@ public:
|
|||
bool lhs_rhs, const temporary_terms_t &temporary_terms,
|
||||
const map_idx_t &map_idx, bool dynamic, bool steady_dynamic,
|
||||
deriv_node_temp_terms_t &tef_terms) const;
|
||||
virtual void print_deflator();
|
||||
};
|
||||
|
||||
class SecondDerivExternalFunctionNode : public ExternalFunctionNode
|
||||
|
@ -888,7 +881,6 @@ public:
|
|||
virtual void writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output_type,
|
||||
const temporary_terms_t &temporary_terms,
|
||||
deriv_node_temp_terms_t &tef_terms) const;
|
||||
virtual void print_deflator();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -107,7 +107,6 @@ ModFile::addStatementAtFront(Statement *st)
|
|||
void
|
||||
ModFile::checkPass()
|
||||
{
|
||||
dynamic_model.print_trend_vars();
|
||||
for (vector<Statement *>::iterator it = statements.begin();
|
||||
it != statements.end(); it++)
|
||||
(*it)->checkPass(mod_file_struct, warnings);
|
||||
|
@ -375,8 +374,8 @@ ModFile::computingPass(bool no_tmp_terms)
|
|||
// Mod file may have no equation (for example in a standalone BVAR estimation)
|
||||
if (dynamic_model.equation_number() > 0)
|
||||
{
|
||||
/*if (nonstationary_variables)
|
||||
trend_dynamic_model.runTrendTest(global_eval_context);*/
|
||||
if (nonstationary_variables)
|
||||
trend_dynamic_model.runTrendTest(global_eval_context);
|
||||
|
||||
// Compute static model and its derivatives
|
||||
dynamic_model.toStatic(static_model);
|
||||
|
|
|
@ -1003,19 +1003,14 @@ ModelTree::computeJacobian(const set<int> &vars)
|
|||
for (set<int>::const_iterator it = vars.begin();
|
||||
it != vars.end(); it++)
|
||||
{
|
||||
int prev_deriv = NNZDerivatives[0];
|
||||
for (int eq = 0; eq < (int) equations.size(); eq++)
|
||||
{
|
||||
expr_t d1 = equations[eq]->getDerivative(*it);
|
||||
if (d1 == Zero)
|
||||
continue;
|
||||
first_derivatives[make_pair(eq, *it)] = d1;
|
||||
++NNZDerivatives[0];
|
||||
}
|
||||
if (NNZDerivatives[0] == prev_deriv)
|
||||
{
|
||||
cout << "the derivatives w.r. to " << symbol_table.getName(*it) << " is always equal to 0\n";
|
||||
}
|
||||
for (int eq = 0; eq < (int) equations.size(); eq++)
|
||||
{
|
||||
expr_t d1 = equations[eq]->getDerivative(*it);
|
||||
if (d1 == Zero)
|
||||
continue;
|
||||
first_derivatives[make_pair(eq, *it)] = d1;
|
||||
++NNZDerivatives[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1418,14 +1413,14 @@ ModelTree::addTrendVariables(vector<int> trend_vars, expr_t growth_factor) throw
|
|||
}
|
||||
|
||||
void
|
||||
ModelTree::addNonstationaryVariables(vector<int> nonstationary_vars, expr_t deflator) throw (TrendException)
|
||||
ModelTree::addNonstationaryVariables(vector<int> nonstationary_vars, bool log_deflator, expr_t deflator) throw (TrendException)
|
||||
{
|
||||
while (!nonstationary_vars.empty())
|
||||
if (nonstationary_symbols_map.find(nonstationary_vars.back()) != nonstationary_symbols_map.end())
|
||||
throw TrendException(symbol_table.getName(nonstationary_vars.back()));
|
||||
else
|
||||
{
|
||||
nonstationary_symbols_map[nonstationary_vars.back()] = deflator;
|
||||
nonstationary_symbols_map[nonstationary_vars.back()] = make_pair(log_deflator, deflator);
|
||||
nonstationary_vars.pop_back();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,9 +45,6 @@ typedef vector< pair<pair<int, int>, pair< int, expr_t > > > block_derivatives_e
|
|||
//! for all blocks derivatives description
|
||||
typedef vector<block_derivatives_equation_variable_laglead_nodeid_t> blocks_derivatives_t;
|
||||
|
||||
//! for all trends
|
||||
typedef map<int, expr_t> trend_symbols_map_t;
|
||||
|
||||
//! Shared code for static and dynamic models
|
||||
class ModelTree : public DataTree
|
||||
{
|
||||
|
@ -136,9 +133,13 @@ protected:
|
|||
|
||||
|
||||
//! Trend variables and their growth factors
|
||||
trend_symbols_map_t trend_symbols_map;
|
||||
map<int, expr_t> trend_symbols_map;
|
||||
|
||||
//! for all trends; the boolean is true if this is a log-trend, false otherwise
|
||||
typedef map<int, pair<bool, expr_t> > nonstationary_symbols_map_t;
|
||||
|
||||
//! Nonstationary variables and their deflators
|
||||
trend_symbols_map_t nonstationary_symbols_map;
|
||||
nonstationary_symbols_map_t nonstationary_symbols_map;
|
||||
|
||||
//! vector of block reordered variables and equations
|
||||
vector<int> equation_reordered, variable_reordered, inv_equation_reordered, inv_variable_reordered;
|
||||
|
@ -304,8 +305,8 @@ public:
|
|||
int equation_number() const;
|
||||
//! Adds a trend variable with its growth factor
|
||||
void addTrendVariables(vector<int> trend_vars, expr_t growth_factor) throw (TrendException);
|
||||
//! Adds a nonstationary variable with its deflator
|
||||
void addNonstationaryVariables(vector<int> nonstationary_vars, expr_t deflator) throw (TrendException);
|
||||
//! Adds a nonstationary variables with their (common) deflator
|
||||
void addNonstationaryVariables(vector<int> nonstationary_vars, bool log_deflator, expr_t deflator) throw (TrendException);
|
||||
void set_cutoff_to_zero();
|
||||
//! Helper for writing the Jacobian elements in MATLAB and C
|
||||
/*! Writes either (i+1,j+1) or [i+j*no_eq] */
|
||||
|
|
|
@ -204,9 +204,9 @@ ParsingDriver::begin_trend()
|
|||
}
|
||||
|
||||
void
|
||||
ParsingDriver::declare_trend_var(string *name, string *tex_name)
|
||||
ParsingDriver::declare_trend_var(bool log_trend, string *name, string *tex_name)
|
||||
{
|
||||
declare_symbol(name, eTrend, tex_name);
|
||||
declare_symbol(name, log_trend ? eLogTrend : eTrend, tex_name);
|
||||
declared_trend_vars.push_back(mod_file->symbol_table.getID(*name));
|
||||
delete name;
|
||||
if (tex_name != NULL)
|
||||
|
@ -339,11 +339,11 @@ ParsingDriver::declare_nonstationary_var(string *name, string *tex_name)
|
|||
}
|
||||
|
||||
void
|
||||
ParsingDriver::end_nonstationary_var(expr_t deflator)
|
||||
ParsingDriver::end_nonstationary_var(bool log_deflator, expr_t deflator)
|
||||
{
|
||||
try
|
||||
{
|
||||
dynamic_model->addNonstationaryVariables(declared_nonstationary_vars, deflator);
|
||||
dynamic_model->addNonstationaryVariables(declared_nonstationary_vars, log_deflator, deflator);
|
||||
}
|
||||
catch (DataTree::TrendException &e)
|
||||
{
|
||||
|
|
|
@ -631,13 +631,13 @@ public:
|
|||
//! Switches datatree
|
||||
void begin_trend();
|
||||
//! Declares a trend variable with its growth factor
|
||||
void declare_trend_var(string *name, string *tex_name = NULL);
|
||||
void declare_trend_var(bool log_trend, string *name, string *tex_name = NULL);
|
||||
//! Ends declaration of trend variable
|
||||
void end_trend_var(expr_t growth_factor);
|
||||
//! Declares a nonstationary variable with its deflator
|
||||
void declare_nonstationary_var(string *name, string *tex_name = NULL);
|
||||
//! Ends declaration of nonstationary variable
|
||||
void end_nonstationary_var(expr_t deflator);
|
||||
void end_nonstationary_var(bool log_deflator, expr_t deflator);
|
||||
//! Add a graph format to the list of formats requested
|
||||
void add_graph_format(const string &name);
|
||||
//! Add the graph_format option to the OptionsList structure
|
||||
|
|
|
@ -502,7 +502,7 @@ SymbolTable::getTrendVarIds() const
|
|||
vector <int> trendVars;
|
||||
for (symbol_table_type::const_iterator it = symbol_table.begin();
|
||||
it != symbol_table.end(); it++)
|
||||
if (getType(it->second) == eTrend)
|
||||
if (getType(it->second) == eTrend || getType(it->second) == eLogTrend)
|
||||
trendVars.push_back(it->second);
|
||||
return trendVars;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*.cod
|
||||
*.c
|
||||
*.tex
|
||||
*.TeX
|
||||
*.jnl
|
||||
*.swp
|
||||
*.dat
|
||||
|
|
|
@ -146,7 +146,9 @@ MODFILES = \
|
|||
deterministic_simulations/rbc_det4.mod \
|
||||
deterministic_simulations/rbc_det5.mod \
|
||||
walsh.mod \
|
||||
measurement_errors/fs2000_corr_me_ml_mcmc/fs2000_corr_ME.mod
|
||||
measurement_errors/fs2000_corr_me_ml_mcmc/fs2000_corr_ME.mod \
|
||||
trend_var/fs2000_nonstationary.mod \
|
||||
trend_var/fs2000_log_nonstationary.mod
|
||||
|
||||
XFAIL_MODFILES = ramst_xfail.mod
|
||||
|
||||
|
|
|
@ -13,7 +13,6 @@ rho = 0.7;
|
|||
psi = 0.787;
|
||||
del = 0.02;
|
||||
|
||||
//model(block, bytecode);
|
||||
model;
|
||||
dA = exp(gam+e_a);
|
||||
log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m;
|
||||
|
@ -57,41 +56,18 @@ steady;
|
|||
|
||||
check;
|
||||
|
||||
//stoch_simul(irf=0);
|
||||
stoch_simul(irf=0);
|
||||
|
||||
conditional_forecast_paths;
|
||||
var gp_obs;
|
||||
periods 1 2:5;
|
||||
//values 0.05;
|
||||
//values 0.98 1.00797;
|
||||
values 0.98 0.99;
|
||||
//expectation perfect_foresight;
|
||||
var gy_obs;
|
||||
periods 1 2 3:5;
|
||||
//values 0.01 -0.02 0;
|
||||
//values 0.85 0.85 0.95;
|
||||
values 0.95 0.95 0.99;
|
||||
//expectation perfect_foresight;
|
||||
values 0.01 -0.02 0;
|
||||
var gp_obs;
|
||||
periods 1:5;
|
||||
values 0.05;
|
||||
end;
|
||||
|
||||
options_.stack_solve_algo = 0;
|
||||
options_.maxit_ = 50;
|
||||
conditional_forecast(parameter_set=calibration, controlled_varexo=(e_a,e_m));
|
||||
|
||||
error('Test disabled, enters an infinite loop')
|
||||
plot_conditional_forecast(periods=10) gy_obs gp_obs;
|
||||
|
||||
conditional_forecast(parameter_set=calibration, controlled_varexo=(e_m,e_a), simulation_type = deterministic);
|
||||
|
||||
/*shocks;
|
||||
var e_a;
|
||||
periods 1 2 3 4 5;
|
||||
values -0.0109 -0.0122 -0.0137 -0.0154 -0.0173;
|
||||
var e_m;
|
||||
periods 1 2 3 4 5;
|
||||
values -0.1242 -0.0386 -0.0392 -0.0398 -0.0405;
|
||||
end;
|
||||
simul(periods=40);*/
|
||||
rplot gy_obs;
|
||||
rplot gp_obs;
|
||||
//if ~(exist('OCTAVE_VERSION') && octave_ver_less_than('3.4.0'))
|
||||
//plot_conditional_forecast(periods=10) gy_obs gp_obs;
|
||||
//end
|
||||
|
|
|
@ -97,8 +97,6 @@ varobs gp_obs gy_obs;
|
|||
|
||||
options_.solve_tolf = 1e-12;
|
||||
|
||||
error('Test disabled, enters an infinite loop')
|
||||
|
||||
// Metropolis replications are too few, this is only for testing purpose
|
||||
estimation(order=1,datafile=fsdat_simul,nobs=192,loglinear,mh_replic=10000,mh_nblocks=1,mh_jscale=0.8);
|
||||
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
* This file is a modified version of 'fs2000.mod'.
|
||||
*
|
||||
* The difference is that, here, the equations are written in non-stationary form,
|
||||
* all variables are taken in logs, and Dynare automatically does the detrending.
|
||||
*
|
||||
* Also note that "m" and "dA" in 'fs2000.mod' are here called "gM" and "gA"
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2004-2013 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
* Dynare is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Dynare is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
var gM gA;
|
||||
log_trend_var(log_growth_factor=gA) A;
|
||||
log_trend_var(log_growth_factor=gM) M;
|
||||
var(log_deflator=A) k c y;
|
||||
var(log_deflator=M(-1)-A) P;
|
||||
var(log_deflator=M(-1)) W l d;
|
||||
var R n;
|
||||
varexo e_a e_m;
|
||||
|
||||
parameters alp bet gam mst rho psi del;
|
||||
|
||||
alp = 0.33;
|
||||
bet = 0.99;
|
||||
gam = 0.003;
|
||||
mst = 1.011;
|
||||
rho = 0.7;
|
||||
psi = 0.787;
|
||||
del = 0.02;
|
||||
|
||||
model;
|
||||
gA = gam+e_a;
|
||||
gM = (1-rho)*log(mst) + rho*gM(-1)+e_m;
|
||||
exp(c)+exp(k) = exp(k(-1))^alp*(exp(A)*exp(n))^(1-alp)+(1-del)*exp(k(-1));
|
||||
P+c = M;
|
||||
P-(c(+1)+P(+1))=log(bet)+P(+1)+log(alp*exp(k)^(alp-1)*(exp(A(+1)+n(+1)))^(1-alp)+(1-del))-(c(+2)+P(+2));
|
||||
log(psi/(1-psi))+(c+P-log(1-exp(n)))=W;
|
||||
R = P+log(1-alp)+alp*k(-1)+(1-alp)*A+(-alp)*n-W;
|
||||
W = l-n;
|
||||
exp(M)-exp(M(-1))+exp(d) = exp(l);
|
||||
-(c+P)=log(bet)+R-(c(+1)+P(+1));
|
||||
y = alp*k(-1)+(1-alp)*(A+n);
|
||||
end;
|
||||
|
||||
initval;
|
||||
k = log(6);
|
||||
gM = log(mst);
|
||||
P = log(2.25);
|
||||
c = log(0.45);
|
||||
W = log(4);
|
||||
R = log(1.02);
|
||||
d = log(0.85);
|
||||
n = log(0.19);
|
||||
l = log(0.86);
|
||||
y = log(0.6);
|
||||
gA = gam;
|
||||
end;
|
||||
|
||||
shocks;
|
||||
var e_a; stderr 0.014;
|
||||
var e_m; stderr 0.005;
|
||||
end;
|
||||
|
||||
steady;
|
||||
|
||||
check;
|
||||
|
||||
stoch_simul;
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
* This file is a modified version of 'fs2000.mod'.
|
||||
*
|
||||
* The difference is that, here, the equations are written in non-stationary form,
|
||||
* and Dynare automatically does the detrending.
|
||||
*
|
||||
* Also note that "m" and "dA" in 'fs2000.mod' are here called "gM" and "gA"
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2004-2010 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
* Dynare is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Dynare is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
var gM gA;
|
||||
trend_var(growth_factor=gA) A;
|
||||
trend_var(growth_factor=gM) M;
|
||||
var(deflator=A) k c y;
|
||||
var(deflator=M(-1)/A) P;
|
||||
var(deflator=M(-1)) W l d;
|
||||
var R n;
|
||||
varexo e_a e_m;
|
||||
|
||||
parameters alp bet gam mst rho psi del;
|
||||
|
||||
alp = 0.33;
|
||||
bet = 0.99;
|
||||
gam = 0.003;
|
||||
mst = 1.011;
|
||||
rho = 0.7;
|
||||
psi = 0.787;
|
||||
del = 0.02;
|
||||
|
||||
model;
|
||||
gA = exp(gam+e_a);
|
||||
log(gM) = (1-rho)*log(mst) + rho*log(gM(-1))+e_m;
|
||||
c+k = k(-1)^alp*(A*n)^(1-alp)+(1-del)*k(-1);
|
||||
P*c = M;
|
||||
P/(c(+1)*P(+1))=bet*P(+1)*(alp*k^(alp-1)*(A(+1)*n(+1))^(1-alp)+(1-del))/(c(+2)*P(+2));
|
||||
(psi/(1-psi))*(c*P/(1-n))=W;
|
||||
R = P*(1-alp)*k(-1)^alp*A^(1-alp)*n^(-alp)/W;
|
||||
W = l/n;
|
||||
M-M(-1)+d = l;
|
||||
1/(c*P)=bet*R/(c(+1)*P(+1));
|
||||
y = k(-1)^alp*(A*n)^(1-alp);
|
||||
end;
|
||||
|
||||
initval;
|
||||
k = 6;
|
||||
gM = mst;
|
||||
P = 2.25;
|
||||
c = 0.45;
|
||||
W = 4;
|
||||
R = 1.02;
|
||||
d = 0.85;
|
||||
n = 0.19;
|
||||
l = 0.86;
|
||||
y = 0.6;
|
||||
gA = exp(gam);
|
||||
end;
|
||||
|
||||
shocks;
|
||||
var e_a; stderr 0.014;
|
||||
var e_m; stderr 0.005;
|
||||
end;
|
||||
|
||||
steady;
|
||||
|
||||
check;
|
||||
|
||||
stoch_simul;
|
Loading…
Reference in New Issue