Fixed shocks decomposition bug.

(cherry picked from commit 68e7a310eda20f8f7611521ac45608a6941b31cc)
time-shift
Stéphane Adjemian (Charybdis) 2012-06-18 14:41:59 +02:00
parent 608c82fd26
commit a18b071770
1 changed files with 19 additions and 41 deletions

View File

@ -43,8 +43,7 @@ function oo = evaluate_smoother(parameters)
global options_ M_ bayestopt_ oo_
persistent load_data
persistent gend data data_index number_of_observations no_more_missing_observations
persistent dataset_
if nargin==0
parameters = 'posterior_mode';
@ -79,43 +78,22 @@ if ischar(parameters)
end
end
if isempty(load_data)
% Get the data.
n_varobs = size(options_.varobs,1);
rawdata = read_variables(options_.datafile,options_.varobs,[],options_.xls_sheet,options_.xls_range);
options_ = set_default_option(options_,'nobs',size(rawdata,1)-options_.first_obs+1);
gend = options_.nobs;
rawdata = rawdata(options_.first_obs:options_.first_obs+gend-1,:);
% Transform the data.
if options_.loglinear
if ~options_.logdata
rawdata = log(rawdata);
end
if isempty(dataset_)
% Load and transform data.
transformation = [];
if options_.loglinear && ~options_.logdata
transformation = @log;
end
% Test if the data set is real.
if ~isreal(rawdata)
error('There are complex values in the data! Probably a wrong transformation')
xls.sheet = options_.xls_sheet;
xls.range = options_.xls_range;
if ~isfield(options_,'nobs')
options_.nobs = [];
end
% Detrend the data.
options_.missing_data = any(any(isnan(rawdata)));
if options_.prefilter == 1
if options_.missing_data
bayestopt_.mean_varobs = zeros(n_varobs,1);
for variable=1:n_varobs
rdx = find(~isnan(rawdata(:,variable)));
m = mean(rawdata(rdx,variable));
rawdata(rdx,variable) = rawdata(rdx,variable)-m;
bayestopt_.mean_varobs(variable) = m;
end
else
bayestopt_.mean_varobs = mean(rawdata,1)';
rawdata = rawdata-repmat(bayestopt_.mean_varobs',gend,1);
end
end
data = transpose(rawdata);
% Handle the missing observations.
[data_index,number_of_observations,no_more_missing_observations] = describe_missing_data(data,gend,n_varobs);
missing_value = ~(number_of_observations == gend*n_varobs);
dataset_ = initialize_dataset(options_.datafile,options_.varobs,options_.first_obs,options_.nobs,transformation,options_.prefilter,xls);
options_.nobs = dataset_.info.ntobs;
% Determine if a constant is needed.
if options_.steadystate_flag% if the *_steadystate.m file is provided.
[ys,tchek] = feval([M_.fname '_steadystate'],...
@ -143,15 +121,15 @@ if isempty(load_data)
else
options_.noconstant = 0;
end
load_data = 1;
end
pshape_original = bayestopt_.pshape;
bayestopt_.pshape = Inf(size(bayestopt_.pshape));
clear('priordens')%
clear('priordens')
[atT,innov,measurement_error,updated_variables,ys,trend_coeff,aK,T,R,P,PK,decomp] = ...
DsgeSmoother(parameters,dataset_.info.ntobs,dataset_.data,dataset_.missing.aindex,dataset_.missing.state);
[atT,innov,measurement_error,updated_variables,ys,trend_coeff,aK,T,R,P,PK,decomp] ...
= DsgeSmoother(parameters,gend,data,data_index,missing_value);
oo.Smoother.SteadyState = ys;
oo.Smoother.TrendCoeffs = trend_coeff;
if options_.filter_covariance