pooled_ols: use varargout instead of oo_ to pass values back to pooled_fgls

time-shift
Houtan Bastani 2019-03-01 12:41:36 +01:00
parent f443037ed3
commit e4888c0775
No known key found for this signature in database
GPG Key ID: 000094FB955BE169
2 changed files with 16 additions and 22 deletions

View File

@ -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

View File

@ -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