From 30bfa162117b83f0153c8f29776e5a2afb811cb0 Mon Sep 17 00:00:00 2001
From: Johannes Pfeifer <jpfeifer@gmx.de>
Date: Thu, 6 Feb 2020 13:30:00 +0100
Subject: [PATCH] Fixes related to estimation under discretion

---
 matlab/PosteriorIRF_core1.m                   |  6 +++++-
 matlab/discretionary_policy_1.m               | 13 ++++++++++++-
 matlab/selec_posterior_draws.m                |  6 +++++-
 tests/discretionary_policy/dennis_1_estim.mod |  3 ++-
 4 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/matlab/PosteriorIRF_core1.m b/matlab/PosteriorIRF_core1.m
index 403c0b557a..ffdbad0059 100644
--- a/matlab/PosteriorIRF_core1.m
+++ b/matlab/PosteriorIRF_core1.m
@@ -145,7 +145,11 @@ while fpar<B
     end
     stock_param(irun2,:) = deep;
     set_parameters(deep);
-    [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);
+    if options_.discretionary_policy
+        [dr,info,M_,options_,oo_] = discretionary_policy_1(options_.instruments,M_,options_,oo_);
+    else
+        [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);
+    end
     oo_.dr = dr;
     if info(1)
         nosaddle = nosaddle + 1;
diff --git a/matlab/discretionary_policy_1.m b/matlab/discretionary_policy_1.m
index 16143e44ec..1ba64e39fe 100644
--- a/matlab/discretionary_policy_1.m
+++ b/matlab/discretionary_policy_1.m
@@ -1,6 +1,17 @@
 function [dr, info, M_, options_, oo_]=discretionary_policy_1(Instruments, M_, options_, oo_)
 % Higher-level function for solving discretionary optimal policy
-% Has the same interface as resol.m
+% INPUTS
+% - Instruments   [cell]          array containing instrument names
+% - M_            [structure]     Matlab's structure describing the model (M_).
+% - options_      [structure]     Matlab's structure describing the current options (options_).
+% - oo_           [structure]     Matlab's structure containing the results (oo_).
+%
+% OUTPUTS
+% - dr            [structure]     Reduced form model.
+% - info          [integer]       scalar or vector, error code.
+% - M_            [structure]     Matlab's structure describing the model (M_).
+% - options_      [structure]     Matlab's structure describing the current options (options_).
+% - oo_           [structure]     Matlab's structure containing the results (oo_).
 
 % Copyright (C) 2007-2020 Dynare Team
 %
diff --git a/matlab/selec_posterior_draws.m b/matlab/selec_posterior_draws.m
index 95407609e8..57134bdee8 100644
--- a/matlab/selec_posterior_draws.m
+++ b/matlab/selec_posterior_draws.m
@@ -115,7 +115,11 @@ if info
             pdraws(i,1) = {x2(SampleAddress(i,4),:)};
             if info-1
                 set_parameters(pdraws{i,1});
-                [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);
+                if options_.discretionary_policy
+                    [dr,info,M_,options_,oo_] = discretionary_policy_1(options_.instruments,M_,options_,oo_);
+                else
+                    [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);
+                end
                 pdraws(i,2) = { dr };
             end
             old_mhfile = mhfile;
diff --git a/tests/discretionary_policy/dennis_1_estim.mod b/tests/discretionary_policy/dennis_1_estim.mod
index fa234567ba..f869a69e66 100644
--- a/tests/discretionary_policy/dennis_1_estim.mod
+++ b/tests/discretionary_policy/dennis_1_estim.mod
@@ -35,7 +35,8 @@ estimated_params;
   kappa, normal_pdf, 0.2, 0.1;
 end;
 
-estimation(order = 1, datafile = dennis_simul, mh_replic = 2000);
+options_.plot_priors=0;
+estimation(order = 1, datafile = dennis_simul, mh_replic = 2000, mh_nblocks=1,smoother,bayesian_irf,moments_varendo) y i pi pi_c q;
 
 if max(abs(oo_.posterior.optimization.mode - [1; 0.3433])) > 0.025
   error('Posterior mode too far from true parameter values');
-- 
GitLab