Bug fixes.

time-shift
Frédéric Karamé 2013-06-18 16:15:16 +02:00
parent 5db18090f0
commit 8820c63f5e
8 changed files with 48 additions and 34 deletions

View File

@ -37,7 +37,7 @@ function [LIK,lik] = conditional_particle_filter(ReducedForm,Y,start,DynareOptio
%
% NOTES
% The vector "lik" is used to evaluate the jacobian of the likelihood.
% Copyright (C) 2009-2013 Dynare Team
% Copyright (C) 2009-2010 Dynare Team
%
% This file is part of Dynare.
%
@ -116,7 +116,7 @@ for t=1:sample_size
if (strcmp(DynareOptions.particle.resampling.status,'generic') && neff(SampleWeights)<DynareOptions.particle.resampling.neff_threshold*sample_size ) || ...
strcmp(DynareOptions.particle.resampling.status,'systematic')
ks = ks + 1 ;
StateParticles = resample(StateParticles',SampleWeights,DynareOptions)';
StateParticles = resample(StateParticles',SampleWeights',DynareOptions)';
SampleWeights = ones(1,number_of_particles)/number_of_particles ;
end
end

View File

@ -19,7 +19,7 @@ function IncrementalWeights = gaussian_densities(obs,mut_t,sqr_Pss_t_t,st_t_1,sq
%
% NOTES
% The vector "lik" is used to evaluate the jacobian of the likelihood.
% Copyright (C) 2009-2012 Dynare Team
% Copyright (C) 2009-2010 Dynare Team
%
% This file is part of Dynare.
%

View File

@ -59,7 +59,6 @@ function new_particles = multivariate_smooth_resampling(particles,weights)
% stephane DOT adjemian AT univ DASH lemans DOT fr
number_of_particles = length(weights);
weights = weights' ;
number_of_states = size(particles,2);
[P,D] = eig(particles'*(bsxfun(@times,1/number_of_particles,particles))) ;
D = diag(D) ;

View File

@ -41,7 +41,6 @@ persistent Y init_flag mf0 mf1 bounds number_of_particles number_of_parameters l
persistent start_param sample_size number_of_observed_variables number_of_structural_innovations
% Set seed for randn().
%set_dynare_seed('mt19937ar',1234) ;
set_dynare_seed('default') ;
pruning = DynareOptions.particle.pruning;
second_resample = 1 ;
@ -62,11 +61,10 @@ if isempty(init_flag)
number_of_observed_variables = length(mf1);
number_of_structural_innovations = length(ReducedForm.Q);
liu_west_delta = DynareOptions.particle.liu_west_delta ;
liu_west_chol_sigma_bar = DynareOptions.particle.liu_west_chol_sigma_bar*eye(number_of_parameters) ;
%start_param = xparam1 ;
% Conditions initiales
%liu_west_chol_sigma_bar = bsxfun(@times,eye(number_of_parameters),BayesInfo.p2) ;
start_param = BayesInfo.p1 ;
%liu_west_chol_sigma_bar = DynareOptions.particle.liu_west_chol_sigma_bar*eye(number_of_parameters) ;
start_param = xparam1 ;
%liu_west_chol_sigma_bar = sqrt(bsxfun(@times,eye(number_of_parameters),BayesInfo.p2)) ;
%start_param = BayesInfo.p1 ;
bounds = [BayesInfo.lb BayesInfo.ub] ;
init_flag = 1;
end
@ -87,11 +85,12 @@ small_a = sqrt(1-h_square) ;
% Initialization of parameter particles
xparam = zeros(number_of_parameters,number_of_particles) ;
stderr = sqrt(bsxfun(@power,bounds(:,2)+bounds(:,1),2)/12)/1000 ;
stderr = sqrt(bsxfun(@power,bounds(:,2)+bounds(:,1),2)/12)/100 ;
stderr = sqrt(bsxfun(@power,bounds(:,2)+bounds(:,1),2)/12)/50 ;
i = 1 ;
while i<=number_of_particles
candidate = start_param + 10*liu_west_chol_sigma_bar*randn(number_of_parameters,1) ;
%candidate = start_param + bsxfun(@times,stderr,randn(number_of_parameters,1)) ;
%candidate = start_param + .001*liu_west_chol_sigma_bar*randn(number_of_parameters,1) ;
candidate = start_param + bsxfun(@times,stderr,randn(number_of_parameters,1)) ;
if all(candidate(:) >= bounds(:,1)) && all(candidate(:) <= bounds(:,2))
xparam(:,i) = candidate(:) ;
i = i+1 ;
@ -113,7 +112,7 @@ ub95_xparam = zeros(number_of_parameters,sample_size) ;
%% The Online filter
for t=1:sample_size
disp(t)
disp(t)
% Moments of parameters particles distribution
m_bar = xparam*(weights') ;
temp = bsxfun(@minus,xparam,m_bar) ;
@ -210,7 +209,7 @@ for t=1:sample_size
if (variance_update==1) && (neff(weights)<DynareOptions.particle.resampling.neff_threshold*sample_size)
variance_update = 0 ;
end
% final resampling (advised)
% final resampling (advised)
if second_resample==1
indx = index_resample(0,weights,DynareOptions);
StateVectors = StateVectors(:,indx) ;
@ -259,7 +258,8 @@ for t=1:sample_size
end
disp([lb95_xparam(:,t) mean_xparam(:,t) ub95_xparam(:,t)])
end
xparam = mean_xparam(:,sample_size) ;
distrib_param = xparam ;
xparam = mean_xparam(:,sample_size) ;
std_param = std_xparam(:,sample_size) ;
lb_95 = lb95_xparam(:,sample_size) ;
ub_95 = ub95_xparam(:,sample_size) ;
@ -345,8 +345,8 @@ for plt = 1:nbplt,
TeXNAMES = char(TeXNAMES,texname);
end
end
optimal_bandwidth = mh_optimal_bandwidth(xparam(kk,:)',number_of_particles,bandwidth,kernel_function);
[density(:,1),density(:,2)] = kernel_density_estimate(xparam(kk,:)',number_of_grid_points,...
optimal_bandwidth = mh_optimal_bandwidth(distrib_param(kk,:)',number_of_particles,bandwidth,kernel_function);
[density(:,1),density(:,2)] = kernel_density_estimate(distrib_param(kk,:)',number_of_grid_points,...
number_of_particles,optimal_bandwidth,kernel_function);
plot(density(:,1),density(:,2));
hold on
@ -370,3 +370,4 @@ for plt = 1:nbplt,
fprintf(fidTeX,' \n');
end
end

View File

@ -54,6 +54,7 @@ function resampled_particles = resample(particles,weights,DynareOptions)
% AUTHOR(S) frederic DOT karame AT univ DASH evry DOT fr
% stephane DOT adjemian AT univ DASH lemans DOT fr
switch DynareOptions.particle.resampling.method1
case 'residual'
if strcmpi(DynareOptions.particle.resampling.method2,'kitagawa')

View File

@ -161,7 +161,7 @@ for t=1:sample_size
StateVectors = temp(:,1:number_of_state_variables)' ;
StateVectors_ = temp(:,number_of_state_variables+1:2*number_of_state_variables)';
else
StateVectors = resample(tmp(mf0,:)',weights,DynareOptions)';
StateVectors = resample(tmp(mf0,:)',weights',DynareOptions)';
end
weights = ones(1,number_of_particles)/number_of_particles;
elseif strcmp(DynareOptions.particle.resampling.status,'none')

View File

@ -168,8 +168,7 @@ end
offset = EstimatedParameters.nvx;
if EstimatedParameters.nvn
for i=1:EstimatedParameters.nvn
k = EstimatedParameters.var_endo(i,1);
H(k,k) = xparam1(i+offset)*xparam1(i+offset);
H(i,i) = xparam1(i+offset)*xparam1(i+offset);
end
offset = offset+EstimatedParameters.nvn;
else

View File

@ -35,12 +35,12 @@ steady;
//disp(oo_.mean) ;
estimated_params;
alp, uniform_pdf,,, 0.0001, 1;
bet, uniform_pdf,,, 0.75, 0.999;
alp, uniform_pdf,,, 0.0001, 0.5;
bet, uniform_pdf,,, 0.0001, 0.99;
tet, uniform_pdf,,, 0.0001, 1;
tau, uniform_pdf,,, 0.0001, 100;
delt, uniform_pdf,,, 0.0001, 0.05;
rho, uniform_pdf,,, 0.0001, 0.999;
rho, uniform_pdf,,, 0.8, 0.99;
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;
@ -49,11 +49,11 @@ end;
estimated_params_init;
alp, 0.4;
bet, 0.99;
bet, 0.97;
tet, 0.357 ;
tau, 50;
delt, 0.02;
rho, 0.95;
rho, 0.9 ;
stderr e_a, .035;
stderr y, .0175;//.00158;
stderr l, .00312;//.0011;
@ -66,28 +66,42 @@ varobs y l i ;
//options_.gstep(2) = .1;
options_.particle.status = 1;
options_.particle.algorithm = 'sequential_importance_particle_filter';
options_.particle.initialization = 1;
options_.particle.pruning = 1;
options_.particle.number_of_particles = 2000;
options_.particle.pruning = 0;
options_.particle.number_of_particles = 1000 ;
options_.particle.resampling.status = 'systematic';
options_.particle.resampling.neff_threshold = .1;
//options_.particle.resampling.method1 = 'traditional' ;
//options_.particle.resampling.method1 = 'residual' ;
options_.particle.resampling.method1 = 'smooth' ;
options_.particle.reampling.method2 = 'kitagawa' ;
//options_.particle.resampling.method2 = 'stratified' ;
options_.particle.resampling.number_of_partitions = 1;
options_.particle.resampling.neff_threshold = .5;
set_dynare_threads('local_state_space_iteration_2',3);
options_.particle.algorithm = 'sequential_importance_particle_filter';
//options_.particle.algorithm = 'auxiliary_particle_filter';
//options_.particle.algorithm = 'gaussian_mixture_filter';
//options_.particle.algorithm = 'each_gaussian_filter';
//options_.particle.algorithm = 'conditional_particle_filter';
//options_.particle.algorithm = 'gaussian_filter';
//options_.particle.IS_approximation_method = 'quadrature' ;
//options_.particle.IS_approximation_method = 'cubature' ;
options_.particle.IS_approximation_method = 'cubature' ;
//options_.particle.IS_approximation_method = 'unscented' ;
//options_.particle.approximation_method = 'quadrature' ;
//options_.particle.approximation_method = 'cubature' ;
options_.particle.approximation_method = 'cubature' ;
//options_.particle.approximation_method = 'unscented' ;
//options_.particle.approximation_method = 'MonteCarlo' ;
estimation(datafile=data_risky_perturb2,nograph,order=2,nobs=100,mh_replic=0,mode_compute=7,mode_check);
//options_.mh_posterior_mode_estimation=1 ;
// online
options_.particle.liu_west_delta = 0.9 ;
options_.mode_check_node_number = 250 ;
estimation(datafile=data_risky_perturb3,nograph,order=2,nobs=100,mh_replic=0,mode_compute=7,mode_check);