From e22fea1715edc116cdd8db7dbf0c09498c09bc61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Karam=C3=A9?= <frederic.karame@univ-lemans.fr> Date: Thu, 17 Oct 2024 16:06:53 +0200 Subject: [PATCH] Add an option for second resampling (default = none). --- matlab/default_option_values.m | 1 + matlab/estimation/check_posterior_sampler_options.m | 4 +++- matlab/estimation/online/online_auxiliary_filter.m | 8 +------- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/matlab/default_option_values.m b/matlab/default_option_values.m index 6d6919166..928895146 100644 --- a/matlab/default_option_values.m +++ b/matlab/default_option_values.m @@ -515,6 +515,7 @@ options_.posterior_sampler_options.dsmh.tau = 10 ; options_.posterior_sampler_options.online.particles= 5000 ; options_.posterior_sampler_options.online.liu_west_delta = 0.99 ; options_.posterior_sampler_options.online.liu_west_max_resampling_tries = 5000 ; +options_.posterior_sampler_options.online.systematic_resampling = false; options_.trace_plot_ma = 200; options_.mh_autocorrelation_function_size = 30; diff --git a/matlab/estimation/check_posterior_sampler_options.m b/matlab/estimation/check_posterior_sampler_options.m index 12d570057..ccf43fed1 100644 --- a/matlab/estimation/check_posterior_sampler_options.m +++ b/matlab/estimation/check_posterior_sampler_options.m @@ -458,7 +458,9 @@ if init case 'liu_west_delta' posterior_sampler_options.liu_west_delta = options_list{i,2}; case 'liu_west_max_resampling_tries' - posterior_sampler_options.liu_west_max_resampling_tries= options_list{i,2}; + posterior_sampler_options.liu_west_max_resampling_tries = options_list{i,2}; + case 'systematic_resampling' + posterior_sampler_options.systematic_resampling = options_list{i,2}; otherwise warning(['online: Unknown option (' options_list{i,1} ')!']) end diff --git a/matlab/estimation/online/online_auxiliary_filter.m b/matlab/estimation/online/online_auxiliary_filter.m index d1fce18e6..fbd693638 100644 --- a/matlab/estimation/online/online_auxiliary_filter.m +++ b/matlab/estimation/online/online_auxiliary_filter.m @@ -40,7 +40,6 @@ function online_auxiliary_filter(xparam1, dataset_, options_, M_, estim_params_, % Set seed for randn(). options_ = set_dynare_seed_local_options(options_,'default'); pruning = options_.particle.pruning; -second_resample = options_.particle.resampling.status.systematic; variance_update = true; online_opt = options_.posterior_sampler_options.current_options; @@ -102,7 +101,6 @@ weights = ones(1,number_of_particles)/number_of_particles; % Initialization of the likelihood. const_lik = log(2*pi)*number_of_observed_variables; mean_xparam = zeros(number_of_parameters,sample_size); -%mode_xparam = zeros(number_of_parameters,sample_size); median_xparam = zeros(number_of_parameters,sample_size); std_xparam = zeros(number_of_parameters,sample_size); lb95_xparam = zeros(number_of_parameters,sample_size); @@ -315,9 +313,7 @@ for t=1:sample_size variance_update = false; end % final resampling (not advised) - if second_resample -% [~, idmode] = max(weights); -% mode_xparam(:,t) = xparam(:,idmode); + if online_opt.systematic_resampling indx = kitagawa(weights); StateVectors = StateVectors(:,indx) ; if pruning @@ -340,8 +336,6 @@ for t=1:sample_size save(sprintf('%s%sparameters_particles_final.mat', SimulationFolder, filesep()), 'param'); end else -% [~, idmode] = max(weights); -% mode_xparam(:,t) = xparam(:,idmode); mean_xparam(:,t) = xparam*(weights'); mat_var_cov = bsxfun(@minus, xparam,mean_xparam(:,t)); mat_var_cov = mat_var_cov*(bsxfun(@times, mat_var_cov, weights)'); -- GitLab