📄 prt_coda.m
字号:
function prt_coda(results,vnames,fid)% PURPOSE: Prints output from Gibbs sampler coda diagnostics%---------------------------------------------------% USAGE: prt_coda(results,vnames,fid)% Where: results = a structure returned by coda, raftery, apm, momentg% fid = file-id for printing results to a file% (defaults to the MATLAB command window)%--------------------------------------------------- % NOTES: e.g. vnames = ['beta ',% 'sigma ']; NOTE: fixed width% e.g. fid = fopen('gibbs.out','wr');% use prt_coda(results,[],fid) to print to a file with no vnames % --------------------------------------------------% RETURNS: nothing, just prints the diagnostic results% --------------------------------------------------% SEE ALSO: prt%--------------------------------------------------- % written by:% James P. LeSage, Dept of Economics% University of Toledo% 2801 W. Bancroft St,% Toledo, OH 43606% jpl@jpl.econ.utoledo.eduif ~isstruct(results) error('prt_coda requires structure argument');elseif nargin == 1 nflag = 0; fid = 1;elseif nargin == 2 fid = 1; nflag = 1;elseif nargin == 3 nflag = 0; [vsize junk] = size(vnames); % user may supply a blank argument if vsize > 0 nflag = 1; end;else error('Wrong # of arguments to prt_coda');end;nvar = results(1).nvar;if nflag == 0 % no variable names make some upVname = []; for i=1:nvar Vname{i} = str2mat(['variable ',num2str(i)]); end;elseif (nflag == 1) % the user supplied variable namesVname = [];[tst_n nsize] = size(vnames); if tst_n ~= nvar error('Wrong # of variable names in coda -- check vnames argument'); end; nmax = min(nsize,16); % truncate vnames to 16-characters for i=1:nvar Vname{i} = vnames(i,1:nmax); end;end; % end of nflag issueswitch results(1).methcase {'raftery'} % <=================== raftery diagnostics% ========> Raftery-Lewis diagnosticsrout = zeros(nvar,5);for i=1:nvar; rout(i,1) = results(i).kthin; rout(i,2) = results(i).nburn; rout(i,3) = results(i).n; rout(i,4) = results(i).nmin; rout(i,5) = results(i).irl;end;% print results with vnames fprintf(fid,'Raftery-Lewis Diagnostics for each parameter chain \n');fprintf(fid,'(q=%6.4f, r=%8.6f, s=%8.6f)\n',results(1).q,results(1).r,results(1).s);vstring = 'Variable';cstring1 = 'Thin';cstring2 = 'Burn';cstring3 = 'Total(N)';cstring4 = '(Nmin)';cstring5 = 'I-stat';in.cnames = strvcat(cstring1,cstring2,cstring3,cstring4,cstring5);in.fmt = strvcat('%10d','%10d','%10d','%10d','%10.3f');in.fid = fid;rnames = vstring;for i=1:nvarrnames = strvcat(rnames,Vname{i});end;in.rnames = rnames;mprint(rout,in);case {'momentg'} % <=================== Geweke NSE, RNE diagnosticsfprintf(fid,'Geweke Diagnostics for each parameter chain \n');vs = 'Variable ';cs1 = 'Mean';cs2 = 'std dev';cs3 = 'NSE iid';cs4 = 'RNE iid';in0.cnames = strvcat(cs1,cs2,cs3,cs4);in0.fmt = '%12.6f';gout = zeros(nvar,4);for i=1:nvar gout(i,:) = [results(i).pmean results(i).pstd results(i).nse results(i).rne];end;rnames = vs;for i=1:nvarrnames = strvcat(rnames,Vname{i});end;in0.rnames = rnames;in0.fid = fid;mprint(gout,in0);cs1 = 'NSE 4% ';cs2 = 'RNE 4% ';cs3 = 'NSE 8% ';cs4 = 'RNE 8% ';cs5 = 'NSE 15%';cs6 = 'RNE 15%';in1.cnames = strvcat(cs1,cs2,cs3,cs4,cs5,cs6);gout2 = zeros(nvar,6);for i=1:nvar gout2(i,:) = [results(i).nse1 results(i).rne1 results(i).nse2 results(i).rne2 ... results(i).nse3 results(i).rne3];end;in1.fid = fid;in1.fmt = '%12.6f';in1.rnames = rnames;mprint(gout2,in1);case {'apm'} % <=================== Geweke chi-sqr diagnosticsp1 = results(1).p1;p2 = results(1).p2;c = '%';fprintf(fid,'Geweke Chi-squared test for each parameter chain \n');fprintf(fid,'based on %d draws \n',results(1).ndraw);fprintf(fid,'First %2.0f%s versus Last %2.0f%s of the sample \n',100*p1,c,100*p2,c);in3.cnames = strvcat('Mean','N.S.E.','Chi-sq Prob');in3.rnames = strvcat('NSE estimate','i.i.d.','4% taper','8% taper','15% taper');in3.fmt = '%12.6f';for i=1:nvar fprintf(1,'Variable %16s\n', strjust(Vname{i},'right'));gout3 = zeros(4,3); for k=1:4 gout3(k,1) = results(i).pmean(k); gout3(k,2) = results(i).nse(k); gout3(k,3) = results(i).prob(k); end;in3.fid = fid;mprint(gout3,in3);end;case{'coda'}nvar = results(1).nvar;fprintf(fid,'MCMC CONVERGENCE diagnostics \n');fprintf(fid,'Based on sample size = %10d \n',results(1).ndraw);fprintf(fid,'Autocorrelations within each parameter chain \n');vstring = 'Variable';lstring1 = 'Lag 1';lstring2 = 'Lag 5';lstring3 = 'Lag 10';lstring4 = 'Lag 50';cnames = strvcat(lstring1,lstring2,lstring3,lstring4);rnames = vstring;for i=1:nvarrnames = strvcat(rnames,Vname{i});end;in.fmt = '%12.3f';in.rnames = rnames;in.cnames = cnames;aprt = zeros(nvar,4);for i=1:nvar aprt(i,1) = results(i).auto1; aprt(i,2) = results(i).auto5; aprt(i,3) = results(i).auto10; aprt(i,4) = results(i).auto50;end;in.fid = fid;mprint(aprt,in);fprintf(fid,'Raftery-Lewis Diagnostics for each parameter chain \n');fprintf(fid,'(q=%8.6f, r=%8.6f, s=%8.6f)\n',results(1).q,results(1).r,results(1).s);vstring = 'Variable';cstring1 = 'Thin';cstring2 = 'Burn';cstring3 = 'Total(N)';cstring4 = '(Nmin)';cstring5 = 'I-stat';in2.cnames = strvcat(cstring1,cstring2,cstring3,cstring4,cstring5);rout = zeros(nvar,5);for i=1:nvar rout(i,1) = results(i).kthin; rout(i,2) = results(i).nburn; rout(i,3) = results(i).n; rout(i,4) = results(i).nmin; rout(i,5) = results(i).irl;end;fmt = strvcat('%10d','%10d','%10d','%10d','%10.3f');in2.fid = fid;in2.rnames = rnames;in2.fmt = fmt;mprint(rout,in2);% =========> print Geweke diagnosticsfprintf(fid,'Geweke Diagnostics for each parameter chain \n');vs = 'Variable';cs1 = 'Mean';cs2 = 'std dev';cs3 = 'NSE iid';cs4 = 'RNE iid';in.cnames = strvcat(cs1,cs2,cs3,cs4);in.fmt = '%12.6f';gout = zeros(nvar,4);for i=1:nvar gout(i,:) = [results(i).pmean results(i).pstd results(i).nse results(i).rne];end;in.fid = fid;in.rnames = rnames;mprint(gout,in);vstring = 'Variable';cs1 = 'NSE 4% ';cs2 = 'RNE 4% ';cs3 = 'NSE 8% ';cs4 = 'RNE 8% ';cs5 = 'NSE 15%';cs6 = 'RNE 15%';in2.cnames = strvcat(cs1,cs2,cs3,cs4,cs5,cs6);gout2 = zeros(nvar,6);for i=1:nvar gout2(i,:) = [results(i).nse1 results(i).rne1 results(i).nse2 results(i).rne2 ... results(i).nse3 results(i).rne3];end;in2.fid = fid;in2.fmt = '%12.6f';in2.rnames = rnames;mprint(gout2,in2);otherwiseerror('results structure not known by prt_coda function');end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -