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

📄 darp.m

📁 计量工具箱
💻 M
字号:
function results=darp(y,x,xc,yc,option)% PURPOSE: computes Casetti's DARP model%---------------------------------------------------% USAGE: results = darp(y,x,xc,yc,option)% where:       y = dependent variable vector%              x = independent variables matrix%             xc = lattitude (or longitude) coordinate%             yc = longitude (or lattitude) coordinate%        option  = a structure variable containing options%        option.exp  = 0 for x-y expansion (default)%                    = 1 for distance from ctr expansion%        option.ctr  = central point observation # for distance expansion%        option.iter = # of iterations for maximum likelihood routine%        option.norm = 1 for isotropic x-y normalization (default=0)        %---------------------------------------------------% RETURNS:%        results.meth   = 'darp'%        results.b0     = bhat (underlying b0x, b0y)%        results.t0     = t-stats (associated with b0x, b0y)%        results.beta   = spatially expanded estimates (nobs x nvar)%        results.yhat   = yhat%        results.resid  = residuals%        results.sige   = e'*e/(n-k)%        results.rsqr   = rsquared%        results.rbar   = rbar-squared%        results.nobs   = nobs%        results.nvar   = # of variables in x%        results.y      = y data vector%        results.xc     = xc%        results.yc     = yc%        results.ctr    = ctr (if input)%        results.dist   = distance vector %        results.exp    = exp input option%        results.norm   = norm input option%        results.iter   = # of maximum likelihood iterations% --------------------------------------------------% NOTES: assumes x(:,1) contains a constant term% --------------------------------------------------% SEE ALSO: prt, plt, prt_spat()%---------------------------------------------------% REFERENCES: Emilio Casetti (1982) ``Drift Analysis of% Regression Parameters: An Application to the Investigation% of Fertility Development Relations'', Modeling and Simulation 13,% Part 3: pp. 961-66.%---------------------------------------------------% written by:% James P. LeSage, Dept of Economics% University of Toledo% 2801 W. Bancroft St,% Toledo, OH 43606% jpl@jpl.econ.utoledo.eduif nargin == 5 % user options if ~isstruct(option)    error('darp: must supply the option argument as a structure variable'); else fields = fieldnames(option); nf = length(fields); % set defaults expand = 0; ctr = 0; iter = 0; nflag = 0;  for i=1:nf    if strcmp(fields{i},'exp')        expand = option.exp;     elseif strcmp(fields{i},'ctr')        ctr = option.ctr;    elseif strcmp(fields{i},'iter')        iter = option.iter;    elseif strcmp(fields{i},'norm')        nflag = option.norm;    end;  end; % end of for i end; % end of if elseelseif nargin == 4  % x-y expansionexpand = 0;option.exp = 0;iter = 0;nflag = 0;elseerror('Wrong # of arguments to darp');end;if expand == 1 if ctr == 0   error('darp: must enter option.ctr for option.exp = 1'); end;end;[nobs nvar] = size(x);if x(:,1) ~= ones(nobs,1) error('darp: first column in x-matrix must be a constant vector');end;if nflag == 1[xc yc] = normxy(xc,yc);end;results.meth = 'darp';results.y = y;results.nobs = nobs;results.nvar = nvar;results.xc = xc;results.yc = yc;results.option = option;results.exp = expand;results.norm = nflag;switch expandcase {0} % x-y expansion    % get base estimatesxt = x(:,2:nvar);xx = matmul(xt,xc);xy = matmul(xt,yc);xmat = [x xx xy];b0 = xmat\y;% compute expansion estimates and predicted valuesbeta = zeros(nobs,2*(nvar-1));yhat = zeros(nobs,1);xx = matmul(ones(nobs,nvar-1),xc);xy = matmul(ones(nobs,nvar-1),yc);xxxy = [x xx xy];tvar = length(b0);    yhat(:,1) = xmat(:,1:nvar)*b0(1:nvar,1);    for j=nvar+1:tvar    beta(:,j-nvar) = xxxy(:,j)*b0(j,1);    yhat(:,1) = yhat(:,1)  + xmat(:,j)*b0(j,1);    end;% use residuals to provide an initial set of FGLS estimatese = results.y - yhat;e2 = log(e.*e);% regress residuals on xc,yc vectorsn = length(e);res = ols(e2,[ones(n,1) xc yc]);% pull out sige, gamma1sige = res.beta(1,1);gamma1 = res.beta(2,1);gamma2 = res.beta(3,1);% do FGLSxt = x(:,2:nvar);xx = matmul(xt,xc);xy = matmul(xt,yc);xmat = [x xx xy];phi = exp(sige + gamma1*xc + gamma2*yc);phii = ones(n,1)./phi;ys = sqrt(phii).*y;xs = matmul(xmat,sqrt(phii));b0 = xs\ys; % FGLS estimates% do maximum likelihood estimationif iter == 0info.maxit = 500;elseinfo.maxit = iter;end;parm = zeros(tvar+3,1);parm(1,1) = sige;parm(2,1) = gamma1;parm(3,1) = gamma2;parm(4:tvar+3,1) = b0;result = maxlik('darp_lik1',parm,info,y,x,xc,yc);if result.iter == info.maxit    % warn user and rely on FGLS estimatesfprintf(1,'darp: convergence failure using FGLS estimates');results.b0 = result.b(4:tvar+3,1);results.gamma(1) = result.b(2,1);results.gamma(2) = result.b(3,1);results.iter = result.iter; result.lik = 0;fflag = 1; % a flag for FGLS estimateselseresults.b0 = result.b(4:tvar+3,1);sige = result.b(1,1);results.gamma(1) = result.b(2,1);gamma1 = result.b(2,1);results.gamma(2) = result.b(3,1);gamma2 = result.b(3,1);results.iter = iter;  results.lik = result.f;fflag = 0; % a flag for ML estimatesend;% compute FGLS or ML expansion  estimates and predicted valuesbeta = zeros(nobs,2*(nvar-1));yhat = zeros(nobs,1);xx = matmul(ones(nobs,nvar-1),xc);xy = matmul(ones(nobs,nvar-1),yc);xxxy = [x xx xy];tvar = length(b0);    yhat(:,1) = xmat(:,1:nvar)*b0(1:nvar,1);    for j=nvar+1:tvar    beta(:,j-nvar) = xxxy(:,j)*b0(j,1);    yhat(:,1) = yhat(:,1)  + xmat(:,j)*b0(j,1);    end;results.beta = beta;     % expansion estimatesresults.yhat = yhat;     % yhate = y - results.yhat;results.resid = e;       % residualssigu = e'*e;results.sige = sigu/(n-tvar);% compute t-statistics for bhat'sphi = exp(sige + gamma1*xc + gamma2*yc);phii = ones(n,1)./phi;xs = matmul(xmat,sqrt(phii));xpxi = inv(xs'*xs);tmp2 = sige*(diag(xpxi));results.t0 = results.b0./(sqrt(tmp2));% compute chi-squared(1) statistic for gamma1,gamma2if fflag == 0,    results.chi(1) = (gamma1*gamma1)/2*sum(xc);    results.chi(2) = (gamma2*gamma2)/2*sum(yc);results.cprob(1) = 1-chis_prb(results.chi(1),1);results.cprob(2) = 1-chis_prb(results.chi(2),1);    else    results.chi(1) = (gamma1*gamma1)/4.9348*sum(xc);    results.chi(2) = (gamma2*gamma2)/4.9348*sum(yc);results.cprob(1) = 1-chis_prb(results.chi(1),1);results.cprob(2) = 1-chis_prb(results.chi(2),1);end;ym = y - mean(y);rsqr1 = sigu;rsqr2 = ym'*ym;results.rsqr = 1.0 - rsqr1/rsqr2; % r-squaredrsqr1 = rsqr1/(nobs-nvar-2*(nvar-1));rsqr2 = rsqr2/(nobs-1.0);results.rbar = 1 - (rsqr1/rsqr2); % rbar-squaredcase{1} % distance from the center expansion% compute squared distance from central pointxi = xc(ctr);yi = yc(ctr);% calculate distance weighting functiond = (xc-xi).*(xc-xi) + (yc-yi).*(yc-yi);dvec = d;results.dist= dvec;% transform x-variables using distance vectorxt = x(:,2:nvar);xx = matmul(xt,dvec);xmat = [x xx];b0 = xmat\y;  % get base model estimates% find FGLS expansion estimates and  residualsbeta = zeros(nobs,(nvar-1));yhat = zeros(nobs,1);xx = matmul(ones(nobs,nvar-1),dvec);xxxy = [x xx];tvar = length(b0);    yhat(:,1) = xmat(:,1:nvar)*b0(1:nvar,1);    for j=nvar+1:tvar    beta(:,j-nvar) = xxxy(:,j)*b0(j,1);    yhat(:,1) = yhat(:,1)  + xmat(:,j)*b0(j,1);    end;% use residuals to provide an initial set of FGLS estimatese = y - yhat;e2 = log(e.*e);% regress residuals on distance vectorn = length(e);res = ols(e2,[ones(n,1) dvec]);% pull out sige, gamma1sige = res.beta(1,1);gamma1 = res.beta(2,1);% do FGLSxt = x(:,2:nvar);xx = matmul(xt,dvec);xmat = [x xx];phi = exp(sige + gamma1*dvec);phii = ones(n,1)./phi;ys = sqrt(phii).*y;xs = matmul(xmat,sqrt(phii));b0 = xs\ys; % FGLS estimates% do maximum likelihood estimationif iter == 0info.maxit = 500;elseinfo.maxit = iter;end;parm = zeros(tvar+2,1);parm(1,1) = sige;parm(2,1) = gamma1;parm(3:tvar+2,1) = b0;result = maxlik('darp_lik2',parm,info,y,x,dvec);if result.iter == info.maxit;    % warn user and rely on FGLS estimatesfprintf(1,'darp: convergence failure --- returning FGLS estimates\n');results.b0 = result.b(3:tvar+2,1);results.gamma(1) = result.b(2,1);results.iter = result.iter;  results.lik = 0;fflag = 1;elseresults.b0 = result.b(3:tvar+2,1);sige = result.b(1,1);results.gamma(1) = result.b(2,1);results.iter = result.iter;  results.lik = result.f;gamma1 = result.b(2,1);fflag = 0;end;% find FGLS or ML expansion estimates and  residualsbeta = zeros(nobs,(nvar-1));yhat = zeros(nobs,1);xx = matmul(ones(nobs,nvar-1),dvec);xxxy = [x xx];tvar = length(b0);    yhat(:,1) = xmat(:,1:nvar)*b0(1:nvar,1);    for j=nvar+1:tvar    beta(:,j-nvar) = xxxy(:,j)*b0(j,1);    yhat(:,1) = yhat(:,1)  + xmat(:,j)*b0(j,1);    end;results.beta = beta;results.yhat = yhat;results.nvar = nvar;results.ctr = ctr;results.resid = y - results.yhat;sigu = results.resid'*results.resid;results.sige = sigu/(n-tvar);phi = exp(sige + gamma1*dvec);phii = ones(n,1)./phi;xs = matmul(xmat,sqrt(phii));xpxi = inv(xs'*xs);tmp = sige*(diag(xpxi));results.t0 = results.b0./(sqrt(tmp));% compute chi-squared(1) statistic for gamma1if fflag == 0,    results.chi(1) = (gamma1*gamma1)/2*sum(dvec);results.cprob(1) = 1-chis_prb(results.chi(1),1);else    results.chi(1) = (gamma1*gamma1)/4.9348*sum(dvec);results.cprob(1) = 1-chis_prb(results.chi(1),1);end;ym = y - mean(y);rsqr1 = sigu;rsqr2 = ym'*ym;results.rsqr = 1.0 - rsqr1/rsqr2; % r-squaredrsqr1 = rsqr1/(nobs-2*nvar);rsqr2 = rsqr2/(nobs-1.0);results.rbar = 1 - (rsqr1/rsqr2); % rbar-squaredotherwiseerror('darp: check option input argument');end;

⌨️ 快捷键说明

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