Add initial condition for mh_tune_jscale.

Closes #1717.
time-shift
Stéphane Adjemian (Charybdis) 2020-02-29 11:12:44 +01:00
parent 2fcd22059b
commit 2083246a35
Signed by: stepan
GPG Key ID: 295C1FE89E17EB3C
7 changed files with 158 additions and 88 deletions

View File

@ -4642,8 +4642,8 @@ block decomposition of the model (see :opt:`block`).
Note also that for the Random Walk Metropolis Hastings Note also that for the Random Walk Metropolis Hastings
algorithm, it is possible to use option :opt:`mh_tune_jscale algorithm, it is possible to use option :opt:`mh_tune_jscale
<mh_tune_jscale [= DOUBLE]>`, to automatically tune the value <mh_tune_jscale [= DOUBLE]>`, to automatically tune the value
of ``mh_jscale``. In this case, the ``mh_jscale``-value must of ``mh_jscale``. In this case, the ``mh_jscale`` option must
not be set. not be used.
.. option:: mh_init_scale = DOUBLE .. option:: mh_init_scale = DOUBLE
@ -4680,12 +4680,15 @@ block decomposition of the model (see :opt:`block`).
stochastic nature of the algorithm (the proposals and the stochastic nature of the algorithm (the proposals and the
initial conditions of the markov chains if initial conditions of the markov chains if
``mh_nblocks>1``). This option is only available for the ``mh_nblocks>1``). This option is only available for the
Random Walk Metropolis Hastings algorithm. Random Walk Metropolis Hastings algorithm. Must not be used in conjunction with
:opt:`mh_jscale = DOUBLE`.
.. option:: mh_tune_jscale_initial_guess = DOUBLE .. option:: mh_tune_guess = DOUBLE
Specifies the initial value for the :opt:`mh_tune_jscale Specifies the initial value for the :opt:`mh_tune_jscale
<mh_tune_jscale [= DOUBLE]>`-option. Default: ``0.2``. <mh_tune_jscale [= DOUBLE]>` option. Default: ``0.2``. Must not
be set if :opt:`mh_tune_jscale <mh_tune_jscale [= DOUBLE]>` is
not used.
.. option:: mh_recover .. option:: mh_recover

@ -1 +1 @@
Subproject commit 9ff10f482aa51c23c7fe4fd5be4b66295c871179 Subproject commit 2a048a487c02ee420e20a0082abb8cb411b562bc

View File

@ -397,7 +397,9 @@ XFAIL_MODFILES = ramst_xfail.mod \
identification/LindeTrabandt/LindeTrabandt2019_xfail.mod \ identification/LindeTrabandt/LindeTrabandt2019_xfail.mod \
steady_state/Linear_steady_state_xfail.mod \ steady_state/Linear_steady_state_xfail.mod \
optimal_policy/Ramsey/ramsey_histval_xfail.mod \ optimal_policy/Ramsey/ramsey_histval_xfail.mod \
example1_extra_exo_xfail.mod example1_extra_exo_xfail.mod \
estimation/tune_mh_jscale/fs2000_1_xfail.mod \
estimation/tune_mh_jscale/fs2000_2_xfail.mod
MFILES = initval_file/ramst_initval_file_data.m MFILES = initval_file/ramst_initval_file_data.m
@ -915,7 +917,8 @@ EXTRA_DIST = \
deterministic_simulations/lola_data.mat \ deterministic_simulations/lola_data.mat \
k_order_perturbation/fs2000k++.mod \ k_order_perturbation/fs2000k++.mod \
lmmcp/sw-common-header.inc \ lmmcp/sw-common-header.inc \
lmmcp/sw-common-footer.inc lmmcp/sw-common-footer.inc \
estimation/tune_mh_jscale/fs2000.inc
if ENABLE_MATLAB if ENABLE_MATLAB

View File

