Merge pull request #1238 from rattoma/gsa

Bug fixes for identification with ML
time-shift
Houtan Bastani 2016-06-27 23:45:05 +02:00 committed by GitHub
commit 848d81eb84
3 changed files with 32 additions and 9 deletions

View File

@ -147,7 +147,7 @@ options_ = set_default_option(options_,'datafile','');
options_.mode_compute = 0;
options_.plot_priors = 0;
options_.smoother=1;
[dataset_,dataset_info,xparam1,hh, M_, options_, oo_, estim_params_,bayestopt_]=dynare_estimation_init(M_.endo_names,fname_,1, M_, options_, oo_, estim_params_, bayestopt_);
[dataset_,dataset_info,xparam1,hh, M_, options_, oo_, estim_params_,bayestopt_,bounds]=dynare_estimation_init(M_.endo_names,fname_,1, M_, options_, oo_, estim_params_, bayestopt_);
options_ident = set_default_option(options_ident,'analytic_derivation_mode',options_.analytic_derivation_mode); % if not set by user, inherit default global one
if prior_exist
@ -310,7 +310,7 @@ if iload <=0,
disp('Testing current parameter values')
end
[idehess_point, idemoments_point, idemodel_point, idelre_point, derivatives_info_point, info, options_ident] = ...
identification_analysis(params,indx,indexo,options_ident,dataset_, dataset_info, prior_exist, name_tex,1,parameters);
identification_analysis(params,indx,indexo,options_ident,dataset_, dataset_info, prior_exist, name_tex,1,parameters,bounds);
if info(1)~=0,
skipline()
disp('----------- ')
@ -353,7 +353,7 @@ if iload <=0,
kk=kk+1;
params = prior_draw();
[idehess_point, idemoments_point, idemodel_point, idelre_point, derivatives_info_point, info, options_ident] = ...
identification_analysis(params,indx,indexo,options_ident,dataset_,dataset_info, prior_exist, name_tex,1,'Random_prior_params');
identification_analysis(params,indx,indexo,options_ident,dataset_,dataset_info, prior_exist, name_tex,1,'Random_prior_params',bounds);
end
end
if info(1)
@ -407,7 +407,7 @@ if iload <=0,
params = prior_draw();
end
[dum1, ideJ, ideH, ideGP, dum2 , info, options_MC] = ...
identification_analysis(params,indx,indexo,options_MC,dataset_, dataset_info, prior_exist, name_tex,0);
identification_analysis(params,indx,indexo,options_MC,dataset_, dataset_info, prior_exist, name_tex,0,[],bounds);
if iteration==0 && info(1)==0,
MAX_tau = min(SampleSize,ceil(MaxNumberOfBytes/(size(ideH.siH,1)*nparam)/8));
stoH = zeros([size(ideH.siH,1),nparam,MAX_tau]);

View File

@ -1,4 +1,4 @@
function [ide_hess, ide_moments, ide_model, ide_lre, derivatives_info, info, options_ident] = identification_analysis(params,indx,indexo,options_ident,dataset_,dataset_info, prior_exist,name_tex,init,tittxt)
function [ide_hess, ide_moments, ide_model, ide_lre, derivatives_info, info, options_ident] = identification_analysis(params,indx,indexo,options_ident,dataset_,dataset_info, prior_exist,name_tex,init,tittxt,bounds)
% function [ide_hess, ide_moments, ide_model, ide_lre, derivatives_info, info] = identification_analysis(params,indx,indexo,options_ident,data_info, prior_exist,name_tex,init,analyis_type)
% given the parameter vector params, wraps all identification analyses
%
@ -122,7 +122,7 @@ if info(1)==0,
ide_strength_J=NaN(1,nparam);
ide_strength_J_prior=NaN(1,nparam);
if init, %~isempty(indok),
normaliz = abs(params);
normaliz = NaN(1,nparam);
if prior_exist,
if ~isempty(estim_params_.var_exo),
normaliz1 = estim_params_.var_exo(:,7)'; % normalize with prior standard deviation
@ -155,12 +155,12 @@ if info(1)==0,
info = stoch_simul(char(options_.varobs));
dataset_ = dseries(oo_.endo_simul(options_.varobs_id,100+1:end)',dates('1Q1'), options_.varobs);
derivatives_info.no_DLIK=1;
bounds = prior_bounds(bayestopt_, options_.prior_trunc);
%bounds = prior_bounds(bayestopt_, options_.prior_trunc);
[fval,info,cost_flag,DLIK,AHess,ys,trend_coeff,M_,options_,bayestopt_,oo_] = dsge_likelihood(params',dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_,derivatives_info);
% fval = DsgeLikelihood(xparam1,data_info,options_,M_,estim_params_,bayestopt_,oo_);
options_.analytic_derivation = analytic_derivation;
AHess=-AHess;
if min(eig(AHess))<0,
if min(eig(AHess))<-1.e-10,
error('identification_analysis: Analytic Hessian is not positive semi-definite!')
end
% chol(AHess);
@ -241,7 +241,7 @@ if info(1)==0,
end
ide_strength_J(indok) = (1./(normaliz(indok)'./abs(params(indok)')));
ide_strength_J_prior(indok) = (1./(normaliz(indok)'./normaliz1(indok)'));
ide_strength_J(params==0)=ide_strength_J_prior(params==0);
ide_strength_J(params==0)=1./normaliz(params==0)';
deltaM_prior = deltaM.*abs(normaliz1');
deltaM = deltaM.*abs(params');
deltaM(params==0)=deltaM_prior(params==0);

View File

@ -55,6 +55,29 @@ JJ1 = JJ(:,ind1);
condJ= cond(JJ1);
rankJ = rank(JJ);
rankJJ = rankJ;
icheck=0;
if npar>0 && (rankJ<npar),
% search for singular values associated to ONE individual parameter
ee0 = [rankJJ+1:length(ind1)];
ind11=ones(length(ind1),1);
for j=1:length(ee0),
if length(find(abs(ee1(:,ee0(j))) > 1.e-3))==1,
icheck=1;
ind11 = ind11.*(abs(ee1(:,ee0(j))) <= 1.e-3); % take non-zero columns
end
end
ind1 = ind1(find(ind11)); % take non-zero columns
end
if icheck,
JJ1 = JJ(:,ind1);
[eu,ee2,ee1] = svd( JJ1, 0 );
condJ= cond(JJ1);
rankJ = rank(JJ);
rankJJ = rankJ;
end
% if hess_flag==0,
% rankJJ = rank(JJ'*JJ);
% end