0001 function SampleAddress = selec_posterior_draws(SampleSize,drsize)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 global M_ options_ estim_params_ oo_
0041
0042
0043 npar = estim_params_.nvx;
0044 npar = npar + estim_params_.nvn;
0045 npar = npar + estim_params_.ncx;
0046 npar = npar + estim_params_.ncn;
0047 npar = npar + estim_params_.np;
0048
0049
0050 switch nargin
0051 case 1
0052 info = 0;
0053 case 2
0054 MAX_mega_bytes = 10;
0055 if drsize>0
0056 info=2;
0057 else
0058 info=1;
0059 end
0060 drawsize = drsize+npar*8/1048576;
0061 otherwise
0062 error(['selec_posterior_draws:: Unexpected number of input arguments!'])
0063 end
0064
0065
0066 MhDirectoryName = CheckPath('metropolis',M_.dname);
0067 fname = [ MhDirectoryName '/' M_.fname];
0068 load([ fname '_mh_history.mat']);
0069 FirstMhFile = record.KeepedDraws.FirstMhFile;
0070 FirstLine = record.KeepedDraws.FirstLine;
0071 TotalNumberOfMhFiles = sum(record.MhDraws(:,2));
0072 LastMhFile = TotalNumberOfMhFiles;
0073 TotalNumberOfMhDraws = sum(record.MhDraws(:,1));
0074 NumberOfDraws = TotalNumberOfMhDraws-floor(options_.mh_drop*TotalNumberOfMhDraws);
0075 MAX_nruns = ceil(options_.MaxNumberOfBytes/(npar+2)/8);
0076 mh_nblck = options_.mh_nblck;
0077
0078
0079 SampleAddress = zeros(SampleSize,4);
0080 for i = 1:SampleSize
0081 ChainNumber = ceil(rand*mh_nblck);
0082 DrawNumber = ceil(rand*NumberOfDraws);
0083 SampleAddress(i,1) = DrawNumber;
0084 SampleAddress(i,2) = ChainNumber;
0085 if DrawNumber <= MAX_nruns-FirstLine+1
0086 MhFileNumber = FirstMhFile;
0087 MhLineNumber = FirstLine+DrawNumber-1;
0088 else
0089 DrawNumber = DrawNumber-(MAX_nruns-FirstLine+1);
0090 MhFileNumber = FirstMhFile+ceil(DrawNumber/MAX_nruns);
0091 MhLineNumber = DrawNumber-(MhFileNumber-FirstMhFile-1)*MAX_nruns;
0092 end
0093 SampleAddress(i,3) = MhFileNumber;
0094 SampleAddress(i,4) = MhLineNumber;
0095 end
0096 SampleAddress = sortrows(SampleAddress,[3 2]);
0097
0098
0099
0100 if info
0101 if SampleSize*drawsize <= MAX_mega_bytes
0102 pdraws = cell(SampleSize,info);
0103 old_mhfile = 0;
0104 old_mhblck = 0;
0105 for i = 1:SampleSize
0106 mhfile = SampleAddress(i,3);
0107 mhblck = SampleAddress(i,2);
0108 if (mhfile ~= old_mhfile) || (mhblck ~= old_mhblck)
0109 load([fname '_mh' num2str(mhfile) '_blck' num2str(mhblck) '.mat'],'x2')
0110 end
0111 pdraws(i,1) = {x2(SampleAddress(i,4),:)};
0112 if info-1
0113 set_parameters(pdraws{i,1});
0114 [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);
0115 pdraws(i,2) = { dr };
0116 end
0117 old_mhfile = mhfile;
0118 old_mhblck = mhblck;
0119 end
0120 clear('x2')
0121 save([fname '_posterior_draws1.mat'],'pdraws')
0122 else
0123 NumberOfDrawsPerFile = fix(MAX_mega_bytes/drawsize);
0124 NumberOfFiles = ceil(SampleSize*drawsize/MAX_mega_bytes);
0125 NumberOfLines = SampleSize - (NumberOfFiles-1)*NumberOfDrawsPerFile;
0126 linee = 0;
0127 fnum = 1;
0128 pdraws = cell(NumberOfDrawsPerFile,info);
0129 old_mhfile = 0;
0130 old_mhblck = 0;
0131 for i=1:SampleSize
0132 linee = linee+1;
0133 mhfile = SampleAddress(i,3);
0134 mhblck = SampleAddress(i,2);
0135 if (mhfile ~= old_mhfile) || (mhblck ~= old_mhblck)
0136 load([fname '_mh' num2str(mhfile) '_blck' num2str(mhblck) '.mat'],'x2')
0137 end
0138 pdraws(linee,1) = {x2(SampleAddress(i,4),:)};
0139 if info-1
0140 set_parameters(pdraws{linee,1});
0141 [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);
0142 pdraws(linee,2) = { dr };
0143 end
0144 old_mhfile = mhfile;
0145 old_mhblck = mhblck;
0146 if fnum < NumberOfFiles && linee == NumberOfDrawsPerFile
0147 linee = 0;
0148 save([fname '_posterior_draws' num2str(fnum) '.mat'],'pdraws')
0149 fnum = fnum+1;
0150 if fnum < NumberOfFiles
0151 pdraws = cell(NumberOfDrawsPerFile,info);
0152 else
0153 pdraws = cell(NumberOfLines,info);
0154 end
0155 end
0156 end
0157 save([fname '_posterior_draws' num2str(fnum) '.mat'],'pdraws')
0158 end
0159 end