✔️ Add unit tests for correct identification analysis
parent
b0fddeeef3
commit
42503e102e
|
@ -65,8 +65,42 @@ steady; % compute steady state given the starting values
|
||||||
resid; % check the starting values for the steady state
|
resid; % check the starting values for the steady state
|
||||||
check; % check Blanchard & Khan rank condition
|
check; % check Blanchard & Khan rank condition
|
||||||
|
|
||||||
|
@#define CORRFLAG = 1
|
||||||
|
|
||||||
@#ifdef kronflag
|
@#ifdef kronflag
|
||||||
identification(ar=3, useautocorr=1, nodisplay, nograph, parameter_set=calibration, analytic_derivation_mode=@{kronflag});
|
identification(ar=3, useautocorr=@{CORRFLAG}, nodisplay, nograph, parameter_set=calibration, analytic_derivation_mode=@{kronflag},tol_rank=1e-8);
|
||||||
@#else
|
@#else
|
||||||
identification(ar=3, useautocorr=1, nodisplay, nograph, parameter_set=calibration, analytic_derivation_mode=0);
|
identification(ar=3, useautocorr=@{CORRFLAG}, nodisplay, nograph, parameter_set=calibration, analytic_derivation_mode=0, tol_rank=1e-8);
|
||||||
@#endif
|
@#endif
|
||||||
|
|
||||||
|
% Unit test for correct identification results
|
||||||
|
load('BrockMirman/identification/BrockMirman_Current_params_identif.mat','ide_moments_point', 'ide_spectrum_point', 'ide_minimal_point', 'ide_reducedform_point')
|
||||||
|
pause(1);
|
||||||
|
chk.ind0 = [1 1 1 1 1];
|
||||||
|
chk.indno = [1 0 0 0 1];
|
||||||
|
chk.jweak = [1 0 0 0 1];
|
||||||
|
chk.jweak_pair = [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0];
|
||||||
|
for strVars = {'ind0' 'indno' 'jweak' 'jweak_pair'}
|
||||||
|
if ~isequal(ide_moments_point.(strVars{:}) , chk.(strVars{:}))
|
||||||
|
disp('dMoments:')
|
||||||
|
disp(ide_moments_point.dMOMENTS);
|
||||||
|
disp(strVars{:})
|
||||||
|
disp(ide_moments_point.(strVars{:}));
|
||||||
|
error('identification based on moments is wrong for %s',strVars{:})
|
||||||
|
end
|
||||||
|
if ~isequal(ide_spectrum_point.(strVars{:}) , chk.(strVars{:}))
|
||||||
|
disp('dSPECTRUM');
|
||||||
|
disp(ide_spectrum_point.dSPECTRUM);
|
||||||
|
disp(strVars{:})
|
||||||
|
disp(ide_spectrum_point.(strVars{:}));
|
||||||
|
error('identification based on spectrum is wrong for %s',strVars{:})
|
||||||
|
end
|
||||||
|
if ~isequal(ide_minimal_point.(strVars{:}) , chk.(strVars{:}))
|
||||||
|
disp('dMINIMAL')
|
||||||
|
disp(ide_minimal_point.dMINIMAL);
|
||||||
|
disp(strVars{:})
|
||||||
|
disp(ide_minimal_point.(strVars{:}));
|
||||||
|
error('identification based on minimal system is wrong for %s',strVars{:})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ end;
|
||||||
|
|
||||||
varobs c i;
|
varobs c i;
|
||||||
|
|
||||||
identification(advanced=1,max_dim_cova_group=3);
|
identification(advanced=1,max_dim_cova_group=3,tol_rank=1e-8);
|
||||||
//varobs c i lam; //to check if observing lam identifies phi and theta
|
//varobs c i lam; //to check if observing lam identifies phi and theta
|
||||||
//identification(ar=1,advanced=1,max_dim_cova_group=3,prior_mc=250);
|
//identification(ar=1,advanced=1,max_dim_cova_group=3,prior_mc=250);
|
||||||
//identification(prior_mc=100);
|
//identification(prior_mc=100);
|
||||||
|
@ -92,6 +92,37 @@ if store_options_ident.analytic_derivation~=1 && store_options_ident.analytic_de
|
||||||
error('the steady state file changed parameters and we should switch to numerical derivatives for the steady state, i.e. analytic_derivation_mode=-2')
|
error('the steady state file changed parameters and we should switch to numerical derivatives for the steady state, i.e. analytic_derivation_mode=-2')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
% Unit test for correct identification results
|
||||||
|
load('kim2/identification/kim2_prior_mean_identif.mat','ide_moments_point', 'ide_spectrum_point', 'ide_minimal_point', 'ide_reducedform_point')
|
||||||
|
pause(1);
|
||||||
|
chk.ind0 = [1 1 1 0];
|
||||||
|
chk.indno = [0 0 0 1; 0 1 1 0];
|
||||||
|
chk.jweak = [0 1 1 0];
|
||||||
|
chk.jweak_pair = [0 0 0 0 1 0 0 0 0 0];
|
||||||
|
for strVars = {'ind0' 'indno' 'jweak' 'jweak_pair'}
|
||||||
|
if ~isequal(ide_moments_point.(strVars{:}) , chk.(strVars{:}))
|
||||||
|
disp('dMoments:')
|
||||||
|
disp(ide_moments_point.dMOMENTS);
|
||||||
|
disp(strVars{:})
|
||||||
|
disp(ide_moments_point.(strVars{:}));
|
||||||
|
error('identification based on moments is wrong for %s',strVars{:})
|
||||||
|
end
|
||||||
|
if ~isequal(ide_spectrum_point.(strVars{:}) , chk.(strVars{:}))
|
||||||
|
disp('dSPECTRUM');
|
||||||
|
disp(ide_spectrum_point.dSPECTRUM);
|
||||||
|
disp(strVars{:})
|
||||||
|
disp(ide_spectrum_point.(strVars{:}));
|
||||||
|
error('identification based on spectrum is wrong for %s',strVars{:})
|
||||||
|
end
|
||||||
|
if ~isequal(ide_minimal_point.(strVars{:}) , chk.(strVars{:}))
|
||||||
|
disp('dMINIMAL')
|
||||||
|
disp(ide_minimal_point.dMINIMAL);
|
||||||
|
disp(strVars{:})
|
||||||
|
disp(ide_minimal_point.(strVars{:}));
|
||||||
|
error('identification based on minimal system is wrong for %s',strVars{:})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
% Integration test if identification works without priors
|
% Integration test if identification works without priors
|
||||||
estim_params_=[];
|
estim_params_=[];
|
||||||
identification(advanced=1,max_dim_cova_group=3);
|
identification(advanced=1,max_dim_cova_group=3);
|
||||||
|
|
Loading…
Reference in New Issue