sur: add noniterative option
parent
0af3068569
commit
4399972a2d
|
@ -1,5 +1,5 @@
|
||||||
function varargout = sur(ds, param_names, eqtags, model_name)
|
function varargout = sur(ds, param_names, eqtags, model_name, noniterative)
|
||||||
%function varargout = sur(ds, param_names, eqtags, model_name)
|
%function varargout = sur(ds, param_names, eqtags, model_name, noniterative)
|
||||||
% Seemingly Unrelated Regressions
|
% Seemingly Unrelated Regressions
|
||||||
%
|
%
|
||||||
% INPUTS
|
% INPUTS
|
||||||
|
@ -9,6 +9,7 @@ function varargout = sur(ds, param_names, eqtags, model_name)
|
||||||
% estimate all equations
|
% estimate all equations
|
||||||
% model_name [string] name of model to be displayed with
|
% model_name [string] name of model to be displayed with
|
||||||
% report
|
% report
|
||||||
|
% noniterative [bool] if true use noniterative estimation method
|
||||||
%
|
%
|
||||||
% OUTPUTS
|
% OUTPUTS
|
||||||
% none
|
% none
|
||||||
|
@ -36,8 +37,16 @@ function varargout = sur(ds, param_names, eqtags, model_name)
|
||||||
global M_ oo_ options_
|
global M_ oo_ options_
|
||||||
|
|
||||||
%% Check input argument
|
%% Check input argument
|
||||||
if nargin < 1 || nargin > 4
|
if nargin < 1 || nargin > 5
|
||||||
error('function takes between 1 and 4 arguments');
|
error('function takes between 1 and 5 arguments');
|
||||||
|
end
|
||||||
|
|
||||||
|
if nargin < 5
|
||||||
|
noniterative = false;
|
||||||
|
else
|
||||||
|
if ~islogical(noniterative)
|
||||||
|
error('the fifth argument, if passed, must be a boolean')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if nargin < 4
|
if nargin < 4
|
||||||
|
@ -140,7 +149,7 @@ for i = 1:maxit
|
||||||
kLeye = kron(inv(chol(vcv))', eye(oo_.sur.(model_name).dof));
|
kLeye = kron(inv(chol(vcv))', eye(oo_.sur.(model_name).dof));
|
||||||
[q, r] = qr(kLeye*X.data, 0);
|
[q, r] = qr(kLeye*X.data, 0);
|
||||||
oo_.sur.(model_name).beta = r\(q'*kLeye*Y.data);
|
oo_.sur.(model_name).beta = r\(q'*kLeye*Y.data);
|
||||||
if max(abs(beta0 - oo_.sur.(model_name).beta)) < tol
|
if noniterative || max(abs(beta0 - oo_.sur.(model_name).beta)) < tol
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
beta0 = oo_.sur.(model_name).beta;
|
beta0 = oo_.sur.(model_name).beta;
|
||||||
|
|
Loading…
Reference in New Issue