From 7f497fb1ef28428f573450d3504fc2be16634434 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer <jpfeifer@gmx.de> Date: Fri, 7 Feb 2025 08:29:09 +0100 Subject: [PATCH] testsuite: split particle unit test in separate files --- meson.build | 7 ++- tests/particle/dsge_base.inc | 56 +++++++++++++++++++ tests/particle/dsge_base2.mod | 71 ++----------------------- tests/particle/dsge_base_HSSMC_DSMH.mod | 35 ++++++++++++ tests/particle/dsge_base_Liu_West.mod | 32 +++++++++++ 5 files changed, 131 insertions(+), 70 deletions(-) create mode 100644 tests/particle/dsge_base.inc create mode 100644 tests/particle/dsge_base_HSSMC_DSMH.mod create mode 100644 tests/particle/dsge_base_Liu_West.mod diff --git a/meson.build b/meson.build index 126982f044..96b3a6dfb1 100644 --- a/meson.build +++ b/meson.build @@ -1768,11 +1768,14 @@ mod_and_m_tests = [ { 'test' : [ 'ecb/pooled_fgls/test_param_names.mod' ] }, # Particle files - { 'test' : [ 'particle/dsge_base2.mod' ], + { 'test' : [ 'particle/dsge_base2.mod', + 'particle/dsge_base_Liu_West.mod', + 'particle/dsge_base_HSSMC_DSMH.mod',], 'extra' : [ 'particle/risky.m', 'particle/extreme.m', 'particle/benchmark.m', - 'particle/mysample.m'] }, + 'particle/mysample.m', + 'particle/dsge_base.inc'] }, { 'test' : [ 'particle/first_spec.mod', 'particle/first_spec_hssmc.mod', 'particle/local_state_space_iteration_k_test.mod', diff --git a/tests/particle/dsge_base.inc b/tests/particle/dsge_base.inc new file mode 100644 index 0000000000..1c9e0ce120 --- /dev/null +++ b/tests/particle/dsge_base.inc @@ -0,0 +1,56 @@ +var k A c l i y; +varexo e_a; + +parameters alp bet tet tau delt rho ; +alp = 0.4; +bet = 0.99; +tet = 0.357 ; +tau = 50 ; +delt = 0.02; +rho = 0.95; + +model; + c = ((1 - alp)*tet/(1-tet))*A*(1-l)*((k(-1)/l)^alp) ; + y = A*(k(-1)^alp)*(l^(1-alp)) ; + i = y-c ; + k = (1-delt)*k(-1) + i ; + log(A) = rho*log(A(-1)) + e_a ; + (((c^(tet))*((1-l)^(1-tet)))^(1-tau))/c - bet*((((c(+1)^(tet))*((1-l(+1))^(1-tet)))^(1-tau))/c(+1))*(1 -delt+alp*(A(1)*(k^alp)*(l(1)^(1-alp)))/k)=0 ; +end; + +steady_state_model; + k = -(alp-1)*(alp^(1/(1-alp)))*(bet^(1/(1-alp)))*((bet*(delt-1)+1)^(alp/(alp-1)))*tet/(-alp*delt*bet+delt*bet+alp*tet*bet-bet-alp*tet+1); + l = (alp-1)*(bet*(delt-1)+1)*tet/(alp*tet+bet*((alp-1)*delt-alp*tet+1)-1) ; + y = (k^alp)*(l^(1-alp)) ; + i = delt*k ; + c = y - i ; + A = 1; +end; + +shocks; + var e_a; stderr 0.035; +end; + +steady; + +estimated_params; + alp, uniform_pdf,,, 0.0001, 0.99; + bet, uniform_pdf,,, 0.0001, 0.99999; + tet, uniform_pdf,,, 0.0001, .999; + tau, uniform_pdf,,, 0.0001, 100; + delt, uniform_pdf,,, 0.0001, 0.05; + rho, uniform_pdf,,, 0.0001, 0.9999; + stderr e_a, uniform_pdf,,, 0.00001, 0.1; + stderr y, uniform_pdf,,, 0.00001, 0.1; + stderr l, uniform_pdf,,, 0.00001, 0.1; + stderr i, uniform_pdf,,, 0.00001, 0.1; +end; + +varobs y l i ; + +%data(file='./risky.m'); +%stoch_simul(order=5,periods=1000); +%datatomfile('mysample') +%return; + +data(file='./mysample.m',first_obs=801Y,nobs=50); %no measurement errors added in the simulated data diff --git a/tests/particle/dsge_base2.mod b/tests/particle/dsge_base2.mod index 2b3873ec5a..c5e5f3b59f 100644 --- a/tests/particle/dsge_base2.mod +++ b/tests/particle/dsge_base2.mod @@ -8,7 +8,7 @@ @#endif @#ifndef ALGO_SIR - @#define ALGO_SIR = 0 + @#define ALGO_SIR = 1 @#endif @#ifndef ALGO_APF @@ -36,58 +36,13 @@ @#endif @#ifndef DSMH - @#define DSMH = 1 + @#define DSMH = 0 @#endif %% -var k A c l i y; -varexo e_a; - -parameters alp bet tet tau delt rho ; -alp = 0.4; -bet = 0.99; -tet = 0.357 ; -tau = 50 ; -delt = 0.02; -rho = 0.95; - -model; - c = ((1 - alp)*tet/(1-tet))*A*(1-l)*((k(-1)/l)^alp) ; - y = A*(k(-1)^alp)*(l^(1-alp)) ; - i = y-c ; - k = (1-delt)*k(-1) + i ; - log(A) = rho*log(A(-1)) + e_a ; - (((c^(tet))*((1-l)^(1-tet)))^(1-tau))/c - bet*((((c(+1)^(tet))*((1-l(+1))^(1-tet)))^(1-tau))/c(+1))*(1 -delt+alp*(A(1)*(k^alp)*(l(1)^(1-alp)))/k)=0 ; -end; - -steady_state_model; - k = -(alp-1)*(alp^(1/(1-alp)))*(bet^(1/(1-alp)))*((bet*(delt-1)+1)^(alp/(alp-1)))*tet/(-alp*delt*bet+delt*bet+alp*tet*bet-bet-alp*tet+1); - l = (alp-1)*(bet*(delt-1)+1)*tet/(alp*tet+bet*((alp-1)*delt-alp*tet+1)-1) ; - y = (k^alp)*(l^(1-alp)) ; - i = delt*k ; - c = y - i ; - A = 1; -end; +@#include "dsge_base.inc" -shocks; - var e_a; stderr 0.035; -end; - -steady; - -estimated_params; - alp, uniform_pdf,,, 0.0001, 0.99; - bet, uniform_pdf,,, 0.0001, 0.99999; - tet, uniform_pdf,,, 0.0001, .999; - tau, uniform_pdf,,, 0.0001, 100; - delt, uniform_pdf,,, 0.0001, 0.05; - rho, uniform_pdf,,, 0.0001, 0.9999; - stderr e_a, uniform_pdf,,, 0.00001, 0.1; - stderr y, uniform_pdf,,, 0.00001, 0.1; - stderr l, uniform_pdf,,, 0.00001, 0.1; - stderr i, uniform_pdf,,, 0.00001, 0.1; -end; estimated_params_init; alp, 0.4; @@ -102,14 +57,6 @@ estimated_params_init; stderr i, .001; end; -varobs y l i ; - -%data(file='./risky.m'); -%stoch_simul(order=5,periods=1000); -%datatomfile('mysample') -%return; - -data(file='./mysample.m',first_obs=801Y,nobs=50); %no measurement errors added in the simulated data @#if LINEAR_KALMAN estimation(nograph,order=1,mode_compute=8,silent_optimizer,mh_replic=0,additional_optimizer_steps=[8 4],mode_check); @@ -192,15 +139,3 @@ estimation(order=3,nograph,filter_algorithm=gf,proposal_approximation=montecarlo end; estimation(order=3,filter_algorithm=nlkf,number_of_particles=10000,proposal_approximation=montecarlo,resampling=none,silent_optimizer,mode_compute=0,cova_compute=0,MCMC_jumping_covariance=prior_variance,mh_init_scale_factor=0.01); @#endif - -@#if HSSMC - estimation(order=1,posterior_sampling_method='hssmc',posterior_sampler_options=('particles',1000)); -% estimation(order=2,posterior_sampling_method='hssmc',posterior_sampler_options=('particles',1000)); -% estimation(order=3,posterior_sampling_method='hssmc',filter_algorithm=nlkf,proposal_approximation=montecarlo,number_of_particles=500,posterior_sampler_options=('particles',500)); -@#endif - -@#if DSMH - estimation(order=1,posterior_sampling_method='dsmh',posterior_sampler_options=('particles',200)); -% estimation(order=2,posterior_sampling_method='dsmh',posterior_sampler_options=('particles',1000)); -% estimation(order=3,posterior_sampling_method='dsmh',filter_algorithm=nlkf,proposal_approximation=montecarlo,number_of_particles=500,posterior_sampler_options=('particles',500)); -@#endif diff --git a/tests/particle/dsge_base_HSSMC_DSMH.mod b/tests/particle/dsge_base_HSSMC_DSMH.mod new file mode 100644 index 0000000000..4767fa95ad --- /dev/null +++ b/tests/particle/dsge_base_HSSMC_DSMH.mod @@ -0,0 +1,35 @@ +@#ifndef HSSMC + @#define HSSMC = 1 +@#endif + +@#ifndef DSMH + @#define DSMH = 1 +@#endif + +@#include "dsge_base.inc" + + +estimated_params_init; + alp, 0.4; + bet, 0.99; + tet, 0.357; + tau, 50; + delt, 0.02; + rho, 0.95; + stderr e_a, .035; + stderr y, .001; + stderr l, .001; + stderr i, .001; +end; + +@#if HSSMC + estimation(order=1,posterior_sampling_method='hssmc',posterior_sampler_options=('particles',1000)); +% estimation(order=2,posterior_sampling_method='hssmc',posterior_sampler_options=('particles',1000)); +% estimation(order=3,posterior_sampling_method='hssmc',filter_algorithm=nlkf,proposal_approximation=montecarlo,number_of_particles=500,posterior_sampler_options=('particles',500)); +@#endif + +@#if DSMH + estimation(order=1,posterior_sampling_method='dsmh',posterior_sampler_options=('particles',200)); +% estimation(order=2,posterior_sampling_method='dsmh',posterior_sampler_options=('particles',1000)); +% estimation(order=3,posterior_sampling_method='dsmh',filter_algorithm=nlkf,proposal_approximation=montecarlo,number_of_particles=500,posterior_sampler_options=('particles',500)); +@#endif \ No newline at end of file diff --git a/tests/particle/dsge_base_Liu_West.mod b/tests/particle/dsge_base_Liu_West.mod new file mode 100644 index 0000000000..4550928117 --- /dev/null +++ b/tests/particle/dsge_base_Liu_West.mod @@ -0,0 +1,32 @@ +@#ifndef ALGO_ONLINE + @#define ALGO_ONLINE = 1 +@#endif + +@#include "dsge_base.inc" + +estimated_params_init; + alp, 0.4; + bet, 0.99; + tet, 0.357; + tau, 50; + delt, 0.02; + rho, 0.95; + stderr e_a, .035; + stderr y, .001; + stderr l, .001; + stderr i, .001; +end; +options_.TeX=true; + +@#if ALGO_ONLINE + // estimation(order=1,posterior_sampling_method='online',posterior_sampler_options=('particles',100)); + // estimation(order=2,posterior_sampling_method='online',posterior_sampler_options=('particles',100)); + estimation(order=3,posterior_sampling_method='online',filter_algorithm=nlkf,proposal_approximation=montecarlo,posterior_sampler_options=('particles',100)); +@#endif + +collect_latex_files; +[status, cmdout]=system(['pdflatex -halt-on-error -interaction=nonstopmode ' M_.fname '_TeX_binder.tex']); +if status + cmdout + error('TeX-File did not compile.') +end -- GitLab