diff --git a/doc/manual/source/the-model-file.rst b/doc/manual/source/the-model-file.rst index 1616d5b3c..b77d1320c 100644 --- a/doc/manual/source/the-model-file.rst +++ b/doc/manual/source/the-model-file.rst @@ -14709,7 +14709,7 @@ simply add the exogenous variables to the PAC equation (without the weight ``trend_component_model``, to compute the VAR based expectations for the expected changes in the target, *i.e.* to evaluate :math:`\sum_{i=0}^{\infty} d_i \Delta y^{\star}_{t+i}`. The infinite sum - will then be replaced by a linear combination of the variables involved in + will then be replaced by a linear combination, defined by a vector :math:`h`, of the variables involved in the companion representation of the auxiliary model. The weights defining the linear combination are nonlinear functions of the :math:`(a_i)_{i=0}^{m-1}` coefficients in the PAC equation. This option is @@ -14729,6 +14729,16 @@ simply add the exogenous variables to the PAC equation (without the weight or expression is given) is consistent with the asymptotic growth rate of the endogenous variable. + .. option:: kind = dd | dl + + Instructs Dynare how to compute the vector :math:`h`, the weights + defining the linear combination of the companion VAR + variables. The default value ``dd`` must be used if the target + appears in first difference in the auxiliary model, see equation + (A.79) in *Brayton et alii (2000)*, while value ``dl`` must be + used if the target shows up in level in the auxiliary model, + equation (A.74) in *Brayton et alii (2000)*. + .. operator:: pac_expectation (NAME_OF_PAC_MODEL); @@ -14739,7 +14749,89 @@ simply add the exogenous variables to the PAC equation (without the weight the variables involved in the companion representation of the auxiliary model or by a recursive forward equation. - |br| + +The PAC equation target can be composite and defined as a weighted sum +of stationary and non stationary components. Such a target requires an +additional equation in the model block, with the target variable on +the left hand-side and the components in the right hand-side. Each +component must be an endogenous variable in the auxiliary model. The +characteristics of each component must be described in the +``pac_target_info`` block, see below, and the +``pac_target_nonstationary`` operator must be used in the error +correction term of the PAC equation to link the target to the provided +description. Note that composite targets make only sense if the +auxiliary model is not a trend component model (where all the +variables are non stationary). + +.. block:: pac_target_info (NAME_OF_PAC_MODEL); + + |br| This block enables the user to provide the properties of each + component of a target in PAC models with a composite target. The + ``NAME_OF_PAC_MODEL`` argument refers to a PAC model (must match + the value of option ``model_name`` in the declaration of a PAC + model). + + On the first line of the block, the name of the composite target + variable must be provided using the following syntax:: + + target VARIABLE_NAME ; + + where ``VARIABLE_NAME`` is a declared endogenous variable, its + associated equation is not part of the auxiliary model but all the + components (the variables on the right hand-side) must be defined + in the auxiliary model. Next, the following line declares the name + of the auxilary variable that will appear in the error correction + term, this variable contains only the non stationary components of + the target:: + + auxname_target_nonstationary NAME ; + + The block should contain the following group of lines for each + stationary component:: + + component STATIONARY_VARIABLE_NAME ; + kind ll ; + auxname AUX_VAR_NAME ; + + + where ``STATIONARY_VARIABLE_NAME`` is the name of a stationary + variable appearing in the right hand-side of the equation defining + the target ``VARIABLE_NAME``. The second line instructs Dynare that + the component appears in levels in the auxiliary model and in the + PAC expectations. The third line specifies the name of the + auxiliary variable created by Dynare for the component of the PAC + expectation related to ``STATIONARY_VARIABLE_NAME``. + + The block should contain the following group of lines for each + nonstationary component:: + + component NONSTATIONARY_VARIABLE_NAME ; + kind dd | dl ; + auxname AUX_VAR_NAME ; + growth PARAMETER_NAME | VARIABLE_NAME | EXPRESSION | DOUBLE ; + + where ``NONSTATIONARY_VARIABLE_NAME`` is the name of a + nonstationary variable appearing in the right hand-side of the + equation defining the target ``VARIABLE_NAME``. The second line + instructs Dynare on how to calculate the weights that define the linear + combination of the companion VAR variables. Use value ``dd`` if the + target appears in first difference in the auxiliary model, or + ``dl`` if the target shows up in level in the auxiliary model. The + third line sets the name of the auxiliary variable created by + Dynare for the component of the PAC expectation related to + ``NONSTATIONARY_VARIABLE_NAME``. The fourth line is mandatory if a + growth neutrality correction is required. The provided value for + this option must be consistent with the asymptotic growth rate of + the PAC endogenous variable. + + +.. operator:: pac_target_nonstationary (NAME_OF_PAC_MODEL); + + |br| This operator is only required in presence of a composite + target in the PAC equation. The operator, used in the error + correction term of the PAC equation, selects the non stationary + components of the target. + .. matcomm:: pac.initialize(NAME_OF_PAC_MODEL); .. matcomm:: pac.update(NAME_OF_PAC_MODEL); @@ -14752,33 +14844,33 @@ simply add the exogenous variables to the PAC equation (without the weight the infinite sum in the MCE case). -*Example* +*Example (trend component auxiliary model)* :: trend_component_model(model_name=toto, eqtags=['eq:x1', 'eq:x2', 'eq:x1bar', 'eq:x2bar'], targets=['eq:x1bar', 'eq:x2bar']); - pac_model(auxiliary_model_name=toto, discount=beta, growth=diff(x1(-1)), model_name=pacman); + pac_model(auxiliary_model_name=toto, discount=beta, model_name=pacman); model; - [name='eq:y'] - y = rho_1*y(-1) + rho_2*y(-2) + ey; + [name='eq:y'] + y = (1-rho_1-rho_2)*diff(x2(-1)) + rho_1*y(-1) + rho_2*y(-2) + ey; - [name='eq:x1'] - diff(x1) = a_x1_0*(x1(-1)-x1bar(-1)) + a_x1_1*diff(x1(-1)) + a_x1_2*diff(x1(-2)) + a_x1_x2_1*diff(x2(-1)) + a_x1_x2_2*diff(x2(-2)) + ex1; + [name='eq:x1'] + diff(x1) = a_x1_0*(x1(-1)-x1bar(-1)) + a_x1_1*diff(x1(-1)) + a_x1_2*diff(x1(-2)) + a_x1_x2_1*diff(x2(-1)) + a_x1_x2_2*diff(x2(-2)) + ex1; - [name='eq:x2'] - diff(x2) = a_x2_0*(x2(-1)-x2bar(-1)) + a_x2_1*diff(x1(-1)) + a_x2_2*diff(x1(-2)) + a_x2_x1_1*diff(x2(-1)) + a_x2_x1_2*diff(x2(-2)) + ex2; + [name='eq:x2'] + diff(x2) = a_x2_0*(x2(-1)-x2bar(-1)) + a_x2_1*diff(x1(-1)) + a_x2_2*diff(x1(-2)) + a_x2_x1_1*diff(x2(-1)) + a_x2_x1_2*diff(x2(-2)) + ex2; - [name='eq:x1bar'] - x1bar = x1bar(-1) + ex1bar; + [name='eq:x1bar'] + x1bar = x1bar(-1) + ex1bar; - [name='eq:x2bar'] - x2bar = x2bar(-1) + ex2bar; + [name='eq:x2bar'] + x2bar = x2bar(-1) + ex2bar; - [name='zpac'] - diff(z) = e_c_m*(x1(-1)-z(-1)) + c_z_1*diff(z(-1)) + c_z_2*diff(z(-2)) + pac_expectation(pacman) + ez; + [name='zpac'] + diff(z) = e_c_m*(x1(-1)-z(-1)) + c_z_1*diff(z(-1)) + c_z_2*diff(z(-2)) + pac_expectation(pacman) + ez; end; @@ -14787,6 +14879,51 @@ simply add the exogenous variables to the PAC equation (without the weight pac.update.expectation('pacman'); +*Example (VAR auxiliary model and composite target)* + + :: + + var_model(model_name=toto, eqtags=['eq:x', 'eq:y']); + + pac_model(auxiliary_model_name=toto, discount=beta, model_name=pacman); + + pac_target_info(pacman); + + target v; + auxname_target_nonstationary vns; + + component y; + auxname pv_y_; + kind ll; + + component x; + growth diff(x(-1)); + auxname pv_dx_; + kind dd; + + end; + + model; + + [name='eq:y'] + y = a_y_1*y(-1) + a_y_2*diff(x(-1)) + b_y_1*y(-2) + b_y_2*diff(x(-2)) + ey ; + + + [name='eq:x'] + diff(x) = b_x_1*y(-2) + b_x_2*diff(x(-1)) + ex ; + + [name='eq:v'] + v = x + d_y*y ; // Composite PAC target, no residuals here only variables defined in the auxiliary model. + + [name='zpac'] + diff(z) = e_c_m*(pac_target_nonstationary(pacman)-z(-1)) + c_z_1*diff(z(-1)) + c_z_2*diff(z(-2)) + pac_expectation(pacman) + ez; + + end; + + pac.initialize('pacman'); + + pac.update.expectation('pacman'); + Estimation of a PAC equation ---------------------------- diff --git a/doc/manual/utils/dynare_lex.py b/doc/manual/utils/dynare_lex.py index 855d1befe..be4706fe5 100644 --- a/doc/manual/utils/dynare_lex.py +++ b/doc/manual/utils/dynare_lex.py @@ -60,7 +60,7 @@ class DynareLexer(RegexLexer): "addSeries","addParagraph","addVspace","write","compile") operators = ( - "STEADY_STATE","EXPECTATION","var_expectation","pac_expectation") + "STEADY_STATE","EXPECTATION","var_expectation","pac_expectation","pac_target_nonstationary") macro_dirs = ( "@#includepath", "@#include", "@#define", "@#if", @@ -83,7 +83,8 @@ class DynareLexer(RegexLexer): 'osr_params_bounds','ramsey_constraints','irf_calibration', 'moment_calibration','identification','svar_identification', 'matched_moments','occbin_constraints','surprise','overwrite','bind','relax', - 'verbatim','end','node','cluster','paths','hooks'), prefix=r'\b', suffix=r'\s*\b'),Keyword.Reserved), + 'verbatim','end','node','cluster','paths','hooks','target','pac_target_info','auxname_target_nonstationary', + 'component', 'growth', 'auxname', 'kind'), prefix=r'\b', suffix=r'\s*\b'),Keyword.Reserved), # FIXME: Commands following multiline comments are not highlighted properly. (words(commands + report_commands,