89 lines
3.0 KiB
Modula-2
89 lines
3.0 KiB
Modula-2
// --+ options: stochastic,json=compute +--
|
|
|
|
var foo z x y;
|
|
varexo e_x e_y e_z;
|
|
parameters a b c d e f beta ;
|
|
|
|
a = .9;
|
|
b = -.2;
|
|
c = .3;
|
|
f = .8;
|
|
d = .5;
|
|
e = .4;
|
|
|
|
beta = 1/(1+.02);
|
|
|
|
// Define a VAR model from a subset of equations in the model block.
|
|
var_model(model_name = toto, eqtags = [ 'X' 'Y' 'Z' ]);
|
|
|
|
/* Define a VAR_EXPECTATION_MODEL
|
|
** ------------------------------
|
|
**
|
|
** model_name: the name of the VAR_EXPECTATION_MODEL (mandatory).
|
|
** var_model_name: the name of the VAR model used for the expectations (mandatory).
|
|
** variable: the name of the variable to be forecasted (mandatory).
|
|
** horizon: the horizon forecast (mandatory).
|
|
** discount: the discount factor, which can be a value or a declared parameter (default is 1.0, no discounting).
|
|
** time_shift: shifts the information set to the past, must be a non positive scalar. By default, expectations
|
|
** about `variable` in period `t+horizon` are formed in period t (time_shift=0)
|
|
**
|
|
**
|
|
** The `horizon` parameter can be an integer in which case the (discounted) `horizon` step ahead forecast
|
|
** is computed using the VAR model `var_model_name`. Alternatively, `horizon` can be a range. In this case
|
|
** VAR_EXPECTATION_MODEL returns a discounted sum of expected values. If `horizon` is set equal to the range
|
|
** 0:Inf, then VAR_EXPECTATION_MODEL computes:
|
|
**
|
|
** ∑ βʰ Eₜ[yₜ₊ₕ]
|
|
**
|
|
** where the sum is over h=0,…,∞ and the conditional expectations are computed with VAR model `var_model_name`.
|
|
*/
|
|
|
|
var_expectation_model(model_name = varexp, expression = x, auxiliary_model_name = toto, time_shift=-2, horizon = 2, discount = beta) ;
|
|
|
|
|
|
model;
|
|
[ name = 'X' ]
|
|
x = a*x(-1) + b*x(-2) + c*z(-2) + e_x;
|
|
[ name = 'Z' ]
|
|
z = f*z(-1) + e_z;
|
|
[ name = 'Y' ]
|
|
y = d*y(-2) + e*z(-1) + e_y;
|
|
|
|
foo = .5*foo(-1) + var_expectation(varexp);
|
|
end;
|
|
|
|
|
|
// Initialize the VAR expectation model, will build the companion matrix of the VAR.
|
|
var_expectation.initialize('varexp')
|
|
|
|
// Update VAR_EXPECTATION reduced form parameters
|
|
var_expectation.update('varexp');
|
|
|
|
// Print equations where the variable appears in
|
|
fprintf('x is in: \n')
|
|
print_equations('x')
|
|
fprintf('\n')
|
|
|
|
fprintf('y is in: \n')
|
|
str = print_equations('y', true);
|
|
fprintf('\n')
|
|
|
|
|
|
if ~isfield(M_.var_expectation.varexp, 'time_shift') || ~isequal(M_.var_expectation.varexp.time_shift, -2)
|
|
error('Preprocessor does not honour time_shift option as expected.')
|
|
end
|
|
|
|
str = strrep(str, 'foo = .5*foo(-1)', '');
|
|
str = strrep(str, '+ var_expectation_model_varexp_constant', '');
|
|
str = strrep(str, '+ var_expectation_model_varexp_x_0*x(-2)', '');
|
|
str = strrep(str, '+ var_expectation_model_varexp_y_0*y(-2)', '');
|
|
str = strrep(str, '+ var_expectation_model_varexp_z_0*z(-2)', '');
|
|
str = strrep(str, '+ var_expectation_model_varexp_x_1*x(-3)', '');
|
|
str = strrep(str, '+ var_expectation_model_varexp_y_1*y(-3)', '');
|
|
str = strrep(str, '+ var_expectation_model_varexp_z_1*z(-3)', '');
|
|
str = strrep(str, ';', '');
|
|
|
|
if ~isempty(strtrim(str))
|
|
error('Printed equation is wrong.')
|
|
end
|