?? boxcox.m
字號:
function results = boxcox1(y,x,lamlo,lamup,model,foptions)
% PURPOSE: box-cox regression using a single scalar transformation
% parameter for both y and (optionally) x
% -----------------------------------------
% USAGE: results = boxcox1(y,x,lam_lo,lam_up,model,foptions)
% where: y = dependent variable vector
% x = explanatory variables matrix
% (intercept vector in 1st column --- if desired)
% lam_lo = scalar, lower limit for simplex search
% lam_up = scalar, upper limit for simplex search
% model = 0 for y-transform only
% = 1 for both y, and x-transform
% foptions = (optional) structure OPTIONS, created with
% the OPTIMSET function. See OPTIMSET for details.
% -----------------------------------------
% RETURNS: a structure:
% results.meth = 'boxcox'
% results.beta = bhat estimates
% results.lam = lamda estimate
% results.tstat = t-stats for bhat
% results.yhat = yhat (box-cox transformed)
% results.resid = residuals
% results.sige = e'*e/(n-k)
% results.rsqr = rsquared
% results.rbar = rbar-squared
% results.nobs = nobs
% results.nvar = nvars
% results.y = y data vector (box-cox transformed)
% results.iter = # of iterations
% results.like = -log likelihood function value
% --------------------------------------------------
% NOTE: uses MATLAB simplex optimization function fmin
% --------------------------------------------------
% SEE ALSO: prt(results), plt(results), boxcox2()
% ---------------------------------------------------
% written by:
% James P. LeSage, Dept of Economics
% University of Toledo
% 2801 W. Bancroft St,
% Toledo, OH 43606
% jlesage@spatial-econometrics.com
[n k] = size(x);
results.nobs = n;
results.nvar = k;
results.meth = 'boxcox';
ncheck = find(y > 0);
if ncheck ~= n
error('box_cox: all y-values must be positive');
end;
if nargin == 6
if model == 0
% call simplex optimization with user-supplied options
% and untransformed x-matrix
[lam fval exitf out] = fminbnd('box_lik',lamlo,lamup,foptions,y,x,model);
niter = out.iterations;
llike = -fval;
elseif model == 1
% error check on positive x-values
ncheck = find(x > 0);
if ncheck ~= n*k
error('box_cox: all x-values must be positive');
end;
[lam fval exitf out] = fminbnd('box_lik',lamlo,lamup,foptions,y,x,model);
niter = out.iterations;
llike = -fval;
else
error('box_cox: only model=0,1 values allowed');
end;
elseif nargin == 5
% call simplex optimization with default options
% turn off display
foptions = optimset('Display','off');
[lam fval exitf out] = fminbnd('box_lik',lamlo,lamup,foptions,y,x,model);
niter = out.iterations;
llike = -fval;
else
error('box_cox: Wrong # of input arguments');
end;
if exitf == 0
error('box_cox: no convergence in %d iterations \n',niter);
exit;
end;
ys = boxc_trans(y,lam);
if model == 1
% see if an intercept term exists in the model
iota = x(:,1);
ifind = find(iota == 1);
if isempty(ifind) % no intercept
xs = boxc_trans(x,lam);
else % we may have an intercept
if length(ifind) == n % we have an intecept
xtrans = boxc_trans(x(:,2:k),lam);
xs = [ones(n,1) xtrans];
else % no intercept
xs = boxc_trans(x,lam);
end;
end;
elseif model == 0
xs = x;
end;
xpxi = inv(xs'*xs);
bhat = xpxi*xs'*ys;
e = ys - xs*bhat;
sigu = e'*e;
sige = sigu/n;
% compute t-statistics
bvar = sige*xpxi;
tstat = bhat./sqrt(diag(bvar));
results.tstat = tstat;
results.yhat = x*bhat;
results.resid = ys - results.yhat;
ym = ys - ones(n,1)*mean(ys);
rsqr1 = sigu;
rsqr2 = ym'*ym;
results.rsqr = 1.0 - rsqr1/rsqr2; % r-squared
rsqr1 = rsqr1/(n-k);
rsqr2 = rsqr2/(n-1.0);
results.rbar = 1 - (rsqr1/rsqr2); % rbar-squared
results.y = ys;
results.beta = bhat;
results.lam = lam;
results.sige = sige;
results.iter = niter;
results.like = llike;
% The following function was cut and save in a new function file
% named boxc_trans
% function bdata = boxc_trans(x,lam)
% % PURPOSE: compute box-cox transformation
% %----------------------------------------------------
% % USAGE: bdata = boxc_trans(data,lam)
% % where: lam = scalar transformation parameter
% % data = matrix nobs x k
% %----------------------------------------------------
% % RETURNS: bdata = data matrix box-cox transformed
%
% % written by:
% % James P. LeSage, Dept of Economics
% % University of Toledo
% % 2801 W. Bancroft St,
% % Toledo, OH 43606
% % jlesage@spatial-econometrics.com
%
% [n k] = size(x);
% z = zeros(n,k);
% iota = ones(n,1);
%
% for i=1:k;
% if lam ~= 0
% z(:,i) = (x(:,i).^lam - iota)/lam;
% else
% z(:,i) = log(abs(x(:,i)));
% end;
% end;
%
% bdata = z;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -