diff --git a/matlab/discretionary_policy/discretionary_policy_1.m b/matlab/discretionary_policy/discretionary_policy_1.m index d75dd9718db3a9f05357b0a53a429e7f2c128525..ec1be205bf75a5b8a52c3afa9e2e7906369bb37e 100644 --- a/matlab/discretionary_policy/discretionary_policy_1.m +++ b/matlab/discretionary_policy/discretionary_policy_1.m @@ -113,5 +113,7 @@ T=H(dr.order_var,dr.order_var); dr.ghu=G(dr.order_var,:); if M_.maximum_endo_lag Selection=M_.lead_lag_incidence(1,dr.order_var)>0;%select state variables +else + Selection=[]; end dr.ghx=T(:,Selection); diff --git a/matlab/optimal_policy/evaluate_planner_objective.m b/matlab/optimal_policy/evaluate_planner_objective.m index cce61b1486ad67d1b77b5ce1f870cff4f6346b37..23d43b282f33c824263b521b6d2563b3fb532fef 100644 --- a/matlab/optimal_policy/evaluate_planner_objective.m +++ b/matlab/optimal_policy/evaluate_planner_objective.m @@ -265,12 +265,14 @@ else oo_.var(isnan(oo_.var)) = options_.huge_number; Ey = oo_.mean; - Eyhat = Ey - ys(dr.order_var(nstatic+(1:nspred))); - Eyhatyhat = oo_.var(:); Euu = M_.Sigma_e(:); - - EU = U + Uy*gy*Eyhat + 0.5*(Uyygygy*Eyhatyhat + Uyygugu*Euu); + EU = U + 0.5*Uyygugu*Euu; + if M_.maximum_endo_lag + Eyhat = Ey - ys(dr.order_var(nstatic+(1:nspred))); + Eyhatyhat = oo_.var(:); + EU=EU + Uy*gy*Eyhat + 0.5*Uyygygy*Eyhatyhat; + end EW = EU/(1-beta); planner_objective_value.unconditional = EW; diff --git a/meson.build b/meson.build index be322ea4804b91aa15c4fd8309f6a61a52493f0a..0afbf1b3b045cb6dc14ee199c06f61238ef2e250 100644 --- a/meson.build +++ b/meson.build @@ -1069,6 +1069,7 @@ mod_and_m_tests = [ 'discretionary_policy/dennis_1_estim.mod', 'discretionary_policy/dennis_1_estim_MoM.mod' ] }, { 'test' : [ 'discretionary_policy/Gali_discretion.mod' ] }, + { 'test' : [ 'discretionary_policy/NK_discretion_forward.mod' ] }, { 'test' : [ 'discretionary_policy/Gali_2015_chapter_3.mod', 'discretionary_policy/Gali_2015_chapter_3_nonlinear.mod' ] }, { 'test' : [ 'histval_initval_file/ramst_data_generate.mod', diff --git a/tests/discretionary_policy/NK_discretion_forward.mod b/tests/discretionary_policy/NK_discretion_forward.mod new file mode 100644 index 0000000000000000000000000000000000000000..c5d36dec48a324a451ea2bf00720d3b2df11b6c3 --- /dev/null +++ b/tests/discretionary_policy/NK_discretion_forward.mod @@ -0,0 +1,27 @@ +var pi x R; + +varexo epsilon; + +parameters beta kappa lambdax lambdaR sigma; + +sigma = 1; +beta = 0.99; +kappa = 0.102; +lambdax = 0.1; + +model(linear); +pi = beta*pi(+1)+kappa*x+epsilon; +x = x(+1)-(1/sigma)*(R-pi(+1)); +end; + +shocks; +var epsilon; stderr 0.01; +end; + +planner_objective (pi^2 +lambdax*x^2); + +discretionary_policy(instruments=(R),irf=20,planner_discount= beta); + + + +