get_ar_ec_matrices: fix bug in ordering of ec matrix
parent
b27267da9b
commit
322682635f
|
@ -106,16 +106,19 @@ for i = 1:length(M_.(model_type).(model_name).rhs.vars_at_eq)
|
||||||
rhsvars{i}.lags = M_.(model_type).(model_name).rhs.vars_at_eq{i}.lag;
|
rhsvars{i}.lags = M_.(model_type).(model_name).rhs.vars_at_eq{i}.lag;
|
||||||
rhsvars{i}.arRhsIdxs = [];
|
rhsvars{i}.arRhsIdxs = [];
|
||||||
rhsvars{i}.ecRhsIdxs = [];
|
rhsvars{i}.ecRhsIdxs = [];
|
||||||
|
rhsvars{i}.ecRhsVars = [];
|
||||||
for j = 1:length(vars)
|
for j = 1:length(vars)
|
||||||
if vars(j) <= M_.orig_endo_nbr
|
if vars(j) <= M_.orig_endo_nbr
|
||||||
% vars(j) is not an aux var
|
% vars(j) is not an aux var
|
||||||
if ismember(vars(j), lhs)
|
if ismember(vars(j), lhs)
|
||||||
rhsvars{i}.arRhsIdxs = [rhsvars{i}.arRhsIdxs find(lhs == vars(j))];
|
rhsvars{i}.arRhsIdxs = [rhsvars{i}.arRhsIdxs find(lhs == vars(j))];
|
||||||
rhsvars{i}.ecRhsIdxs = [rhsvars{i}.ecRhsIdxs -1];
|
rhsvars{i}.ecRhsIdxs = [rhsvars{i}.ecRhsIdxs -1];
|
||||||
|
rhsvars{i}.ecRhsVars = [rhsvars{i}.ecRhsVars -1];
|
||||||
else
|
else
|
||||||
ecRhsVars = union(ecRhsVars, vars(j), 'stable');
|
ecRhsVars = union(ecRhsVars, vars(j));
|
||||||
|
rhsvars{i}.ecRhsVars = [rhsvars{i}.ecRhsVars vars(j)];
|
||||||
rhsvars{i}.arRhsIdxs = [rhsvars{i}.arRhsIdxs -1];
|
rhsvars{i}.arRhsIdxs = [rhsvars{i}.arRhsIdxs -1];
|
||||||
rhsvars{i}.ecRhsIdxs = [rhsvars{i}.ecRhsIdxs find(ecRhsVars == vars(j))];
|
rhsvars{i}.ecRhsIdxs = [rhsvars{i}.ecRhsIdxs find(rhsvars{i}.ecRhsVars == vars(j))];
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
% Search aux vars for matching lhs var
|
% Search aux vars for matching lhs var
|
||||||
|
@ -123,20 +126,24 @@ for i = 1:length(M_.(model_type).(model_name).rhs.vars_at_eq)
|
||||||
if lhsvaridx >= 1
|
if lhsvaridx >= 1
|
||||||
rhsvars{i}.arRhsIdxs = [rhsvars{i}.arRhsIdxs find(lhs == lhsvaridx)];
|
rhsvars{i}.arRhsIdxs = [rhsvars{i}.arRhsIdxs find(lhs == lhsvaridx)];
|
||||||
rhsvars{i}.ecRhsIdxs = [rhsvars{i}.ecRhsIdxs -1];
|
rhsvars{i}.ecRhsIdxs = [rhsvars{i}.ecRhsIdxs -1];
|
||||||
|
rhsvars{i}.ecRhsVars = [rhsvars{i}.ecRhsVars -1];
|
||||||
else
|
else
|
||||||
% otherwise find endog that corresponds to this aux var
|
% otherwise find endog that corresponds to this aux var
|
||||||
varidx = findVarNoLag(vars(j));
|
varidx = findVarNoLag(vars(j));
|
||||||
ecRhsVars = union(ecRhsVars, varidx, 'stable');
|
ecRhsVars = union(ecRhsVars, varidx);
|
||||||
|
rhsvars{i}.ecRhsVars = [rhsvars{i}.ecRhsVars varidx];
|
||||||
rhsvars{i}.arRhsIdxs = [rhsvars{i}.arRhsIdxs -1];
|
rhsvars{i}.arRhsIdxs = [rhsvars{i}.arRhsIdxs -1];
|
||||||
rhsvars{i}.ecRhsIdxs = [rhsvars{i}.ecRhsIdxs find(ecRhsVars == varidx)];
|
rhsvars{i}.ecRhsIdxs = [rhsvars{i}.ecRhsIdxs find(rhsvars{i}.ecRhsVars == varidx)];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
[rhsvars, ecRhsVars] = reorderECvars(rhsvars, ecRhsVars, lhs);
|
||||||
|
|
||||||
% Initialize matrices
|
% Initialize matrices
|
||||||
oo_.(model_type).(model_name).ar = zeros(length(lhs), length(lhs), M_.(model_type).(model_name).max_lag);
|
oo_.(model_type).(model_name).ar = zeros(length(lhs), length(lhs), max(M_.(model_type).(model_name).max_lag));
|
||||||
oo_.(model_type).(model_name).ec = zeros(length(lhs), length(ecRhsVars), M_.(model_type).(model_name).max_lag);
|
oo_.(model_type).(model_name).ec = zeros(length(lhs), length(ecRhsVars), max(M_.(model_type).(model_name).max_lag));
|
||||||
oo_.(model_type).(model_name).ar_idx = lhs;
|
oo_.(model_type).(model_name).ar_idx = lhs;
|
||||||
oo_.(model_type).(model_name).ec_idx = ecRhsVars;
|
oo_.(model_type).(model_name).ec_idx = ecRhsVars;
|
||||||
|
|
||||||
|
@ -172,6 +179,29 @@ end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function [rhsvars, ecRhsVarsReordered] = reorderECvars(rhsvars, ecRhsVars, lhs)
|
||||||
|
|
||||||
|
global M_
|
||||||
|
|
||||||
|
ecRhsVarsReordered = [];
|
||||||
|
for i = 1:length(lhs)
|
||||||
|
av = M_.aux_vars([M_.aux_vars.endo_index] == lhs(i));
|
||||||
|
if ~isempty(av)
|
||||||
|
var = ecRhsVars(ecRhsVars == av.orig_index);
|
||||||
|
if ~isempty(var)
|
||||||
|
ecRhsVarsReordered = [ecRhsVarsReordered var];
|
||||||
|
for j = 1:length(rhsvars)
|
||||||
|
rhsidx = find(rhsvars{j}.ecRhsVars == var);
|
||||||
|
if ~isempty(rhsidx)
|
||||||
|
rhsvars{j}.ecRhsIdxs(rhsidx) = length(ecRhsVarsReordered);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function lhsvaridx = findLhsInAuxVar(auxVar, lhsvars)
|
function lhsvaridx = findLhsInAuxVar(auxVar, lhsvars)
|
||||||
|
|
||||||
global M_
|
global M_
|
||||||
|
|
Loading…
Reference in New Issue