@ -0,0 +1,97 @@
/*
* Copyright © 2004-2020 Dynare Team
*
* This file is part of Dynare.
*
* Dynare is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dynare is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Dynare. If not, see <http://www.gnu.org/licenses/>.
*/
var m P c e W R k d n l gy_obs gp_obs y dA;
varexo e_a e_m;
parameters alp bet gam mst rho psi del;
alp = 0.33;
bet = 0.99;
gam = 0.003;
mst = 1.011;
rho = 0.7;
psi = 0.787;
del = 0.02;
model;
dA = exp(gam+e_a);
log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m;
-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0;
W = l/n;
-(psi/(1-psi))*(c*P/(1-n))+l/n = 0;
R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W;
1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0;
c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1);
P*c = m;
m-1+d = l;
e = exp(e_a);
y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a));
gy_obs = dA*y/y(-1);
gp_obs = (P/P(-1))*m(-1)/dA;
end;
shocks;
var e_a; stderr 0.014;
var e_m; stderr 0.005;
end;
steady_state_model;
dA = exp(gam);
gst = 1/dA;
m = mst;
khst = ( (1-gst*bet*(1-del)) / (alp*gst^alp*bet) )^(1/(alp-1));
xist = ( ((khst*gst)^alp - (1-gst*(1-del))*khst)/mst )^(-1);
nust = psi*mst^2/( (1-alp)*(1-psi)*bet*gst^alp*khst^alp );
n = xist/(nust+xist);
P = xist + nust;
k = khst*n;
l = psi*mst*n/( (1-psi)*(1-n) );
c = mst/P;
d = l - mst + 1;
y = k^alp*n^(1-alp)*gst^alp;
R = mst/bet;
W = l/n;
ist = y-c;
q = 1 - d;
e = 1;
gp_obs = m/dA;
gy_obs = dA;
end;
steady;
check;
estimated_params;
alp, beta_pdf, 0.356, 0.02;
bet, beta_pdf, 0.993, 0.002;
gam, normal_pdf, 0.0085, 0.003;
mst, normal_pdf, 1.0002, 0.007;
rho, beta_pdf, 0.129, 0.100;
psi, beta_pdf, 0.65, 0.05;
del, beta_pdf, 0.01, 0.005;
stderr e_a, inv_gamma_pdf, 0.035449, inf;
stderr e_m, inv_gamma_pdf, 0.008862, inf;
end;
varobs gp_obs gy_obs;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2004-2018 Dynare Team * Copyright © 2004-2020 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -17,84 +17,7 @@
* along with Dynare. If not, see <http://www.gnu.org/licenses/>. * along with Dynare. If not, see <http://www.gnu.org/licenses/>.
*/ */
var m P c e W R k d n l gy_obs gp_obs y dA; @#include "fs2000.inc"
varexo e_a e_m;
parameters alp bet gam mst rho psi del;
alp = 0.33;
bet = 0.99;
gam = 0.003;
mst = 1.011;
rho = 0.7;
psi = 0.787;
del = 0.02;
model;
dA = exp(gam+e_a);
log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m;
-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0;
W = l/n;
-(psi/(1-psi))*(c*P/(1-n))+l/n = 0;
R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W;
1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0;
c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1);
P*c = m;
m-1+d = l;
e = exp(e_a);
y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a));
gy_obs = dA*y/y(-1);
gp_obs = (P/P(-1))*m(-1)/dA;
end;
shocks;
var e_a; stderr 0.014;
var e_m; stderr 0.005;
end;
steady_state_model;
dA = exp(gam);
gst = 1/dA;
m = mst;
khst = ( (1-gst*bet*(1-del)) / (alp*gst^alp*bet) )^(1/(alp-1));
xist = ( ((khst*gst)^alp - (1-gst*(1-del))*khst)/mst )^(-1);
nust = psi*mst^2/( (1-alp)*(1-psi)*bet*gst^alp*khst^alp );
n = xist/(nust+xist);
P = xist + nust;
k = khst*n;
l = psi*mst*n/( (1-psi)*(1-n) );
c = mst/P;
d = l - mst + 1;
y = k^alp*n^(1-alp)*gst^alp;
R = mst/bet;
W = l/n;
ist = y-c;
q = 1 - d;
e = 1;
gp_obs = m/dA;
gy_obs = dA;
end;
steady;
check;
estimated_params;
alp, beta_pdf, 0.356, 0.02;
bet, beta_pdf, 0.993, 0.002;
gam, normal_pdf, 0.0085, 0.003;
mst, normal_pdf, 1.0002, 0.007;
rho, beta_pdf, 0.129, 0.100;
psi, beta_pdf, 0.65, 0.05;
del, beta_pdf, 0.01, 0.005;
stderr e_a, inv_gamma_pdf, 0.035449, inf;
stderr e_m, inv_gamma_pdf, 0.008862, inf;
end;
varobs gp_obs gy_obs;
estimation(order=1, datafile='../fsdat_simul', nobs=192, loglinear, mh_replic=20000, mh_nblocks=2, mh_tune_jscale=0.33); estimation(order=1, datafile='../fsdat_simul', nobs=192, loglinear, mh_replic=20000, mh_nblocks=2, mh_tune_jscale=0.33);
@ -102,4 +25,4 @@ mhdata = load('fs2000/metropolis/fs2000_mh_history_0.mat');
if any(abs(mhdata.record.AcceptanceRatio-options_.mh_tune_jscale.target)>options_.mh_tune_jscale.c2) if any(abs(mhdata.record.AcceptanceRatio-options_.mh_tune_jscale.target)>options_.mh_tune_jscale.c2)
error('Automagic tuning of the MCMC proposal scale parameter did not work as expected!') error('Automagic tuning of the MCMC proposal scale parameter did not work as expected!')
end end

View File

@ -0,0 +1,22 @@
/*
* Copyright © 2020 Dynare Team
*
* This file is part of Dynare.
*
* Dynare is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dynare is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Dynare. If not, see <http://www.gnu.org/licenses/>.
*/
@#include "fs2000.inc"
estimation(order=1, datafile='../fsdat_simul', nobs=192, loglinear, mh_jscale=0.2, mh_replic=20000, mh_nblocks=2, mh_tune_jscale=0.33);

View File

@ -0,0 +1,22 @@
/*
* Copyright © 2020 Dynare Team
*
* This file is part of Dynare.
*
* Dynare is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dynare is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Dynare. If not, see <http://www.gnu.org/licenses/>.
*/
@#include "fs2000.inc"
estimation(order=1, datafile='../fsdat_simul', nobs=192, loglinear, mh_replic=20000, mh_nblocks=2, mh_tune_guess=0.33);