function output = ols(y,x); %--------------------------------------------------- % PURPOSE: least-squares regression %--------------------------------------------------- % USAGE: output = ols(y,x) % where: y = dependent variable vector (nobs x 1) % x = independent variables matrix (nobs x nvar) %--------------------------------------------------- % RETURNS: a structure % output.meth = 'ols' % output.beta = bhat % output.stder = standard errors % output.tstat = t-stats % output.yhat = yhat % output.resid = residuals % output.sige = e'*e/(n-k) % output.rsqr = rsquared % output.rbar = rbar-squared % output.dw = Durbin-Watson Statistic % output.nobs = nobs % output.nvar = nvars % output.y = y data vector %--------------------------------------------------- % SEE ALSO: prt(results), plt(results) %--------------------------------------------------- % written by: % James P. LeSage, Dept of Economics % University of Toledo % 2801 W. Bancroft St, % Toledo, OH 43606 % jlesage@spatial-econometrics.com if (nargin ~= 2); error('Wrong # of arguments to ols'); else [nobs nvar] = size(x); [nobs2 junk] = size(y); if (nobs ~= nobs2); error('x and y must have same # obs in ols'); end; end; output.meth = 'ordinary least squares'; output.y = y; output.x = x; output.nobs = nobs; output.nvar = nvar; [q r] = qr(x,0); xpxi = (r'*r)\eye(nvar); output.beta = xpxi*(x'*y); output.yhat = x*output.beta; output.resid = y - output.yhat; output.RSS = output.resid'*output.resid; output.sige = output.RSS/(nobs-nvar); output.covb = output.sige*xpxi; tmp = (output.sige)*(diag(xpxi)); output.tstat = output.beta./(sqrt(tmp)); output.stder = output.beta./output.tstat; ym = y - mean(y); rsqr1 = output.RSS; rsqr2 = ym'*ym; output.rsqr = 1.0 - rsqr1/rsqr2; % r-squared rsqr1 = rsqr1/(nobs-nvar); rsqr2 = rsqr2/(nobs-1.0); if rsqr2 ~= 0 output.rbar = 1 - (rsqr1/rsqr2); % rbar-squared else output.rbar = output.rsqr; end; ediff = output.resid(2:nobs) - output.resid(1:nobs-1); output.dw = (ediff'*ediff)/output.RSS; % durbin-watson