pooled_ols: use varargout instead of oo_ to pass values back to pooled_fgls
parent
f443037ed3
commit
e4888c0775
|
@ -45,19 +45,19 @@ maxit = 100;
|
||||||
tol = 1e-6;
|
tol = 1e-6;
|
||||||
|
|
||||||
%% Common work between pooled_ols and pooled_fgls
|
%% Common work between pooled_ols and pooled_fgls
|
||||||
pooled_ols(ds, param_common, param_regex, true, eqtags);
|
[Y, X, pbeta, residnames, country_name] = pooled_ols(ds, param_common, param_regex, true, eqtags);
|
||||||
|
|
||||||
%% Estimation
|
%% Estimation
|
||||||
neqs = length(oo_.pooled_fgls.residnames);
|
neqs = length(residnames);
|
||||||
oo_.pooled_fgls.dof = size(oo_.pooled_fgls.X,1)/neqs;
|
oo_.pooled_fgls.dof = size(X,1)/neqs;
|
||||||
beta0 = oo_.pooled_fgls.beta;
|
beta0 = oo_.pooled_fgls.beta;
|
||||||
for i = 1:maxit
|
for i = 1:maxit
|
||||||
resid = oo_.pooled_fgls.Y - oo_.pooled_fgls.X * beta0;
|
resid = Y - X * beta0;
|
||||||
resid = reshape(resid, oo_.pooled_fgls.dof, neqs);
|
resid = reshape(resid, oo_.pooled_fgls.dof, neqs);
|
||||||
vcv = resid'*resid/oo_.pooled_fgls.dof;
|
vcv = resid'*resid/oo_.pooled_fgls.dof;
|
||||||
kLeye = kron(inv(chol(vcv))', eye(oo_.pooled_fgls.dof));
|
kLeye = kron(inv(chol(vcv))', eye(oo_.pooled_fgls.dof));
|
||||||
[q, r] = qr(kLeye*oo_.pooled_fgls.X, 0);
|
[q, r] = qr(kLeye*X, 0);
|
||||||
oo_.pooled_fgls.beta = r\(q'*kLeye*oo_.pooled_fgls.Y);
|
oo_.pooled_fgls.beta = r\(q'*kLeye*Y);
|
||||||
if max(abs(beta0 - oo_.pooled_fgls.beta)) < tol
|
if max(abs(beta0 - oo_.pooled_fgls.beta)) < tol
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
@ -70,16 +70,15 @@ end
|
||||||
% Set appropriate entries in M_.Sigma_e
|
% Set appropriate entries in M_.Sigma_e
|
||||||
idxs = zeros(neqs, 1);
|
idxs = zeros(neqs, 1);
|
||||||
for i = 1:neqs
|
for i = 1:neqs
|
||||||
idxs(i) = find(strcmp(oo_.pooled_fgls.residnames{i}, M_.exo_names));
|
idxs(i) = find(strcmp(residnames{i}, M_.exo_names));
|
||||||
end
|
end
|
||||||
M_.Sigma_e(idxs, idxs) = vcv;
|
M_.Sigma_e(idxs, idxs) = vcv;
|
||||||
|
|
||||||
regexcountries = ['(' strjoin(param_common(1:end),'|') ')'];
|
regexcountries = ['(' strjoin(param_common(1:end),'|') ')'];
|
||||||
pbeta = oo_.pooled_fgls.pbeta;
|
|
||||||
assigned_idxs = false(size(pbeta));
|
assigned_idxs = false(size(pbeta));
|
||||||
incidxs = [];
|
incidxs = [];
|
||||||
for i = 1:length(param_regex)
|
for i = 1:length(param_regex)
|
||||||
beta_idx = strcmp(pbeta, strrep(param_regex{i}, '*', oo_.pooled_fgls.country_name));
|
beta_idx = strcmp(pbeta, strrep(param_regex{i}, '*', country_name));
|
||||||
assigned_idxs = assigned_idxs | beta_idx;
|
assigned_idxs = assigned_idxs | beta_idx;
|
||||||
value = oo_.pooled_fgls.beta(beta_idx);
|
value = oo_.pooled_fgls.beta(beta_idx);
|
||||||
if isempty(eqtags)
|
if isempty(eqtags)
|
||||||
|
@ -103,10 +102,4 @@ end
|
||||||
% Write .inc file
|
% Write .inc file
|
||||||
write_param_init_inc_file('pooled_fgls', M_.fname, incidxs, M_.params(incidxs));
|
write_param_init_inc_file('pooled_fgls', M_.fname, incidxs, M_.params(incidxs));
|
||||||
|
|
||||||
oo_.pooled_fgls = rmfield(oo_.pooled_fgls, 'X');
|
|
||||||
oo_.pooled_fgls = rmfield(oo_.pooled_fgls, 'Y');
|
|
||||||
oo_.pooled_fgls = rmfield(oo_.pooled_fgls, 'residnames');
|
|
||||||
oo_.pooled_fgls = rmfield(oo_.pooled_fgls, 'pbeta');
|
|
||||||
oo_.pooled_fgls = rmfield(oo_.pooled_fgls, 'country_name');
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
function pooled_ols(ds, param_common, param_regex, overlapping_dates, eqtags)
|
function varargout = pooled_ols(ds, param_common, param_regex, overlapping_dates, eqtags)
|
||||||
% function pooled_ols(ds, param_common, param_regex, overlapping_dates, eqtags)
|
% function pooled_ols(ds, param_common, param_regex, overlapping_dates, eqtags)
|
||||||
% Run Pooled OLS
|
% Run Pooled OLS
|
||||||
% Apply parameter values found to corresponding parameter values in the
|
% Apply parameter values found to corresponding parameter values in the
|
||||||
|
@ -16,7 +16,8 @@ function pooled_ols(ds, param_common, param_regex, overlapping_dates, eqtags)
|
||||||
% estimate all equations
|
% estimate all equations
|
||||||
%
|
%
|
||||||
% OUTPUTS
|
% OUTPUTS
|
||||||
% none
|
% return arguments common to pooled_fgls only if called from pooled_fgls
|
||||||
|
%
|
||||||
%
|
%
|
||||||
% SPECIAL REQUIREMENTS
|
% SPECIAL REQUIREMENTS
|
||||||
% dynare must have been run with the option: json=compute
|
% dynare must have been run with the option: json=compute
|
||||||
|
@ -92,11 +93,11 @@ st = dbstack(1);
|
||||||
if strcmp(st(1).name, 'pooled_fgls')
|
if strcmp(st(1).name, 'pooled_fgls')
|
||||||
save_structure_name = 'pooled_fgls';
|
save_structure_name = 'pooled_fgls';
|
||||||
% Pass vars back to pooled_fgls
|
% Pass vars back to pooled_fgls
|
||||||
oo_.pooled_fgls.residnames = residnames;
|
varargout{1} = Y.data;
|
||||||
oo_.pooled_fgls.Y = Y.data;
|
varargout{2} = X.data;
|
||||||
oo_.pooled_fgls.X = X.data;
|
varargout{3} = X.name;
|
||||||
oo_.pooled_fgls.pbeta = X.name;
|
varargout{4} = residnames;
|
||||||
oo_.pooled_fgls.country_name = country_name;
|
varargout{5}= country_name;
|
||||||
else
|
else
|
||||||
save_structure_name = 'pooled_ols';
|
save_structure_name = 'pooled_ols';
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue