diff --git a/doc/manual/source/the-model-file.rst b/doc/manual/source/the-model-file.rst index a04b8fbcb..56d2cebd5 100644 --- a/doc/manual/source/the-model-file.rst +++ b/doc/manual/source/the-model-file.rst @@ -4642,8 +4642,8 @@ block decomposition of the model (see :opt:`block`). Note also that for the Random Walk Metropolis Hastings algorithm, it is possible to use option :opt:`mh_tune_jscale `, to automatically tune the value - of ``mh_jscale``. In this case, the ``mh_jscale``-value must - not be set. + of ``mh_jscale``. In this case, the ``mh_jscale`` option must + not be used. .. 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 initial conditions of the markov chains if ``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 - `-option. Default: ``0.2``. + ` option. Default: ``0.2``. Must not + be set if :opt:`mh_tune_jscale ` is + not used. .. option:: mh_recover diff --git a/preprocessor b/preprocessor index 9ff10f482..2a048a487 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit 9ff10f482aa51c23c7fe4fd5be4b66295c871179 +Subproject commit 2a048a487c02ee420e20a0082abb8cb411b562bc diff --git a/tests/Makefile.am b/tests/Makefile.am index a1fe16771..9a049f78f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -397,7 +397,9 @@ XFAIL_MODFILES = ramst_xfail.mod \ identification/LindeTrabandt/LindeTrabandt2019_xfail.mod \ steady_state/Linear_steady_state_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 @@ -915,7 +917,8 @@ EXTRA_DIST = \ deterministic_simulations/lola_data.mat \ k_order_perturbation/fs2000k++.mod \ lmmcp/sw-common-header.inc \ - lmmcp/sw-common-footer.inc + lmmcp/sw-common-footer.inc \ + estimation/tune_mh_jscale/fs2000.inc if ENABLE_MATLAB diff --git a/tests/estimation/tune_mh_jscale/fs2000.inc b/tests/estimation/tune_mh_jscale/fs2000.inc new file mode 100644 index 000000000..976c2c584 --- /dev/null +++ b/tests/estimation/tune_mh_jscale/fs2000.inc @@ -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 . + */ + +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; \ No newline at end of file diff --git a/tests/estimation/tune_mh_jscale/fs2000.mod b/tests/estimation/tune_mh_jscale/fs2000.mod index 7986745c2..402ca68a5 100644 --- a/tests/estimation/tune_mh_jscale/fs2000.mod +++ b/tests/estimation/tune_mh_jscale/fs2000.mod @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2018 Dynare Team + * Copyright © 2004-2020 Dynare Team * * This file is part of Dynare. * @@ -17,84 +17,7 @@ * along with Dynare. If not, see . */ -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; +@#include "fs2000.inc" 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) error('Automagic tuning of the MCMC proposal scale parameter did not work as expected!') -end \ No newline at end of file +end diff --git a/tests/estimation/tune_mh_jscale/fs2000_1_xfail.mod b/tests/estimation/tune_mh_jscale/fs2000_1_xfail.mod new file mode 100644 index 000000000..d8ee3d16f --- /dev/null +++ b/tests/estimation/tune_mh_jscale/fs2000_1_xfail.mod @@ -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 . + */ + +@#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); diff --git a/tests/estimation/tune_mh_jscale/fs2000_2_xfail.mod b/tests/estimation/tune_mh_jscale/fs2000_2_xfail.mod new file mode 100644 index 000000000..dfb311b0a --- /dev/null +++ b/tests/estimation/tune_mh_jscale/fs2000_2_xfail.mod @@ -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 . + */ + +@#include "fs2000.inc" + +estimation(order=1, datafile='../fsdat_simul', nobs=192, loglinear, mh_replic=20000, mh_nblocks=2, mh_tune_guess=0.33);