1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
// test slice sampler with conditional likelihood initial state estimation of OccBin
var q r rlag rnot u;
varexo epsu
epsr
;
parameters betap phip rhop rhor rhou rlb shock_scale_zlb sigmap;
betap = 0.99;
phip = 0.2;
qinit = 0;
rinit = 0;
rhop = 0.5;
rhor = 0.8;
rhou = 0;
rlb = -(1/betap-1);
shock_scale_zlb =1;
sigmap = 5;
model;
[name = 'Asset price']
q = betap*(1-rhop)*q(1)+rhop*q(-1)-sigmap*r+u;
[name = 'Shock process u']
u = rhou*u(-1)+epsu;
[name = 'Notional rate']
rnot = (1-rhor)*phip*q+rhor*rlag(-1);
[name = 'Observed interest rate',relax='zlb']
r = rnot + epsr;
[name = 'Observed interest rate',bind='zlb']
r = rlb + shock_scale_zlb*epsr;
[name = 'Lag term TR',bind='zlb']
rlag = rnot;
[name = 'Lag term TR',relax='zlb']
rlag = r;
end;
steady;
shocks;
var epsr;
stderr 0.001;
var epsu;
stderr 0.15;
end;
occbin_constraints;
name 'zlb'; bind rnot<=rlb;
end;
// ------------------------------------------------------------------------
//.......................... COMPUTATIONS .................................
// ------------------------------------------------------------------------
// Prepare data and observations
// ----------------------------
varobs q r;
// Priors
// -----------------------------
estimated_params;
phip, 0.2, 0.01, 2, NORMAL_PDF, 0.2, 0.05;
rhop, 0.5, 0.01000, 0.9999, BETA_PDF, 0.5, 0.2;
rhor, 0.8, 0.01000, 0.9999, BETA_PDF, 0.8, 0.1;
stderr epsu, GAMMA_PDF, 0.15, 0.015, 0, inf;
stderr epsr, GAMMA_PDF, 0.001, 0.0003, 0, inf;
end;
//occbin options
options_.occbin.likelihood.max_number_of_iterations = 30;
options_.occbin.simul.periodic_solution=true;
options_.occbin.smoother.periodic_solution=true;
options_.occbin.likelihood.periodic_solution=true;
// end occbin options
steady;
check;
// Estimation
// -----------------------------
if ~isoctave % test takes too much time under Octave,
estimation(estimate_initial_states_endogenous_prior,
datafile='datafile',
order=1,
use_univariate_filters_if_singularity_is_detected=0,
mh_replic=20,
mode_compute=0,
posterior_sampling_method='slice',
posterior_sampler_options = ('save_iter_info_file', 0,
'draw_init_state_from_smoother',1,
'draw_init_state_with_rotated_slice',0,
'fast_likelihood_evaluation_for_rejection',1),
mh_nblocks=1,
mh_drop=0.5,
sub_draws = 10,
//bayesian_irf,
filter_covariance, smoothed_state_uncertainty,
filtered_vars, smoother,consider_all_endogenous);
end
|