/* Test for estimation under discretionary optimal policy.
   Uses the data generated by dennis_1.mod */

var y i pi pi_c q;
varexo g u e;

parameters omega kappa sigma beta alpha;

alpha = 0.4;
beta = 0.99;
sigma = 1;
omega = 0.9;
kappa = 0.3;

model(linear);
y = y(+1) -(omega/sigma)*(i-pi(+1))+g;
pi =  beta*pi(+1)+kappa*y+u;
pi_c = pi+(alpha/(1-alpha))*(q-q(-1));
q = q(+1)-(1-alpha)*(i-pi(+1))+(1-alpha)*e;
end;

shocks;
  var g; stderr 1;
  var u; stderr 1;
  var e; stderr 1;
end;

planner_objective pi_c^2 + y^2;
discretionary_policy(instruments=(i),irf=0,planner_discount=beta);

varobs y i pi;

estimated_params;
  omega, normal_pdf, 0.9, 0.1;
  kappa, normal_pdf, 0.2, 0.1;
end;

options_.plot_priors=0;
estimation(order = 1, datafile = dennis_simul, mh_replic = 2000, mh_nblocks=1,smoother,bayesian_irf,moments_varendo, conditional_variance_decomposition=[1,2]) 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');
end

identification;