Fixed row ordering issue in the trend component model.
parent
829849f4db
commit
bc54022da6
|
@ -90,18 +90,27 @@ else
|
||||||
q = length(M_.var.(var_model_name).eqn)-m;
|
q = length(M_.var.(var_model_name).eqn)-m;
|
||||||
ecm_eqnums = zeros(m, 1);
|
ecm_eqnums = zeros(m, 1);
|
||||||
ecm_eqnums_in_auxiliary_model = zeros(m, 1);
|
ecm_eqnums_in_auxiliary_model = zeros(m, 1);
|
||||||
for i=1:m
|
trend_eqnums = zeros(q, 1);
|
||||||
number = get_equation_number_by_tag(M_.pac.(pac_model_name).undiff_eqtags{i});
|
trend_eqnums_in_auxiliary_model = zeros(q, 1);
|
||||||
if number>0
|
% EC equations in the order of M_.pac.(pac_model_name).undiff_eqtags{i}
|
||||||
ecm_eqnums(i) = number;
|
ecm = zeros(m, 1);
|
||||||
ide = find(M_.var.(var_model_name).eqn==number);
|
for i = 1:m
|
||||||
if isempty(ide)
|
ecm(i) = get_equation_number_by_tag(M_.pac.(pac_model_name).undiff_eqtags{i});
|
||||||
error('(eq = %s, eq_in_aux_model = %s) This is most likely a bug. Please contact the DynareTeam.', int2str(number), int2str(ide))
|
end
|
||||||
else
|
% Trend equations
|
||||||
ecm_eqnums_in_auxiliary_model(i) = ide;
|
trends = setdiff(M_.var.(var_model_name).eqn(:), ecm);
|
||||||
end
|
i1 = 1;
|
||||||
|
i2 = 1;
|
||||||
|
for i=1:m+q
|
||||||
|
% Only EC or trend equations are allowed in this model.
|
||||||
|
if ismember(M_.var.(var_model_name).eqn(i), ecm)
|
||||||
|
ecm_eqnums(i1) = M_.var.(var_model_name).eqn(i);
|
||||||
|
ecm_eqnums_in_auxiliary_model(i1) = i;
|
||||||
|
i1 = i1 + 1;
|
||||||
else
|
else
|
||||||
error('%s is not declared as an equation in the model block!', M_.pac.(pac_model_name).undiff_eqtag{i})
|
trend_eqnums(i2) = M_.var.(var_model_name).eqn(i);
|
||||||
|
trend_eqnums_in_auxiliary_model(i2) = i;
|
||||||
|
i2 = i2 + 1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
% Check that the lhs of candidate ecm equations are at least first differences.
|
% Check that the lhs of candidate ecm equations are at least first differences.
|
||||||
|
@ -112,20 +121,9 @@ else
|
||||||
if any(~difference_orders_in_error_correction_eq)
|
if any(~difference_orders_in_error_correction_eq)
|
||||||
error('Model %s is not a VECM model! LHS variables should be in difference', var_model_name)
|
error('Model %s is not a VECM model! LHS variables should be in difference', var_model_name)
|
||||||
end
|
end
|
||||||
% Get the indices of the trend equations.
|
|
||||||
trend_eqnums = transpose(setdiff(M_.var.(var_model_name).eqn,ecm_eqnums));
|
|
||||||
trend_eqnums_in_auxiliary_model = zeros(q, 1);
|
|
||||||
for i=1:q
|
|
||||||
idt = find(M_.var.(var_model_name).eqn==trend_eqnums(i));
|
|
||||||
if isempty(idt)
|
|
||||||
error('(eq = %s, eq_in_aux_model = %s) This is most likely a bug. Please contact the DynareTeam.', int2str(trend_eqnums(i)), int2str(idt))
|
|
||||||
else
|
|
||||||
trend_eqnums_in_auxiliary_model(i) = idt;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
% Get the trend variables indices (lhs variables in trend equations).
|
% Get the trend variables indices (lhs variables in trend equations).
|
||||||
[~, id_trend_in_var, ~] = intersect(M_.var.(var_model_name).eqn, trend_eqnums);
|
[~, id_trend_in_var, ~] = intersect(M_.var.(var_model_name).eqn, trend_eqnums);
|
||||||
trend_variables = M_.var.(var_model_name).lhs(id_trend_in_var);
|
trend_variables = reshape(M_.var.(var_model_name).lhs(id_trend_in_var), q, 1);
|
||||||
% Get the rhs variables in trend equations.
|
% Get the rhs variables in trend equations.
|
||||||
trend_autoregressive_variables = zeros(q, 1);
|
trend_autoregressive_variables = zeros(q, 1);
|
||||||
for i=1:q
|
for i=1:q
|
||||||
|
|
Loading…
Reference in New Issue