diff --git a/matlab/utilities/dataset/compute_acov.m b/matlab/utilities/dataset/nanautocovariance.m similarity index 57% rename from matlab/utilities/dataset/compute_acov.m rename to matlab/utilities/dataset/nanautocovariance.m index b1834e854..715ae957f 100644 --- a/matlab/utilities/dataset/compute_acov.m +++ b/matlab/utilities/dataset/nanautocovariance.m @@ -1,4 +1,4 @@ -function dataset_ = compute_acov(dataset_) +function autocov = nanautocovariance(data,order) % Computes the (multivariate) auto-covariance function of the sample (possibly with missing observations). %@info: @@ -8,36 +8,36 @@ function dataset_ = compute_acov(dataset_) %! %! @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. +%! @item data +%! T*N array of real numbers. +%! @item order +%! 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} +%! @item autocov +%! A N*N*order array of real numbers. %! @end table -%! -%! @strong{This function is called by:} +%! +%! @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}, +%! @ref{ndim}, @ref{nancovariance}, @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 +%! +%! @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-2012 Dynare Team -% +% Copyright (C) 2011-2014 Dynare Team +% % This file is part of Dynare. % % Dynare is free software: you can redistribute it and/or modify @@ -53,22 +53,23 @@ function dataset_ = compute_acov(dataset_) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr +n = size(data,2); +missing = isanynan(data); -if ~isfield(dataset_.descriptive,'cova') - dataset_ = compute_cova(dataset_); -end -dataset_.descriptive.acov = zeros(dataset_.nvobs,dataset_.nvobs,nlag); +autocov = zeros(n, n, order); -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))); +for lag=1:order + if missing + data = nandemean(data); + else + data = demean(data); + end + for i=1:n + for j=1:n + if missing + autocov(i,j,lag) = nanmean(data((lag+1):end,i).*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))); + autocov(i,j,lag) = mean(data((lag+1):end,i).*data(1:end-lag,j)); end end end