From b4204f8b9ecbfe63b660bb019169e2f352730f8c Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer <jpfeifer@gmx.de> Date: Thu, 11 Jan 2018 22:08:03 +0100 Subject: [PATCH] Make sure that mean and covariance of data are correctly computed with only one observation Need to always compute mean along first dimension (cherry picked from commit 2d371b1997f5fa07fcbbf47e5923d7817d07c6b9) --- matlab/utilities/dataset/makedataset.m | 2 +- matlab/utilities/dataset/nancovariance.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/matlab/utilities/dataset/makedataset.m b/matlab/utilities/dataset/makedataset.m index c5c244b540..a26a074c5f 100644 --- a/matlab/utilities/dataset/makedataset.m +++ b/matlab/utilities/dataset/makedataset.m @@ -267,7 +267,7 @@ else end % Compute the empirical mean of the observed variables. -DatasetInfo.descriptive.mean = nanmean(DynareDataset.data); +DatasetInfo.descriptive.mean = nanmean(DynareDataset.data,1); % Compute the empirical covariance matrix of the observed variables. DatasetInfo.descriptive.covariance = nancovariance(DynareDataset.data); diff --git a/matlab/utilities/dataset/nancovariance.m b/matlab/utilities/dataset/nancovariance.m index 8e2e2b2275..09f2a38af6 100644 --- a/matlab/utilities/dataset/nancovariance.m +++ b/matlab/utilities/dataset/nancovariance.m @@ -51,7 +51,7 @@ function CovarianceMatrix = nancovariance(data) CovarianceMatrix = zeros(size(data,2)); if isanynan(data) - data = bsxfun(@minus,data,nanmean(data)); + data = bsxfun(@minus,data,nanmean(data,1)); for i=1:size(data,2) for j=i:size(data,2) CovarianceMatrix(i,j) = nanmean(data(:,i).*data(:,j)); @@ -61,7 +61,7 @@ if isanynan(data) end end else - data = bsxfun(@minus,data,mean(data)); + data = bsxfun(@minus,data,mean(data,1)); CovarianceMatrix = (transpose(data)*data)/size(data,1); end -- GitLab