diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 6eaf33c47064e8a3876668404d2b4b691d726d71..406cee2514d2d94677cbf7bd2e0b04f095ad6bed 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -179,7 +179,8 @@ particle.unscented.alpha = 1; particle.unscented.beta = 2; particle.unscented.kappa = 1; % Configuration of resampling in case of particles -particle.resampling.status = 'systematic' ; +particle.resampling.status = 'systematic'; % 'generic' +particle.resampling.neff_threshold = .5; % Choice of the resampling method particle.resampling.method1 = 'traditional' ; particle.resampling.method2 = 'kitagawa'; diff --git a/matlab/particle/sequential_importance_particle_filter.m b/matlab/particle/sequential_importance_particle_filter.m index a383632433d95082bd1c4f603f5019fd584e01d6..a7786db20d5960040224cb478b78bad74edb60a5 100644 --- a/matlab/particle/sequential_importance_particle_filter.m +++ b/matlab/particle/sequential_importance_particle_filter.m @@ -131,7 +131,7 @@ for t=1:sample_size lik(t) = log(mean(wtilde))+dfac; weights = wtilde/sum(wtilde); Neff = 1/(weights*weights'); - if (Neff<.5*sample_size && strcmpi(DynareOptions.particle.resampling.status,'generic')) || strcmpi(DynareOptions.particle.resampling.status,'systematic') + if (Neff<DynareOptions.particle.resampling.neff_threshold*sample_size && strcmpi(DynareOptions.particle.resampling.status,'generic')) || strcmpi(DynareOptions.particle.resampling.status,'systematic') nb_obs_resamp = nb_obs_resamp+1 ; StateVectors = tmp(mf0,resample(weights,DynareOptions.particle.resampling.method1,DynareOptions.particle.resampling.method2)); weights = ones(1,number_of_particles)/number_of_particles ;