Fixed bug for mode_compute=6 in Octave. Added an option to replace waitbar in matlab by

textbar (as in Octave). The user has to set options_.console_mode before the
estimation command. Cosmetic changes in gmhmaxlik (mode_compute=6).
time-shift
Stéphane Adjemian (Scylla) 2010-06-25 14:58:53 +02:00
parent 8b614d3079
commit be1e0f1b8a
5 changed files with 122 additions and 37 deletions

View File

@ -516,8 +516,12 @@ if options_.mode_compute > 0 & options_.posterior_mode_estimation
end
options_.mh_jscale = Scale;
mouvement = max(max(abs(PostVar-OldPostVar)));
disp(['Change in the covariance matrix = ' num2str(mouvement) '.'])
disp(['Mode improvement = ' num2str(abs(OldMode-fval))])
disp(' ')
disp('========================================================== ')
disp([' Change in the covariance matrix = ' num2str(mouvement) '.'])
disp([' Mode improvement = ' num2str(abs(OldMode-fval))])
disp([' New value of jscale = ' num2str(Scale)])
disp('========================================================== ')
OldMode = fval;
else
OldPostVar = PostVar;

View File

@ -30,6 +30,8 @@ function global_initialization()
global oo_ M_ options_
options_.console_mode = 0;
options_.terminal_condition = 0;
options_.rplottype = 0;
options_.smpl = 0;

View File

