Fix evaluate routine if PAC's growth option is constant.
parent
7f075ca109
commit
1fd4904ccc
|
@ -361,32 +361,35 @@ if isequal(expectationmodelkind, 'pac') && growth_correction
|
|||
pgrowth = M_.params(expectationmodel.growth_neutrality_param_index);
|
||||
for iter = 1:numel(expectationmodel.growth_linear_comb)
|
||||
vgrowth='';
|
||||
variable = [];
|
||||
if expectationmodel.growth_linear_comb(iter).exo_id > 0
|
||||
variable = M_.exo_names{expectationmodel.growth_linear_comb(iter).exo_id};
|
||||
elseif expectationmodel.growth_linear_comb(iter).endo_id > 0
|
||||
variable = M_.endo_names{expectationmodel.growth_linear_comb(iter).endo_id};
|
||||
end
|
||||
[variable, transformations] = rewrite_aux_variable(variable, M_);
|
||||
if isempty(transformations)
|
||||
if expectationmodel.growth_linear_comb(iter).lag ~= 0
|
||||
variable = sprintf('%s(%d)', variable, expectationmodel.growth_linear_comb(iter).lag);
|
||||
end
|
||||
else
|
||||
for k=rows(transformations):-1:1
|
||||
if isequal(transformations{k,1}, 'lag')
|
||||
variable = sprintf('%s.lag(%u)', variable, -transformations{k,2});
|
||||
elseif isequal(transformations{k,1}, 'diff')
|
||||
if isempty(transformations{k,2})
|
||||
variable = sprintf('%s.%s()', variable, transformations{k,1});
|
||||
if ~isempty(variable)
|
||||
[variable, transformations] = rewrite_aux_variable(variable, M_);
|
||||
if isempty(transformations)
|
||||
if expectationmodel.growth_linear_comb(iter).lag ~= 0
|
||||
variable = sprintf('%s(%d)', variable, expectationmodel.growth_linear_comb(iter).lag);
|
||||
end
|
||||
else
|
||||
for k=rows(transformations):-1:1
|
||||
if isequal(transformations{k,1}, 'lag')
|
||||
variable = sprintf('%s.lag(%u)', variable, -transformations{k,2});
|
||||
elseif isequal(transformations{k,1}, 'diff')
|
||||
if isempty(transformations{k,2})
|
||||
variable = sprintf('%s.%s()', variable, transformations{k,1});
|
||||
else
|
||||
variable = sprintf('%s(-%u).%s()', variable, transformations{k,2}, transformations{k,1});
|
||||
end
|
||||
else
|
||||
variable = sprintf('%s(-%u).%s()', variable, transformations{k,2}, transformations{k,1});
|
||||
variable = sprintf('%s.%s()', variable, transformations{k});
|
||||
end
|
||||
else
|
||||
variable = sprintf('%s.%s()', variable, transformations{k});
|
||||
end
|
||||
end
|
||||
vgrowth = strcat('dbase.', variable);
|
||||
end
|
||||
vgrowth = strcat('dbase.', variable);
|
||||
if expectationmodel.growth_linear_comb(iter).param_id > 0
|
||||
if ~isempty(vgrowth)
|
||||
vgrowth = sprintf('%1.16f*%s',M_.params(expectationmodel.growth_linear_comb(iter).param_id), vgrowth);
|
||||
|
@ -408,8 +411,8 @@ if isequal(expectationmodelkind, 'pac') && growth_correction
|
|||
linearCombination = sprintf('%s-%s', linearCombination, vgrowth);
|
||||
end
|
||||
else
|
||||
linearCombination = vgrowth;
|
||||
end
|
||||
linearCombination = vgrowth;
|
||||
end
|
||||
end % loop over growth linear combination elements
|
||||
growthcorrection = sprintf('%1.16f*(%s)', pgrowth, linearCombination);
|
||||
else
|
||||
|
@ -419,32 +422,35 @@ if isequal(expectationmodelkind, 'pac') && growth_correction
|
|||
pgrowth = targetcoefficients(i)*M_.params(expectationmodel.components(i).growth_neutrality_param_index);
|
||||
for iter = 1:numel(expectationmodel.components(i).growth_linear_comb)
|
||||
vgrowth='';
|
||||
variable=[];
|
||||
if expectationmodel.components(i).growth_linear_comb(iter).exo_id > 0
|
||||
variable = M_.exo_names{expectationmodel.components(i).growth_linear_comb(iter).exo_id};
|
||||
elseif expectationmodel.components(i).growth_linear_comb(iter).endo_id > 0
|
||||
variable = M_.endo_names{expectationmodel.components(i).growth_linear_comb(iter).endo_id};
|
||||
end
|
||||
[variable, transformations] = rewrite_aux_variable(variable, M_);
|
||||
if isempty(transformations)
|
||||
if expectationmodel.components(i).growth_linear_comb(iter).lag ~= 0
|
||||
variable = sprintf('%s(%d)', variable, expectationmodel.components(i).growth_linear_comb(iter).lag);
|
||||
end
|
||||
else
|
||||
for k=rows(transformations):-1:1
|
||||
if isequal(transformations{k,1}, 'lag')
|
||||
variable = sprintf('%s.lag(%u)', variable, -transformations{k,2});
|
||||
elseif isequal(transformations{k,1}, 'diff')
|
||||
if isempty(transformations{k,2})
|
||||
variable = sprintf('%s.%s()', variable, transformations{k,1});
|
||||
if ~isempty(variable)
|
||||
[variable, transformations] = rewrite_aux_variable(variable, M_);
|
||||
if isempty(transformations)
|
||||
if expectationmodel.components(i).growth_linear_comb(iter).lag ~= 0
|
||||
variable = sprintf('%s(%d)', variable, expectationmodel.components(i).growth_linear_comb(iter).lag);
|
||||
end
|
||||
else
|
||||
for k=rows(transformations):-1:1
|
||||
if isequal(transformations{k,1}, 'lag')
|
||||
variable = sprintf('%s.lag(%u)', variable, -transformations{k,2});
|
||||
elseif isequal(transformations{k,1}, 'diff')
|
||||
if isempty(transformations{k,2})
|
||||
variable = sprintf('%s.%s()', variable, transformations{k,1});
|
||||
else
|
||||
variable = sprintf('%s(-%u).%s()', variable, transformations{k,2}, transformations{k,1});
|
||||
end
|
||||
else
|
||||
variable = sprintf('%s(-%u).%s()', variable, transformations{k,2}, transformations{k,1});
|
||||
variable = sprintf('%s.%s()', variable, transformations{k});
|
||||
end
|
||||
else
|
||||
variable = sprintf('%s.%s()', variable, transformations{k});
|
||||
end
|
||||
end
|
||||
vgrowth = strcat('dbase.', variable);
|
||||
end
|
||||
vgrowth = strcat('dbase.', variable);
|
||||
if expectationmodel.components(i).growth_linear_comb(iter).param_id > 0
|
||||
if ~isempty(vgrowth)
|
||||
vgrowth = sprintf('%1.16f*%s',M_.params(expectationmodel.components(i).growth_linear_comb(iter).param_id), vgrowth);
|
||||
|
|
|
@ -531,6 +531,7 @@ ECB_MODFILES = \
|
|||
pac/var-11e/example1.mod \
|
||||
pac/var-12/example1.mod \
|
||||
pac/var-12/example2.mod \
|
||||
pac/var-12/example4.mod \
|
||||
pac/var-12/example11.mod \
|
||||
pac/var-12/example12.mod \
|
||||
pac/trend-component-1/example1.mod \
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
// --+ options: json=compute, stochastic +--
|
||||
|
||||
var y x z v;
|
||||
|
||||
varexo ex ey ez ;
|
||||
|
||||
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:y']);
|
||||
|
||||
pac_model(auxiliary_model_name=toto, discount=beta, model_name=pacman);
|
||||
|
||||
pac_target_info(pacman);
|
||||
target v;
|
||||
auxname_target_nonstationary vns;
|
||||
|
||||
component y;
|
||||
growth 0;
|
||||
auxname pv_y_;
|
||||
kind dl;
|
||||
|
||||
component x;
|
||||
growth diff(x(-2));
|
||||
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 ;
|
||||
|
||||
[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');
|
Loading…
Reference in New Issue