From 00757767166083f0c2514f147b73545f75322dc9 Mon Sep 17 00:00:00 2001
From: Johannes Pfeifer <jpfeifer@gmx.de>
Date: Thu, 21 Nov 2019 11:32:13 +0100
Subject: [PATCH] Laplace approximation: filter out non-positive definite
 Hessians

Closes https://git.dynare.org/Dynare/dynare/issues/1659
---
 matlab/dynare_estimation_1.m | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m
index 933321d9bb..f46f684915 100644
--- a/matlab/dynare_estimation_1.m
+++ b/matlab/dynare_estimation_1.m
@@ -365,9 +365,13 @@ if any(bayestopt_.pshape > 0) && ~options_.mh_posterior_mode_estimation
     % Laplace approximation to the marginal log density:
     if options_.cova_compute
         estim_params_nbr = size(xparam1,1);
-        log_det_invhess = log(det(invhess./(stdh*stdh')))+2*sum(log(stdh));
-        likelihood = feval(objective_function,xparam1,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_);
-        oo_.MarginalDensity.LaplaceApproximation = .5*estim_params_nbr*log(2*pi) + .5*log_det_invhess - likelihood;
+        if ispd(invhess)
+            log_det_invhess = log(det(invhess./(stdh*stdh')))+2*sum(log(stdh));
+            likelihood = feval(objective_function,xparam1,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_);
+            oo_.MarginalDensity.LaplaceApproximation = .5*estim_params_nbr*log(2*pi) + .5*log_det_invhess - likelihood;
+        else
+            oo_.MarginalDensity.LaplaceApproximation = NaN;
+        end
         skipline()
         disp(sprintf('Log data density [Laplace approximation] is %f.',oo_.MarginalDensity.LaplaceApproximation))
         skipline()
-- 
GitLab