⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 olsc.m

📁 时间序列分析中常用到的matlab代码
💻 M
字号:
function result = olsc(y,x)
% PURPOSE: computes Cochrane-Orcutt ols Regression for AR1 errors
%---------------------------------------------------
% USAGE: results = olsc(y,x)
% where: y = dependent variable vector (nobs x 1)
%        x = independent variables matrix (nobs x nvar)
%---------------------------------------------------
% RETURNS: a structure
%        results.meth  = 'olsc'
%        results.beta  = bhat estimates
%        results.rho   = rho estimate
%        results.tstat = t-stats
%        results.trho  = t-statistic for rho estimate
%        results.yhat  = yhat
%        results.resid = residuals
%        results.sige  = e'*e/(n-k)
%        results.rsqr  = rsquared
%        results.rbar  = rbar-squared
%        results.iter  = niter x 3 matrix of [rho converg iteration#]
%        results.nobs  = nobs
%        results.nvar  = nvars
%        results.y     = y data vector
% --------------------------------------------------
% SEE ALSO: prt_reg(results), plt_reg(results)
%---------------------------------------------------

% written by:
% James P. LeSage, Dept of Economics
% University of Toledo
% 2801 W. Bancroft St,
% Toledo, OH 43606
% jpl@jpl.econ.utoledo.edu

% do error checking on inputs
if (nargin ~= 2); error('Wrong # of arguments to olsc'); end;

[nobs nvar] = size(x);
[nobs2 junk] = size(y);

if (nobs ~= nobs2); error('x and y must have same # obs in olsc'); end;

% ----- setup parameters
ITERMAX = 100;
converg = 1.0;
rho = 0.0;
iter = 1;
xtmp = lag(x,1);
ytmp = lag(y,1);

% truncate 1st observation to feed the lag
xlag = xtmp(2:nobs,:);
ylag = ytmp(2:nobs,1);
yt = y(2:nobs,1);
xt = x(2:nobs,:);
       
% setup storage for iteration results
iterout = zeros(ITERMAX,3);

while (converg > 0.0001) & (iter < ITERMAX),
% step 1, using intial rho = 0, do OLS to get bhat
 ystar = yt - rho*ylag;
 xstar = xt - rho*xlag;
 
res = ols(ystar,xstar);

e = y - x*res.beta;
elag = lag(e);

% truncate 1st observation to account for the lag
et = e(2:nobs,1);
elagt = elag(2:nobs,1);

% step 2, update estimate of rho using residuals
%         from step 1

res_rho = ols(et,elagt);
rho_last = rho;
rho = res_rho.beta(1);
converg = abs(rho - rho_last);

iterout(iter,1) = rho;
iterout(iter,2) = converg;
iterout(iter,3) = iter;

iter = iter + 1;

end; % end of while loop

if iter == ITERMAX
 error('ols_corc did not converge in 100 iterations');
end;

result.iter= iterout(1:iter-1,:);

% after convergence produce a final set of estimates using rho-value
ystar = yt - rho*ylag;
xstar = xt - rho*xlag;

result = ols(ystar,xstar);
result.meth = 'olsc';
result.rho = rho;
result.iter = iterout(1:iter-1,:);
% compute t-statistic for rho
varrho = (1-rho*rho)/(nobs-2);
result.trho = rho/sqrt(varrho);




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -