📄 mcmcsumm.m
字号:
% MCMCSUMM - Summary Statistics % Copyright (c) 1998, Harvard University. Full copyright in the file Copyright%% [S] = mcmcsumm(A) %% A = r x c x s array of s samples of an r x c matrix of parameters%% S = structure containing returned values (mean, median, etc.)% select components with S.mean, S.median, etc.%% Note: all summary statistics are marginal, there are no multivariate% summaries at this time.%% These routines use the last dimension of an array as the% sample index. So an array with dimension (nr,nc,ns) % will be a collection of ns samples of an nr by nc matrix of % parameters. An array with dimension (nr,nc) will% be nc samples of an nr-vector of parameters.% When the summary statistics are calculated, the last dimension% is dropped. % % See also: MCMCTRACE, MCMCLT%function [S] = mcmcsumm(A) if isnan(A), S.mean = NaN; S.min = NaN; S.max = NaN; S.std = NaN; S.sorted = NaN; S.median = NaN; S.meanvec = NaN; S.cov = NaN; S.acf= NaN; S.acf10max = NaN; S.acf10med = NaN; S.gr2 = NaN ; S.gr2max = NaN ;elsedd = size(A) ;ll = length(dd) ;if (ll==2), aa = reshape(A, [dd(1),1,dd(2)]) ;else aa = A ;end[nr,nc,ns] = size(aa) ;maxlag = min(100,ns-1) ;Z = zeros(nr,nc,ns) ;S = struct('mean',Z) ;S.mean = mean(aa,3) ;S.min = min(aa,[],3) ;S.max = max(aa,[],3) ;S.std = std(aa,0,3) ;S.sorted = NaN*zeros(nr,nc,ns) ;S.median = NaN*zeros(nr,nc) ;tmpvec = reshape(S.mean, nr*nc, 1) ;sel = ~isnan(tmpvec) ;S.meanvec = tmpvec(sel,:) ;aavec = reshape(aa, nr*nc, ns) ;aavec = aavec(sel,:) ;if nr>0 & nc>0 & ns>0, % then there's something to work withS.cov = cov(aavec') ;for ir = 1:nr,for ic = 1:nc, xx = reshape(aa(ir,ic,:),1,ns) ; S.sorted(ir,ic,:) = sort(xx) ; S.median(ir,ic) = median(xx) ; xx0 = xx - mean(xx) ; if S.max(ir,ic)-S.min(ir,ic) < .0000000001, xc = NaN * zeros(1,2*maxlag+1) ; else xc = xcorr(xx0,xx0,maxlag,'coeff'); end S.acf(ir,ic,:) = [xc(maxlag+(1:(maxlag+1)))] ; S.acf1 = S.acf(:,:,2) ;end end if ns>10, S.acf10 = S.acf(:,:,11) ; tmpacf = reshape(S.acf10,1,nr*nc) ; if any(~isnan(tmpacf)), tmpacf = tmpacf(~isnan(tmpacf)) ; S.acf10max = max(max( tmpacf )) ; S.acf10med = median(median( tmpacf )) ; else S.acf10max = NaN ; S.acf10med = NaN ; endelse S.acf10 = NaN*S.acf(:,:,1) ; S.acf10max = NaN ; S.acf10med = NaN ;endelse % one of nr nc ns == 0 S.sorted(:,:,:) = A ; S.median = A(:,:,1) ; S.acf10max = NaN ; S.acf10med = NaN ; S.acf = NaN * zeros(nr,nc,maxlag+1) ; S.acf1 = S.acf(:,:,2) ; S.acf10 = S.acf(:,:,11) ; S.cov = A(:,:,1) ;endS.gr2 = mcmcgr(A,2) ;S.gr2max = max(max(S.gr2)) ;end% end of NaN branch
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -