Added routines from dynare-breaks branch.
parent
4444a850b3
commit
f0addc9e39
|
@ -0,0 +1,74 @@
|
|||
function dataset_ = compute_acov(dataset_)
|
||||
% Computes the (multivariate) auto-covariance function of the sample (possibly with missing observations).
|
||||
|
||||
%@info:
|
||||
%! @deftypefn {Function File} {@var{dataset_} =} compute_corr(@var{dataset_},@var{nlag})
|
||||
%! @anchor{compute_acov}
|
||||
%! This function computes the (multivariate) auto-covariance function of the sample (possibly with missing observations).
|
||||
%!
|
||||
%! @strong{Inputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @item nlag
|
||||
%! Integer scalar. The maximum number of lags of the autocovariance function.
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{Outputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{This function is called by:}
|
||||
%! @ref{descriptive_statistics}.
|
||||
%!
|
||||
%! @strong{This function calls:}
|
||||
%! @ref{ndim}, @ref{compute_cova}, @ref{demean}, @ref{nandemean}.
|
||||
%!
|
||||
%! @strong{Remark 1.} On exit, a new field is appended to the structure: @code{dataset_.descriptive.acov} is a
|
||||
%! @tex{n\times n\times p} array (where @tex{n} is the number of observed variables as defined by @code{dataset_.info.nvobs},
|
||||
%! and @tex{n} is the maximum number of lags given by the second input @code{nlag}).
|
||||
%!
|
||||
%! @strong{Remark 2.} If @code{dataset_.descriptive.cova} does not exist, the covariance matrix is computed prior to the
|
||||
%! computation of the auto-covariance function.
|
||||
%!
|
||||
%! @end deftypefn
|
||||
%@eod:
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT univ DASH lemans DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
if ~isfield(dataset_.descriptive,'cova')
|
||||
dataset_ = compute_cova(dataset_);
|
||||
end
|
||||
dataset_.descriptive.acov = zeros(dataset_.nvobs,dataset_.nvobs,nlag);
|
||||
|
||||
data = transpose(dataset_.data);
|
||||
|
||||
for lag=1:nlag
|
||||
for i=1:dataset_.info.nvobs
|
||||
for j=1:dataset_.info.nvobs
|
||||
if dataset_.missing.state
|
||||
dataset_.descriptive.acov(i,j,lag) = nanmean(nandemean(data(lag+1:end,i)).*nandemean(data(1:end-lag,j)));
|
||||
else
|
||||
dataset_.descriptive.acov(i,j,lag) = mean(demean(data(lag+1:end,i)).*demean(data(1:end-lag,j)));
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,58 @@
|
|||
function dataset_ = compute_corr(dataset_)
|
||||
% Computes the correlation matrix of the sample (possibly with missing observations).
|
||||
|
||||
%@info:
|
||||
%! @deftypefn {Function File} {@var{dataset_} =} compute_corr(@var{dataset_})
|
||||
%! @anchor{compute_corr}
|
||||
%! This function computes covariance matrix of the sample (possibly with missing observations).
|
||||
%!
|
||||
%! @strong{Inputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{Outputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{This function is called by:}
|
||||
%! @ref{descriptive_statistics}.
|
||||
%!
|
||||
%! @strong{This function calls:}
|
||||
%! @ref{ndim}, @ref{compute_cova}.
|
||||
%!
|
||||
%! @strong{Remark 1.} On exit, a new field is appended to the structure: @code{dataset_.descriptive.corr} is a
|
||||
%! @tex{n\times n} vector (where @tex{n} is the number of observed variables as defined by @code{dataset_.info.nvobs}).
|
||||
%!
|
||||
%! @strong{Remark 2.} If @code{dataset_.descriptive.cova} does not exist, the covariance matrix is computed prior to the
|
||||
%! computation of the correlation matrix.
|
||||
%!
|
||||
%! @end deftypefn
|
||||
%@eod:
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT univ DASH lemans DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
if ~isfield(dataset_.descriptive,'cova')
|
||||
dataset_ = compute_cova(dataset_);
|
||||
end
|
||||
normalization_matrix = diag(1./sqrt(diag(dataset_.descriptive.cova)));
|
||||
dataset_.descriptive.corr = normalization_matrix*dataset_.descriptive.cova*normalization_matrix;
|
|
@ -0,0 +1,66 @@
|
|||
function dataset_ = compute_cova(dataset_)
|
||||
% Computes the covariance matrix of the sample (possibly with missing observations).
|
||||
|
||||
%@info:
|
||||
%! @deftypefn {Function File} {@var{dataset_} =} compute_corr(@var{dataset_})
|
||||
%! @anchor{compute_corr}
|
||||
%! This function computes covariance matrix of the sample (possibly with missing observations).
|
||||
%!
|
||||
%! @strong{Inputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{Outputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{This function is called by:}
|
||||
%! @ref{descriptive_statistics}.
|
||||
%!
|
||||
%! @strong{This function calls:}
|
||||
%! @ref{ndim}, @ref{demean}, @ref{nandemean}.
|
||||
%!
|
||||
%! @strong{Remark 1.} On exit, a new field is appended to the structure: @code{dataset_.descriptive.cova} is a
|
||||
%! @tex{n\times n} vector (where @tex{n} is the number of observed variables as defined by @code{dataset_.info.nvobs}).
|
||||
%!
|
||||
%! @end deftypefn
|
||||
%@eod:
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT univ DASH lemans DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
dataset_.descriptive.cova = zeros(dataset_.nvobs);
|
||||
|
||||
data = transpose(dataset_.data);
|
||||
|
||||
for i=1:dataset_.info.nvobs
|
||||
for j=i:dataset_.info.nvobs
|
||||
if dataset_.missing.state
|
||||
dataset_.descriptive.cova(i,j) = nanmean(nandemean(data(:,i)).*nandemean(data(:,j)));
|
||||
else
|
||||
dataset_.descriptive.cova(i,j) = mean(demean(data(:,i)).*demean(data(:,j)));
|
||||
end
|
||||
if j>i
|
||||
dataset_.descriptive.cova(j,i) = dataset_.descriptive.cova(i,j);
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,55 @@
|
|||
function dataset_ = compute_stdv(dataset_)
|
||||
% Compute the standard deviation for each observed variable (possibly with missing observations).
|
||||
|
||||
%@info:
|
||||
%! @deftypefn {Function File} {@var{dataset_} =} compute_stdv(@var{dataset_})
|
||||
%! @anchor{compute_stdv}
|
||||
%! This function computes the standard deviation of the observed variables (possibly with missing observations).
|
||||
%!
|
||||
%! @strong{Inputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{Outputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{This function is called by:}
|
||||
%! @ref{descriptive_statistics}.
|
||||
%!
|
||||
%! @strong{This function calls:}
|
||||
%! @ref{ndim}, @ref{demean}, @ref{nandemean}.
|
||||
%!
|
||||
%! @strong{Remark 1.} On exit, a new field is appended to the structure: @code{dataset_.descriptive.stdv} is a
|
||||
%! @tex{n\times 1} vector (where @tex{n} is the number of observed variables as defined by @code{dataset_.info.nvobs}).
|
||||
%!
|
||||
%! @end deftypefn
|
||||
%@eod:
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT univ DASH lemans DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
if dataset_.missing.state
|
||||
dataset_.descriptive.stdv = sqrt(nanmean(bsxfun(@power,nandemean(transpose(dataset_.data)),2)));
|
||||
else
|
||||
dataset_.descriptive.stdv = sqrt(mean(bsxfun(@power,demean(transpose(dataset_.data)),2)));
|
||||
end
|
|
@ -0,0 +1,128 @@
|
|||
function [i,n,s,j] = describe_missing_data(data)
|
||||
% This function reads the dataset and determines the location of the missing observations (defined by NaNs)
|
||||
|
||||
%@info:
|
||||
%! @deftypefn {Function File} {[@var{i}, @var{n}, @var{s}, @var{j} ] =} describe_missing_data (@var{data}, @var{gend}, @var{nvarobs})
|
||||
%! This function reads the dataset and determines where are the missing observations.
|
||||
%!
|
||||
%! @strong{Inputs}
|
||||
%! @table @var
|
||||
%! @item data
|
||||
%! Real matrix (T-by-N) for the dataset.
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{Outputs}
|
||||
%! @table @var
|
||||
%! @item i
|
||||
%! cell array (1-by-T). Each element is a @math{p_t\times 1} column vector of indices targeting the non-NaN variables at time t.
|
||||
%! @item n
|
||||
%! Integer scalar. The effective number of observations:
|
||||
%! @math(n=\sum_{t=1}^T p_t)
|
||||
%! @item s
|
||||
%! Integer scalar. The value of the time index such that @math(p_t=p_s) for all @math(t\geq s).
|
||||
%! @item j
|
||||
%! cell array (1-by-N). Each element is a column vector targeting to the non-NaN observations of a variable.
|
||||
%! @end table
|
||||
%!
|
||||
%! @end deftypefn
|
||||
%@eod:
|
||||
|
||||
% Copyright (C) 2008-2011 Dynare Team
|
||||
% stephane DOT adjemian AT univ DASH lemans DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
[variable_index,observation_index] = find(~isnan(data));
|
||||
[N,T] = size(data);
|
||||
|
||||
i = cell(1,T);
|
||||
j = cell(1,N);
|
||||
missing_observations_counter = NaN(T,1);
|
||||
|
||||
for obs=1:T
|
||||
idx = find(observation_index==obs);
|
||||
tmp = variable_index(idx);
|
||||
missing_observations_counter(obs,1) = N-length(tmp);
|
||||
if rows(tmp(:))
|
||||
i(obs) = { tmp(:) };
|
||||
else
|
||||
i(obs) = { [] };
|
||||
end
|
||||
end
|
||||
|
||||
missing_observations_counter = cumsum(missing_observations_counter);
|
||||
|
||||
n = length(variable_index);
|
||||
|
||||
if ~missing_observations_counter
|
||||
s = 1;
|
||||
else
|
||||
tmp = find(missing_observations_counter>=(T*N-n));
|
||||
s = tmp(1)+1;
|
||||
end
|
||||
|
||||
if nargout>3
|
||||
for var=1:N
|
||||
idx = find(variable_index==var);
|
||||
tmp = observation_index(idx);
|
||||
j(var) = { tmp(:) };
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
%@test:1
|
||||
%$ % Define a data set.
|
||||
%$ A = [ 1 1 ; ...
|
||||
%$ 1 NaN ; ...
|
||||
%$ NaN 1 ; ...
|
||||
%$ 1 1 ; ...
|
||||
%$ NaN NaN ; ...
|
||||
%$ 1 NaN ; ...
|
||||
%$ 1 NaN ; ...
|
||||
%$ 1 1 ; ...
|
||||
%$ 1 1 ; ...
|
||||
%$ 1 1 ; ...
|
||||
%$ 1 1 ];
|
||||
%$
|
||||
%$ % Define expected results.
|
||||
%$ eB = cell(1,11);
|
||||
%$ eB(1) = { transpose(1:2) };
|
||||
%$ eB(2) = { 1 };
|
||||
%$ eB(3) = { 2 };
|
||||
%$ eB(4) = { transpose(1:2)};
|
||||
%$ eB(5) = { [] };
|
||||
%$ eB(6) = { 1 };
|
||||
%$ eB(7) = { 1 };
|
||||
%$ eB(8) = { transpose(1:2) };
|
||||
%$ eB(9) = { transpose(1:2) };
|
||||
%$ eB(10) = { transpose(1:2) };
|
||||
%$ eB(11) = { transpose(1:2) };
|
||||
%$ eC = 16;
|
||||
%$ eD = 8;
|
||||
%$ eE = cell(1,2);
|
||||
%$ eE(1) = { [1; 2; 4; transpose(6:11)] };
|
||||
%$ eE(2) = { [1; 3; 4; transpose(8:11)] };
|
||||
%$
|
||||
%$ % Call the tested routine.
|
||||
%$ [B,C,D,E] = describe_missing_data(transpose(A));
|
||||
%$
|
||||
%$ % Check the results.
|
||||
%$ t(1) = dyn_assert(B,eB);
|
||||
%$ t(2) = dyn_assert(C,eC);
|
||||
%$ t(3) = dyn_assert(D,eD);
|
||||
%$ t(4) = dyn_assert(E,eE);
|
||||
%$ T = all(t);
|
||||
%@eof:1
|
|
@ -0,0 +1,86 @@
|
|||
function dataset_ = descriptive_statistics(dataset_,statistic,varagin)
|
||||
% Computes various descriptive statistics for the sample and stores them in the structure dataset_.
|
||||
|
||||
%@info:
|
||||
%! @deftypefn {Function File} {@var{dataset_} =} descriptive_statistics(@var{dataset_},@var{statistic})
|
||||
%! @deftypefn {Function File} {@var{dataset_} =} descriptive_statistics(@var{dataset_},@var{statistic},nlags)
|
||||
%! @anchor{compute_corr}
|
||||
%! This function computes various descriptive statistics on the sample (possibly with missing observations).
|
||||
%!
|
||||
%! @strong{Inputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @item statistic
|
||||
%! String. The name of the statistic to be computed. Admissible values are:
|
||||
%! @table @var
|
||||
%! @item 'stdv'
|
||||
%! Computes the standard deviation of each observed variable.
|
||||
%! @item 'cova'
|
||||
%! Computes the covariance matrix of the sample.
|
||||
%! @item 'corr'
|
||||
%! Computes the correlation matrix of the sample.
|
||||
%! @item 'acov'
|
||||
%! Computes the (multivariate) auto-covariance function of the sample. In this case a third argument (@code{nlags}) defining the
|
||||
%! maximum number of lags is mandatory.
|
||||
%! @end table
|
||||
%! @item nlags
|
||||
%! Integer scalar. The maximum number of lags when computing the autocovariance function.
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{Outputs}
|
||||
%! @table @var
|
||||
%! @item dataset_
|
||||
%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{This function is called by:}
|
||||
%! none.
|
||||
%!
|
||||
%! @strong{This function calls:}
|
||||
%! @ref{compute_stdv}, @ref{compute_cova}, @ref{compute_corr}, @ref{compute_acov}.
|
||||
%!
|
||||
%! @strong{Remark 1.} On exit, a new field containing the computed statistics is appended to the structure.
|
||||
%!
|
||||
%! @end deftypefn
|
||||
%@eod:
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT univ DASH lemans DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
if strcmpi(statistic,'stdv')
|
||||
dataset_ = compute_std(dataset_)
|
||||
end
|
||||
|
||||
if strcmpi(statistic,'cova')
|
||||
dataset_ = compute_cova(dataset_)
|
||||
end
|
||||
|
||||
if strcmpi(statistic,'corr')
|
||||
dataset_ = compute_cova(dataset_)
|
||||
end
|
||||
|
||||
if strcmpi(statistic,'acov')
|
||||
if nargin==2
|
||||
nlag = 10;
|
||||
else
|
||||
nlag = varargin{1};
|
||||
end
|
||||
dataset_ = compute_acov(dataset_,nlag);
|
||||
end
|
|
@ -0,0 +1,85 @@
|
|||
function dataset_ = initialize_dataset(datafile,varobs,first,nobs,transformation,prefilter,xls)
|
||||
% Initializes a structure describing the dataset.
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT univ DASH lemans DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
if isempty(datafile)
|
||||
error('Estimation:: You have to declare a dataset file!')
|
||||
end
|
||||
|
||||
if isempty(varobs)
|
||||
error('Estimation:: You have to declare a set of observed variables')
|
||||
end
|
||||
|
||||
% Get raw data.
|
||||
rawdata = read_variables(datafile,varobs,[],xls.sheet,xls.range);
|
||||
|
||||
% Get the (default) number of observations.
|
||||
if isempty(nobs)
|
||||
nobs = rows(rawdata)-first+1;
|
||||
end
|
||||
|
||||
% Get the (default) prefilter option.
|
||||
if isempty(prefilter)
|
||||
prefilter = 0;
|
||||
end
|
||||
|
||||
% Fill the dataset structure
|
||||
dataset_.info.ntobs = nobs;
|
||||
dataset_.info.nvobs = rows(varobs);
|
||||
dataset_.info.varobs = varobs;
|
||||
|
||||
rawdata = rawdata(first:(first+dataset_.info.ntobs-1),:);
|
||||
|
||||
% Take the log (or anything else) of the variables if needed
|
||||
if isempty(transformation)
|
||||
dataset_.rawdata = rawdata;
|
||||
else
|
||||
dataset_.rawdata = arrayfun(transformation,rawdata);
|
||||
end
|
||||
|
||||
% Test if the observations are real numbers.
|
||||
if ~isreal(dataset_.rawdata)
|
||||
error('Estimation:: There are complex values in the data! Probably a wrong (log) transformation...')
|
||||
end
|
||||
|
||||
% Test for missing observations.
|
||||
dataset_.missing.state = any(any(isnan(dataset_.rawdata)));
|
||||
if dataset_.missing.state
|
||||
[i,n,s,j] = describe_missing_data(dataset_.rawdata);
|
||||
dataset_.missing.aindex = i;
|
||||
dataset_.missing.vindex = j;
|
||||
dataset_.missing.number_of_observations = n;
|
||||
dataset_.missing.no_more_missing_observations = s;
|
||||
else
|
||||
dataset_.missing.aindex = [];
|
||||
dataset_.missing.vindex = [];
|
||||
dataset_.missing.number_of_observations = [];
|
||||
dataset_.missing.no_more_missing_observations = [];
|
||||
end
|
||||
|
||||
% Compute the empirical mean of the observed variables..
|
||||
dataset_.descriptive.mean = nanmean(dataset_.rawdata);
|
||||
|
||||
% Prefilter the data if needed.
|
||||
if prefilter == 1
|
||||
dataset_.data = transpose(bsxfun(@minus,dataset_.rawdata,dataset_.descriptive.mean));
|
||||
else
|
||||
dataset_.data = transpose(dataset_.rawdata);
|
||||
end
|
|
@ -0,0 +1,54 @@
|
|||
function c = demean(x)
|
||||
% Removes the mean of each column of a matrix.
|
||||
|
||||
%@info:
|
||||
%! @deftypefn {Function File} {@var{c} =} demean (@var{x})
|
||||
%! @anchor{demean}
|
||||
%! This function removes the mean of each column of a matrix.
|
||||
%!
|
||||
%! @strong{Inputs}
|
||||
%! @table @var
|
||||
%! @item x
|
||||
%! Matlab matrix (T-by-N).
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{Outputs}
|
||||
%! @table @var
|
||||
%! @item c
|
||||
%! Matlab matrix (T-by-N). The demeaned x matrix.
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{This function is called by:}
|
||||
%! @ref{compute_cova}, @ref{compute_acov}, @ref{compute_std}.
|
||||
%!
|
||||
%! @strong{This function calls:}
|
||||
%! @ref{ndim},
|
||||
%!
|
||||
%! @end deftypefn
|
||||
%@eod:
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT ens DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
if ndim(x)==1
|
||||
c = x-mean(x);
|
||||
elseif ndim(x)==2
|
||||
c = bsxfun(@minus,x,mean(x));
|
||||
else
|
||||
error('descriptive_statistics::demean:: This function is not implemented for arrays with dimension greater than two!')
|
||||
end
|
|
@ -0,0 +1,54 @@
|
|||
function c = nandemean(x)
|
||||
% Removes the mean of each column of a matrix with some NaNs.
|
||||
|
||||
%@info:
|
||||
%! @deftypefn {Function File} {@var{c} =} nandemean (@var{x})
|
||||
%! @anchor{nandemean}
|
||||
%! This function removes the mean of each column of a matrix with some NaNs.
|
||||
%!
|
||||
%! @strong{Inputs}
|
||||
%! @table @var
|
||||
%! @item x
|
||||
%! Matlab matrix (T-by-N).
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{Outputs}
|
||||
%! @table @var
|
||||
%! @item c
|
||||
%! Matlab matrix (T-by-N). The demeaned x matrix.
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{This function is called by:}
|
||||
%! @ref{compute_cova}, @ref{compute_acov}, @ref{compute_std}.
|
||||
%!
|
||||
%! @strong{This function calls:}
|
||||
%! @ref{ndim},
|
||||
%!
|
||||
%! @end deftypefn
|
||||
%@eod:
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT ens DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
if ndim(x)==1
|
||||
c = x-nanmean(x);
|
||||
elseif ndim(x)==2
|
||||
c = bsxfun(@minus,x,nanmean(x));
|
||||
else
|
||||
error('descriptive_statistics::nandemean:: This function is not implemented for arrays with dimension greater than two!')
|
||||
end
|
|
@ -0,0 +1,48 @@
|
|||
function n = ndim(x)
|
||||
% Report the number of non singleton dimensions of a matlab array.
|
||||
|
||||
%@info:
|
||||
%! @deftypefn {Function File} {@var{n} =} ndim (@var{x})
|
||||
%! @anchor{ndim}
|
||||
%! This function reports the number of non singleton dimensions of a matlab array.
|
||||
%!
|
||||
%! @strong{Inputs}
|
||||
%! @table @var
|
||||
%! @item x
|
||||
%! Matlab array.
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{Outputs}
|
||||
%! @table @var
|
||||
%! @item n
|
||||
%! Integer scalar. The number of non singleton dimensions of a matlab array.
|
||||
%! @end table
|
||||
%!
|
||||
%! @strong{This function is called by:}
|
||||
%! @ref{demean}, @ref{nandemean}.
|
||||
%!
|
||||
%! @strong{This function calls:}
|
||||
%! none.
|
||||
%!
|
||||
%! @end deftypefn
|
||||
%@eod:
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT ens DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
n = sum(size(x)>1);
|
|
@ -0,0 +1,62 @@
|
|||
function t = dyn_assert(A,B,tol)
|
||||
% This function tests the equality of two objects.
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT univ DASH lemans DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
if ( (nargin<3) || isempty(tol) )
|
||||
use_isequal_matlab_builtin = 1;
|
||||
else
|
||||
use_isequal_matlab_builtin = 0;
|
||||
end
|
||||
|
||||
[nA,mA] = size(A);
|
||||
[nB,mB] = size(B);
|
||||
|
||||
if nA-nB
|
||||
error('assert:: Dimensions of compared objects A and B don''t match!')
|
||||
end
|
||||
|
||||
if mA-mB
|
||||
error('assert:: Dimensions of compared objects A and B don''t match!')
|
||||
end
|
||||
|
||||
if isstruct(B) && ~isstruct(A)
|
||||
error('assert:: Compared objects are not of the same type!')
|
||||
end
|
||||
|
||||
if iscell(B) && ~iscell(A)
|
||||
error('assert:: Compared objects are not of the same type!')
|
||||
end
|
||||
|
||||
if use_isequal_matlab_builtin
|
||||
t = isequal(A,B);
|
||||
if ~t
|
||||
t = isequalwithequalnans(A,B);
|
||||
end
|
||||
else
|
||||
t = 1;
|
||||
if ~(isstruct(B) || iscell(B))
|
||||
if abs(A(:)-B(:))>tol
|
||||
t = 0;
|
||||
end
|
||||
else
|
||||
% not yet implemented
|
||||
t = NaN;
|
||||
end
|
||||
end
|
|
@ -0,0 +1,82 @@
|
|||
function check = test(fname,fpath)
|
||||
% Extract test sections from matlab's routine executes the test and report errors.
|
||||
|
||||
% Copyright (C) 2011 Dynare Team
|
||||
% stephane DOT adjemian AT univ DASH lemans DOT fr
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
% Default answer (no problem).
|
||||
check = 1;
|
||||
|
||||
% Open the matlab file.
|
||||
fid = fopen([fpath '/' fname '.m'],'r');
|
||||
|
||||
% Read the matlab file.
|
||||
file = textscan(fid,'%s','delimiter','\n');
|
||||
file = file{1};
|
||||
|
||||
% Close the matlab file.
|
||||
fclose(fid);
|
||||
|
||||
% Locate the test blocks.
|
||||
b1 = find(strncmp(file,'%@test:',7))+1;
|
||||
b2 = find(strncmp(file,'%@eof:',6))-1;
|
||||
nn = length(b2);
|
||||
|
||||
if length(b1)-length(b2)
|
||||
error('test:: There is a problem with the test blocks definition!')
|
||||
end
|
||||
|
||||
% Perform the tests.
|
||||
for i=1:nn
|
||||
% Write the temporary test routine.
|
||||
tid = fopen([fname '_test_' int2str(i) '.m'],'w');
|
||||
fprintf(tid,['function [T,t,log] = ' fname '_test_' int2str(i) '()\n']);
|
||||
fprintf(tid,['try\n']);
|
||||
for j=b1(i):b2(i)
|
||||
str = file{j};
|
||||
fprintf(tid,[str(4:end) '\n']);
|
||||
end
|
||||
fprintf(tid,['log = NaN;\n']);
|
||||
fprintf(tid,['catch exception\n']);
|
||||
fprintf(tid,['log = getReport(exception,''extended'');\n']);
|
||||
fprintf(tid,['T = NaN;\n']);
|
||||
fprintf(tid,['t = NaN;\n']);
|
||||
fprintf(tid,['end\n']);
|
||||
fclose(tid);
|
||||
% Call the temporary test routine.
|
||||
[TestFlag,TestDetails,log] = feval([fname '_test_' int2str(i)]);
|
||||
if isnan(TestFlag)
|
||||
fprintf(['\n'])
|
||||
fprintf(['Call to ' fname ' test routine n°' int2str(i) ' failed (' datestr(now) ')!\n'])
|
||||
fprintf(['\n'])
|
||||
disp(log)
|
||||
check = 0;
|
||||
continue
|
||||
end
|
||||
if ~TestFlag
|
||||
fprintf(['Test n°' int2str(i) ' for routine ' fname ' failed (' datestr(now) ')!\n']);
|
||||
for j=1:length(TestDetails)
|
||||
if ~TestDetails(j)
|
||||
fprintf(['Output argument n°' int2str(j) ' didn''t give the expected result.\n']);
|
||||
end
|
||||
end
|
||||
check = 0;
|
||||
else
|
||||
delete([fname '_test_' int2str(i) '.m'])
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue