Remove aux variables from target definition (PAC).
parent
e2694381dd
commit
e7d11dd7b1
|
@ -201,6 +201,7 @@ try
|
|||
% Note that auxlhs and rhs are already defined in the previous block, it is not possible to be here if isempty(ispac) is true.
|
||||
auxlhs{end+1} = M_.endo_names{M_.pac.(ispac.name).ec.vars(M_.pac.(ispac.name).ec.istarget)};
|
||||
rhs{end+1} = M_.aux_vars(strmatch(auxlhs{end}, M_.endo_names, 'exact')==[M_.aux_vars(:).endo_index]).orig_expr;
|
||||
rhs{end} = remove_aux_variables_from_expression(rhs{end}, M_);
|
||||
RHS = strrep(RHS, sprintf('pac_target_nonstationary(model_name = %s)', ispac.name), sprintf('%s(-1)', auxlhs{end}));
|
||||
end
|
||||
% Print equation for unrolled PAC/VAR-expectation and update
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
function expression = remove_aux_variables_from_expression(expression, DynareModel)
|
||||
|
||||
% Copyright © 2022 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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
% Get list of endogenous variables in expression
|
||||
list_of_words = regexp(expression, '\<\w*\>', 'match');
|
||||
list_of_words = setdiff(list_of_words, DynareModel.param_names);
|
||||
list_of_words = setdiff(list_of_words, DynareModel.exo_names);
|
||||
isnotanumber = isnan(str2double(list_of_words));
|
||||
list_of_words = list_of_words(isnotanumber);
|
||||
list_of_words = setdiff(list_of_words, {'diff','log','exp'});
|
||||
|
||||
for i=1:length(list_of_words)
|
||||
id = find(strcmp(list_of_words{i}, DynareModel.endo_names));
|
||||
if isempty(id) || id<=DynareModel.orig_endo_nbr
|
||||
continue
|
||||
end
|
||||
auxinfo = DynareModel.aux_vars(get_aux_variable_id(id));
|
||||
expression = regexprep(expression, sprintf('\\<%s\\>', list_of_words{i}), auxinfo.orig_expr);
|
||||
end
|
|
@ -534,6 +534,7 @@ ECB_MODFILES = \
|
|||
pac/var-12/example2.mod \
|
||||
pac/var-12/example3.mod \
|
||||
pac/var-12/example4.mod \
|
||||
pac/var-12/example5.mod \
|
||||
pac/var-12/example11.mod \
|
||||
pac/var-12/example12.mod \
|
||||
pac/trend-component-1/example1.mod \
|
||||
|
@ -1568,6 +1569,8 @@ clean-local:
|
|||
|
||||
rm -f optimal_policy/Ramsey/oo_ramsey_policy_initval.mat
|
||||
|
||||
rm -rf tests/pac/var-12/toto
|
||||
|
||||
find . -name "*.tex" -type f -delete
|
||||
find . -name "*.aux" -type f -delete
|
||||
find . -name "*.log" -type f -delete
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
// --+ options: json=compute, stochastic +--
|
||||
|
||||
var y x z w v;
|
||||
|
||||
varexo ex ey ez ew;
|
||||
|
||||
parameters a_y_1 a_y_2 b_y_1 b_y_2 b_x_1 b_x_2 d_y; // VAR parameters
|
||||
|
||||
parameters beta e_c_m c_z_1 c_z_2; // PAC equation parameters
|
||||
|
||||
a_y_1 = .2;
|
||||
a_y_2 = .3;
|
||||
b_y_1 = .1;
|
||||
b_y_2 = .4;
|
||||
b_x_1 = -.1;
|
||||
b_x_2 = -.2;
|
||||
d_y = .5;
|
||||
|
||||
|
||||
beta = .9;
|
||||
e_c_m = .1;
|
||||
c_z_1 = .7;
|
||||
c_z_2 = -.3;
|
||||
|
||||
var_model(model_name=toto, structural, eqtags=['eq:x', 'eq:w', '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 log(x);
|
||||
growth diff(log(x(-2)));
|
||||
auxname pv_dx_;
|
||||
kind dd;
|
||||
|
||||
component log(w);
|
||||
growth diff(log(x(-2)));
|
||||
auxname pv_dw_;
|
||||
kind dd;
|
||||
|
||||
end;
|
||||
|
||||
model;
|
||||
|
||||
[name='eq:y']
|
||||
y = a_y_1*y(-1) + a_y_2*diff(log(x(-1))) + b_y_1*y(-2) + b_y_2*diff(log(x(-2))) + ey ;
|
||||
|
||||
|
||||
[name='eq:x']
|
||||
diff(log(x)) = b_x_1*y(-2) + b_x_2*diff(log(x(-1))) + ex ;
|
||||
|
||||
[name='eq:w']
|
||||
diff(log(w)) = b_x_1*y(-2) + b_x_2*diff(log(w(-1))) + ew ;
|
||||
|
||||
[name='eq:v']
|
||||
v = log(x) + .5*log(w) + d_y*y ;
|
||||
|
||||
[name='eq:pac']
|
||||
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;
|
||||
|
||||
// Initialize the PAC model (build the Companion VAR representation for the auxiliary model).
|
||||
pac.initialize('pacman');
|
||||
|
||||
// Update the parameters of the PAC expectation model (h0 and h1 vectors).
|
||||
pac.update.expectation('pacman');
|
||||
|
||||
// Print expanded PAC_EXPECTATION term.
|
||||
pac.print('pacman', 'eq:pac');
|
||||
|
||||
cherrypick('example5', 'toto', {'eq:pac'});
|
Loading…
Reference in New Issue