From 9208bcf049fb968121a88cb76d108a6a19f10e90 Mon Sep 17 00:00:00 2001
From: Johannes Pfeifer <jpfeifer@gmx.de>
Date: Thu, 12 Dec 2019 11:49:57 +0100
Subject: [PATCH] Modified harmonic mean: Transform hard-coded tolerance to
 parameter

Closes https://git.dynare.org/Dynare/dynare/issues/1666
---
 matlab/default_option_values.m | 3 +++
 matlab/marginal_density.m      | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/matlab/default_option_values.m b/matlab/default_option_values.m
index 4434a2666c..c451243831 100644
--- a/matlab/default_option_values.m
+++ b/matlab/default_option_values.m
@@ -714,6 +714,9 @@ options_.convergence.geweke.geweke_interval=[0.2 0.5];
 options_.convergence.rafterylewis.indicator=false;
 options_.convergence.rafterylewis.qrs=[0.025 0.005 0.95];
 
+%tolerance for Modified Harmonic Mean estimator
+options_.marginal_data_density.harmonic_mean.tolerance = 0.01;
+
 % Options for lmmcp solver
 options_.lmmcp.status = false;
 
diff --git a/matlab/marginal_density.m b/matlab/marginal_density.m
index 1e87281610..1179fb50c1 100644
--- a/matlab/marginal_density.m
+++ b/matlab/marginal_density.m
@@ -100,7 +100,7 @@ while check_coverage
         marginal(linee,:) = [p, lpost_mode-log(tmp/((TotalNumberOfMhDraws-TODROP)*nblck))];
         warning(warning_old_state);
     end
-    if abs((marginal(9,2)-marginal(1,2))/marginal(9,2)) > 0.01 || isinf(marginal(1,2))
+    if abs((marginal(9,2)-marginal(1,2))/marginal(9,2)) > options_.marginal_data_density.harmonic_mean.tolerance || isinf(marginal(1,2))
         fprintf('\n')
         if increase == 1
             disp('Estimation::marginal density: The support of the weighting density function is not large enough...')
-- 
GitLab