📄 theil.m
字号:
function results=theil(y,x,rvec,rmat,v)
% PURPOSE: computes Theil-Goldberger mixed estimator
% y = X B + E, E = N(0,sige*IN)
% c = R B + U, U = N(0,v)
%---------------------------------------------------
% USAGE: results = theil(y,x,c,R,v)
% where: y = dependent variable vector
% x = independent variables matrix of rank(k)
% c = a vector of prior mean values, (c above)
% R = a matrix of rank(r) (R above)
% v = prior variance-covariance (var-cov(U) above)
%---------------------------------------------------
% RETURNS: a structure:
% results.meth = 'theil'
% results.beta = bhat estimates
% results.tstat = t-statistics
% results.pmean = prior means
% results.pstd = prior std deviations
% results.yhat = predicted values
% results.resid = residuals
% results.sige = e'e/(n-k)
% results.rsqr = r-squared
% results.rbar = r-squared adjusted
% results.dw = Durbin Watson
% results.nobs = # of observations
% results.nvar = # of variables
% results.y = actual observations
% --------------------------------------------------
% SEE ALSO: prt, plt, ols_g
%---------------------------------------------------
% written by:
% James P. LeSage, Dept of Economics
% University of Toledo
% 2801 W. Bancroft St,
% Toledo, OH 43606
% jlesage@spatial-econometrics.com
if (nargin ~= 5); error('Wrong # of arguments to theil'); end;
[nobs nvar] = size(x);
results.meth = 'theil';
results.y = y;
results.nobs = nobs;
results.nvar = nvar;
[rsize junk] = size(rvec);
% fill in prior means and std deviations
results.pmean = rvec;
results.pstd = sqrt(diag(v));
vi = inv(v);
% do ols to get sige estimate;
bols = (x'*x)\(x'*y);
sige = ((y - x*bols)'*(y-x*bols))/(nobs-nvar);
xpxi = inv(x'*x + sige*rmat'*vi*rmat);
xpy = (x'*y) + sige*rmat'*vi*rvec;
results.beta = xpxi*xpy;
results.yhat = x*results.beta;
results.resid = y - results.yhat;
sigu = results.resid'*results.resid;
results.sige = (sigu)/(nobs-nvar);
tmp = results.sige*diag(xpxi);
results.tstat = results.beta./sqrt(tmp);
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -