function results=nwest(y,x,nlag) 
% PURPOSE: computes Newey-West adjusted heteroscedastic-serial 
%          consistent Least-squares Regression 
%--------------------------------------------------- 
% USAGE: results = nwest(y,x,nlag) 
% where: y = dependent variable vector (nobs x 1) 
%        x = independent variables matrix (nobs x nvar) 
%     nlag = lag length to use 
%--------------------------------------------------- 
% RETURNS: a structure 
%        results.meth  = 'newlyw' 
%        results.beta  = bhat 
%        results.tstat = t-stats 
%        results.yhat  = yhat 
%        results.resid = residuals 
%        results.sige  = e'*e/(n-k) 
%        results.rsqr  = rsquared 
%        results.rbar  = rbar-squared 
%        results.dw    = Durbin-Watson Statistic 
%        results.nobs  = nobs 
%        results.nvar  = nvars 
%        results.y     = y data vector 
% -------------------------------------------------- 
% SEE ALSO: nwest_d, prt(results), plt(results) 
%--------------------------------------------------- 
% References:  Gallant, R. (1987), 
%  "Nonlinear Statistical Models," pp.137-139. 
%--------------------------------------------------- 
 
% written by: 
% James P. LeSage, Dept of Economics 
% University of Toledo 
% 2801 W. Bancroft St, 
% Toledo, OH 43606 
% % jlesage@spatial-econometrics.com 
 
 
 
if (nargin ~= 3); error('Wrong # of arguments to nwest'); end; 
 
[nobs nvar] = size(x); 
 
results.meth    = 'nwest'; 
results.y       = y; 
results.nobs    = nobs; 
results.nvar    = nvar; 
 
xpxi = inv(x'*x); 
results.beta    = xpxi*(x'*y); 
results.yhat    = x*results.beta; 
results.resid   = y - results.yhat; 
sigu = results.resid'*results.resid; 
results.sige    = sigu/(nobs-nvar); 
 
% perform Newey-West correction 
emat = []; 
for i=1:nvar; 
emat = [emat 
        results.resid']; 
end; 
        
    hhat=emat.*x'; 
    G=zeros(nvar,nvar); w=zeros(2*nlag+1,1); 
    a=0; 
 
    while a~=nlag+1; 
        ga=zeros(nvar,nvar); 
        w(nlag+1+a,1)=(nlag+1-a)/(nlag+1); 
        za=hhat(:,(a+1):nobs)*hhat(:,1:nobs-a)'; 
          if a==0; 
           ga=ga+za; 
          else 
           ga=ga+za+za'; 
          end; 
        G=G+w(nlag+1+a,1)*ga; 
        a=a+1; 
    end; % end of while 
     
        V=xpxi*G*xpxi; 
        nwerr= sqrt(diag(V)); 
 
results.tstat = results.beta./nwerr; % Newey-West t-statistics 
ym = y - ones(nobs,1)*mean(y); 
rsqr1 = sigu; 
rsqr2 = ym'*ym; 
results.rsqr = 1.0 - rsqr1/rsqr2; % r-squared 
rsqr1 = rsqr1/(nobs-nvar); 
rsqr2 = rsqr2/(nobs-1.0); 
results.rbar = 1 - (rsqr1/rsqr2); % rbar-squared 
ediff = results.resid(2:nobs) - results.resid(1:nobs-1); 
results.dw = diag((ediff'*ediff)./(sigu))'; % durbin-watson 
results.se=nwerr;
 