From ec9b47426aa1a07d31cea9976db90101239c9ed4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?=
 <stephane.adjemian@univ-lemans.fr>
Date: Fri, 9 Mar 2012 12:44:25 +0100
Subject: [PATCH] Added an option for the threshold level of neff in the
 generic case of the resampling routines.

---
 matlab/global_initialization.m                          | 3 ++-
 matlab/particle/sequential_importance_particle_filter.m | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m
index 6eaf33c47..406cee251 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 a38363243..a7786db20 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 ;
-- 
GitLab