diff --git a/matlab/calibrate_mh_scale_parameter.m b/matlab/calibrate_mh_scale_parameter.m index b1e7feb992c15dccacdf82b289cb697712045b9d..4425e7516100aab995a9359b38533d9bfe42e6f0 100644 --- a/matlab/calibrate_mh_scale_parameter.m +++ b/matlab/calibrate_mh_scale_parameter.m @@ -1,5 +1,5 @@ function Scale = calibrate_mh_scale_parameter(ObjectiveFunction, CovarianceMatrix, Parameters, MhBounds, options, varargin) - +% function Scale = calibrate_mh_scale_parameter(ObjectiveFunction, CovarianceMatrix, Parameters, MhBounds, options, varargin) % Tune the MH scale parameter so that the overall acceptance ratio is close to AcceptanceTarget. % % INPUTS @@ -11,7 +11,31 @@ function Scale = calibrate_mh_scale_parameter(ObjectiveFunction, CovarianceMatri % - varargin [cell] Additional arguments to be passed to ObjectiveFunction. % % OUTPUTS -% - Scale [double] scalar, optimal scale parameter for teh jumping distribution. +% - Scale [double] scalar, optimal scale parameter for the jumping distribution. +% +% Note: program terminates if c3 consecutive runs of stepsize draws occured where +% i) the overall acceptance rate was less than c1 from target and +% ii) less than c2 over the last stepsize=2000 draws. +% Adjustment between steps takes place using a weighted average with the exponent being rho + + + +% Copyright (C) 2020-2021 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. % Fire up the wait bar hh = dyn_waitbar(0,'Tuning of the scale parameter...'); @@ -73,7 +97,7 @@ while j<=options.maxiter prtfrc = j/options.maxiter; % Update the waitbar if ~mod(j, 10) - dyn_waitbar(prtfrc, hh, sprintf('Acceptance ratio [during last 500]: %f [%f]', isux/j, jsux/jj)); + dyn_waitbar(prtfrc, hh, sprintf('Acceptance ratio [during last %u]: %f [%f]', options.stepsize, isux/j, jsux/jj)); end % Adjust the value of the scale parameter. if ~mod(j, options.stepsize) diff --git a/matlab/initial_estimation_checks.m b/matlab/initial_estimation_checks.m index fa4acfcde8211473a2236eba5ffb4719ff9d1a97..36096b87891044ea81e96d3e82f18bb098d41781 100644 --- a/matlab/initial_estimation_checks.m +++ b/matlab/initial_estimation_checks.m @@ -290,6 +290,10 @@ if ~isequal(DynareOptions.mode_compute,11) disp(['Initial value of the log posterior (or likelihood): ' num2str(-fval)]); end +if DynareOptions.mh_tune_jscale.status && (DynareOptions.mh_tune_jscale.maxiter<DynareOptions.mh_tune_jscale.stepsize) + warning('You specified mh_tune_jscale, but the maximum number of iterations is smaller than the step size. No update will take place.') +end + function evaluate_expression(expression,M_,oo_) % function evaluate_expression(expression,M_,oo_) %evaluates expressions relying on M_ and oo_ having their original names