@ -90,8 +90,13 @@ CovJump = VarCov;
ModePar = xparam1;
%% [1] I tune the scale parameter.
hh = waitbar(0,'Tuning of the scale parameter...');
set(hh,'Name','Tuning of the scale parameter.')
if exist('OCTAVE_VERSION') || options_.console_mode
diary off;
disp(' ');
else
hh = waitbar(0,'Tuning of the scale parameter...');
set(hh,'Name','Tuning of the scale parameter.')
end
j = 1; jj = 1;
isux = 0; jsux = 0; test = 0;
ix2 = ModePar;% initial condition!
@ -121,7 +126,17 @@ while j<=MaxNumberOfTuningSimulations
jsux = jsux + 1;
end% ... otherwise I don't move.
prtfrc = j/MaxNumberOfTuningSimulations;
waitbar(prtfrc,hh,sprintf('Acceptation rates: %f [%f]',isux/j,jsux/jj));
if exist('OCTAVE_VERSION') || options_.console_mode
if mod(j, 10)==0
if exist('OCTAVE_VERSION')
printf('Tuning of the scale parameter (%f%% done):: Acceptance rates: %f [%f]\r',prtfrc*100,isux/j,jsux/jj);
else
fprintf(' Tuning of the scale parameter (%f \b%% done):: Acceptance rates: %f [%f]\r',prtfrc*100,isux/j,jsux/jj);
end
end
else
waitbar(prtfrc,hh,sprintf('Acceptance rates: %f [%f]',isux/j,jsux/jj));
end
if j/500 == round(j/500)
test1 = jsux/jj;
cfactor = test1/AcceptanceTarget;
@ -141,11 +156,18 @@ while j<=MaxNumberOfTuningSimulations
j = j+1;
jj = jj + 1;
end
close(hh);
iScale
if exist('OCTAVE_VERSION') || options_.console_mode
diary on;
else
close(hh);
end
%% [2] One block metropolis, I update the covariance matrix of the jumping distribution
hh = waitbar(0,'Metropolis-Hastings...');
set(hh,'Name','Looking for the posterior covariance...')
if exist('OCTAVE_VERSION') || options_.console_mode
diary off;
else
hh = waitbar(0,'Metropolis-Hastings...');
set(hh,'Name','Estimation of the posterior covariance...')
end
j = 1;
isux = 0;
ilogpo2 = - feval(ObjFun,ix2,varargin{:});
@ -168,7 +190,17 @@ while j<= NumberOfIterations
jsux = jsux + 1;
end% ... otherwise I don't move.
prtfrc = j/NumberOfIterations;
waitbar(prtfrc,hh,sprintf('%f done, acceptation rate %f',prtfrc,isux/j));
if exist('OCTAVE_VERSION') || options_.console_mode
if mod(j, 10)==0
if exist('OCTAVE_VERSION')
printf('Estimation of the posterior covariance (%f%% done):: Acceptance rates: %f\r',prtfrc,isux/j);
else
fprintf(' Estimation of the posterior covariance (%f \b%% done):: Acceptance rates: %f \r',prtfrc*100,isux/j);
end
end
else
waitbar(prtfrc,hh,sprintf('Acceptance rate: %f',isux/j));
end
% I update the covariance matrix and the mean:
oldMeanPar = MeanPar;
MeanPar = oldMeanPar + (1/j)*(ix2-oldMeanPar);
@ -176,15 +208,23 @@ while j<= NumberOfIterations
(1/j)*(ix2*ix2' - CovJump - oldMeanPar*oldMeanPar');
j = j+1;
end
close(hh);
if exist('OCTAVE_VERSION') || options_.console_mode
diary on;
else
close(hh);
end
PostVar = CovJump;
PostMean = MeanPar;
%% [3 & 4] I tune the scale parameter (with the new covariance matrix) if
%% this is the last call to the routine, and I climb the hill (without
%% updating the covariance matrix)...
if strcmpi(info,'LastCall')
hh = waitbar(0,'Tuning of the scale parameter...');
set(hh,'Name','Tuning of the scale parameter.')
if exist('OCTAVE_VERSION') || options_.console_mode
diary off;
else
hh = waitbar(0,'Tuning of the scale parameter...');
set(hh,'Name','Tuning of the scale parameter.')
end
j = 1; jj = 1;
isux = 0; jsux = 0;
test = 0;
@ -209,7 +249,17 @@ if strcmpi(info,'LastCall')
jsux = jsux + 1;
end% ... otherwise I don't move.
prtfrc = j/MaxNumberOfTuningSimulations;
waitbar(prtfrc,hh,sprintf('Acceptation rates: %f [%f]',isux/j,jsux/jj));
if exist('OCTAVE_VERSION') || options_.console_mode
if mod(j, 10)==0
if exist('OCTAVE_VERSION')
printf('Tuning of the scale parameter (%f%% done):: Acceptance rates: %f [%f]\r',prtfrc*100,isux/j,jsux/jj);
else
fprintf(' Tuning of the scale parameter (%f \b%% done):: Acceptance rates: %f [%f] \r',prtfrc*100,isux/j,jsux/jj);
end
end
else
waitbar(prtfrc,hh,sprintf('Acceptance rates: %f [%f]',isux/j,jsux/jj));
end
if j/1000 == round(j/1000)
test1 = jsux/jj;
cfactor = test1/AcceptanceTarget;
@ -225,16 +275,23 @@ if strcmpi(info,'LastCall')
j = j+1;
jj = jj + 1;
end
close(hh);
if exist('OCTAVE_VERSION') || options_.console_mode
diary on;
else
close(hh);
end
Scale = iScale;
iScale
%%
%% Now I climb the hill
%%
climb = 1;
if climb
hh = waitbar(0,' ');
set(hh,'Name','Now I am climbing the hill...')
if exist('OCTAVE_VERSION') || options_.console_mode
diary off;
else
hh = waitbar(0,' ');
set(hh,'Name','Now I am climbing the hill...')
end
j = 1; jj = 1;
jsux = 0;
test = 0;
@ -251,7 +308,17 @@ if strcmpi(info,'LastCall')
jsux = jsux + 1;
end% otherwise I don't move...
prtfrc = j/MaxNumberOfClimbingSimulations;
waitbar(prtfrc,hh,sprintf('%f Jumps / MaxStepSize %f',jsux,sqrt(max(diag(iScale*CovJump)))));
if exist('OCTAVE_VERSION') || options_.console_mode
if mod(j, 10)==0
if exist('OCTAVE_VERSION')
printf('Now I am climbing the hill (%f%% done):: %f Jumps / MaxStepSize %f\r',prtfrc*100,jsux,sqrt(max(diag(iScale*CovJump))));
else
fprintf(' Now I am climbing the hill (%f \b%% done):: %f Jumps / MaxStepSize %f \r',prtfrc*100,jsux,sqrt(max(diag(iScale*CovJump))));
end
end
else
waitbar(prtfrc,hh,sprintf('%f Jumps / MaxStepSize %f',jsux,sqrt(max(diag(iScale*CovJump)))));
end
if j/200 == round(j/200)
if jsux<=1
test = test+1;
@ -271,7 +338,11 @@ if strcmpi(info,'LastCall')
j = j+1;
jj = jj + 1;
end
close(hh);
if exist('OCTAVE_VERSION') || options_.console_mode
diary on;
else
close(hh);
end
end%climb
else
Scale = iScale;

View File

@ -102,8 +102,9 @@ for b = fblck:nblck,
x2 = zeros(InitSizeArray(b),npar);
logpo2 = zeros(InitSizeArray(b),1);
end
if exist('OCTAVE_VERSION')
diary off;
if exist('OCTAVE_VERSION') || options_.console_mode
diary off
disp(' ')
elseif whoiam
% keyboard;
waitbarString = ['Please wait... Metropolis-Hastings (' int2str(b) '/' int2str(options_.mh_nblck) ')...'];
@ -149,9 +150,13 @@ for b = fblck:nblck,
logpo2(irun) = ilogpo2(b);
end
prtfrc = j/nruns(b);
if exist('OCTAVE_VERSION')
if mod(j, 10) == 0,
printf('MH: Computing Metropolis-Hastings (chain %d/%d): %3.f%% done, acception rate: %3.f%%\r', b, nblck, 100 * prtfrc, 100 * isux / j);
if exist('OCTAVE_VERSION') || options_.console_mode
if mod(j, 10) == 0
if exist('OCTAVE_VERSION')
printf('MH: Computing Metropolis-Hastings (chain %d/%d): %3.f%% done, acception rate: %3.f%%\r', b, nblck, 100 * prtfrc, 100 * isux / j);
else
fprintf(' MH: Computing Metropolis-Hastings (chain %d/%d): %3.f \b%% done, acception rate: %3.f \b%%\r', b, nblck, 100 * prtfrc, 100 * isux / j);
end
end
if mod(j,50)==0 & whoiam,
% keyboard;
@ -212,9 +217,9 @@ for b = fblck:nblck,
irun = irun + 1;
end% End of the simulations for one mh-block.
record.AcceptationRates(b) = isux/j;
if exist('OCTAVE_VERSION')
if exist('OCTAVE_VERSION') || options_.console_mode
printf('\n');
diary on;
diary on
elseif ~whoiam
close(hh);
end

View File

@ -133,8 +133,9 @@ for b = fblck:nblck,
x2 = zeros(InitSizeArray(b),npar);
logpo2 = zeros(InitSizeArray(b),1);
end
if exist('OCTAVE_VERSION')
diary off;
if exist('OCTAVE_VERSION') || options_.console_mode
diary off
disp(' ')
elseif whoiam
% keyboard;
waitbarString = ['Please wait... Metropolis-Hastings (' int2str(b) '/' int2str(options_.mh_nblck) ')...'];
@ -177,11 +178,15 @@ for b = fblck:nblck,
logpo2(irun) = ilogpo2(b);
end
prtfrc = j/nruns(b);
if exist('OCTAVE_VERSION')
if mod(j, 10) == 0,
printf('MH: Computing Metropolis-Hastings (chain %d/%d): %3.f%% done, acception rate: %3.f%%\r', b, nblck, 100 * prtfrc, 100 * isux / j);
if exist('OCTAVE_VERSION') || options_.console_mode
if mod(j, 10) == 0
if exist('OCTAVE_VERSION')
printf('MH: Computing Metropolis-Hastings (chain %d/%d): %3.f%% done, acception rate: %3.f%%\r', b, nblck, 100 * prtfrc, 100 * isux / j);
else
fprintf(' MH: Computing Metropolis-Hastings (chain %d/%d): %3.f \b%% done, acceptance rate: %3.f \b%%\r', b, nblck, 100 * prtfrc, 100 * isux / j);
end
end
if mod(j,50)==0 & whoiam,
if mod(j,50)==0 & whoiam
% keyboard;
waitbarString = [ '(' int2str(b) '/' int2str(options_.mh_nblck) '), ' sprintf('accept. %3.f%%%%', 100 * isux/j)];
fMessageStatus(prtfrc,whoiam,waitbarString, '', options_.parallel(ThisMatlab), MasterName, DyMo)
@ -240,7 +245,7 @@ for b = fblck:nblck,
irun = irun + 1;
end% End of the simulations for one mh-block.
record.AcceptationRates(b) = isux/j;
if exist('OCTAVE_VERSION')
if exist('OCTAVE_VERSION') || options_.console_mode
printf('\n');
diary on;
elseif ~whoiam
@ -255,6 +260,4 @@ end% End of the loop over the mh-blocks.
myoutput.record = record;
myoutput.irun = irun;
myoutput.NewFile = NewFile;
myoutput.OutputFileName = OutputFileName;
myoutput.OutputFileName = OutputFileName;