📄 apm.m
字号:
function result = apm(results1,results2)% PURPOSE: computes Geweke's chi-squared test for two sets of MCMC sample draws% ------------------------------------------------% USAGE: result = apm(results1,results2)% where: results1 = a structure returned by momentg% results2 = a structure returned by momentg% ------------------------------------------------% RETURNS: a structure:% results.meth = 'apm' % results.ndraw = ndraw1+ndraw2% results.nvar = # of variables% results.p1 = ndraw1/(ndraw1+ndraw2)% results.p2 = ndraw2/(ndraw1+ndraw2)% results(i).pmean(k) = posterior mean for variable i% for k = nse, nse1,nse2,nse3% results(i).nse(k) = nse for variable i% for k = nse, nse1,nse2,nse3% results(i).prob(k) = chi-sq test prob for variable i% for k = nse, nse1,nse2,nse3% ------------------------------------------------% SEE ALSO: coda(), prt()% ------------------------------------------------% REFERENCES: Geweke (1992), `Evaluating the accuracy of sampling-based% approaches to the calculation of posterior moments', in J.O. Berger,% J.M. Bernardo, A.P. Dawid, and A.F.M. Smith (eds.) Proceedings of% the Fourth Valencia International Meeting on Bayesian Statistics,% pp. 169-194, Oxford University Press% Also: `Using simulation methods for Bayesian econometric models: % Inference, development and communication', at: www.econ.umn.edu/~bacc% -----------------------------------------------------------------% written by:% James P. LeSage, Dept of Economics% University of Toledo% 2801 W. Bancroft St,% Toledo, OH 43606% jpl@jpl.econ.utoledo.edu % NOTE: this code draws heavily on MATLAB programs written by% Siddartha Chib available at: www.econ.umn.edu/~bacc% I have repackaged it to make it easier to use.if ~isstruct(results1)error('apm: requires a structure from momentg as input');elseif ~isstruct(results2)error('apm: requires a structure from momentg as input');end;nvar = results1(1).nvar;nvar2 = results2(1).nvar;if nvar ~= nvar2; error('apm: structure arguments have different # of variables');end;ndraw1 = results1(1).ndraw;ndraw2 = results2(1).ndraw;result.p1 = ndraw1/(ndraw1+ndraw2);result.p2 = ndraw2/(ndraw1+ndraw2);result.ndraw = ndraw1+ndraw2;result.meth = 'apm';result.nvar = nvar;ng = nvar;nf = 2;% pull out information for i=1:nvar; j=1; g(j,i) = results1(i).pmean; sdnum1(j,i) = results1(i).nse; sdnum2(j,i) = results1(i).nse1; sdnum3(j,i) = results1(i).nse2; sdnum4(j,i) = results1(i).nse3; j=2; g(j,i) = results2(i).pmean; sdnum1(j,i) = results2(i).nse; sdnum2(j,i) = results2(i).nse1; sdnum3(j,i) = results2(i).nse2; sdnum4(j,i) = results2(i).nse3; end;for i=1:nvar; for k=1:4; eg=0; nse=0; wtsum=0; if k==1; sdnum=sdnum1; elseif k==2; sdnum=sdnum2; elseif k==3; sdnum=sdnum3; elseif k==4; sdnum=sdnum4; end; gvar=zeros(nf-1); for j=1:nf; eg=eg+g(j,i)/(sdnum(j,i))^2; wtsum=wtsum+1/(sdnum(j,i))^2; end; eg=eg/wtsum; nse=1/sqrt(wtsum); for j=1:nf-2; gvar(j,j)=(sdnum(j,i))^2+(sdnum(j+1,i))^2; gvar(j,j+1)=-(sdnum(j+1,i))^2; gvar(j+1,j)=gvar(j,j+1); end; gvar(nf-1,nf-1)=(sdnum(nf-1,i))^2+(sdnum(nf,i))^2; ginv=inv(gvar); g1=g(1:nf-1,i); g2=g(2:nf,i); cstat=(g2-g1)'*ginv*(g2-g1); df=nf-1; p = 1-chis_prb(cstat,df); result(i).pmean(k) = eg; result(i).nse(k) = nse; result(i).prob(k) = p; end;end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -