Skip to content
Snippets Groups Projects
Verified Commit fcac767c authored by Stéphane Adjemian's avatar Stéphane Adjemian
Browse files

Added computation of the geometric with nanmean method.

parent cc10059c
No related branches found
No related tags found
No related merge requests found
function m = nanmean(o) % --*-- Unitary tests --*--
function m = nanmean(o, geometric) % --*-- Unitary tests --*--
% Returns the mean of the variables in a @dseries object o.
% Returns the mean of the variables in a @dseries object o (robust
% to the presence of NaNs).
%
% INPUTS
% o o dseries object [mandatory].
% o geometric logical [default is false], if true returns the geometric mean.
% - o dseries object [mandatory].
% - geometric logical [default is false], if true returns the geometric mean.
%
% OUTPUTS
% o m 1*vobs(o) vector of doubles.
% - m 1*vobs(o) vector of doubles.
% Copyright (C) 2019 Dynare Team
% Copyright © 2019-2020 Dynare Team
%
% This file is part of Dynare.
%
......@@ -26,26 +27,59 @@ function m = nanmean(o) % --*-- Unitary tests --*--
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
m = nanmean(o.data);
if nargin<2
geometric = false;
end
if geometric
m = NaN(1,o.vobs());
for i = 1:o.vobs()
tmp = o.data(~isnan(o.data(:,i)),i);
m(i) = prod(tmp)^(1.0/length(tmp));
end
else
m = nanmean(o.data);
end
return
%@test:1
%$ % Define a dataset.
%$ A = repmat([1.005, 1.05], 10, 1);
%$ A(3,1) = NaN;
%$ A(5,2) = NaN;
%$
%$ % Instantiate a time series object and compute the mean.
%$ try
%$ ts = dseries(A);
%$ m = nanmean(ts);
%$ t(1) = 1;
%$ catch
%$ t = 0;
%$ end
%$
%$ if t(1)
%$ t(2) = dassert(isequal(size(m),[1, 2]), true);
%$ t(3) = dassert(m, [1.005, 1.05]);
%$ end
%$ T = all(t);
%@eof:1
\ No newline at end of file
% Define a dataset.
A = repmat([1.005, 1.05], 10, 1);
A(3,1) = NaN;
A(5,2) = NaN;
% Instantiate a time series object and compute the mean.
try
ts = dseries(A);
m = nanmean(ts);
t(1) = 1;
catch
t = 0;
end
if t(1)
t(2) = dassert(isequal(size(m),[1, 2]), true);
t(3) = dassert(m, [1.005, 1.05]);
end
T = all(t);
%@eof:1
%@test:2
% Define a dataset.
a = [1 0; NaN 2; 3 4];
% Instantiate a time series object and compute the geometric mean.
try
ts = dseries(a);
m = nanmean(ts, true);
t(1) = 1;
catch
t = 0;
end
if t(1)
t(2) = dassert(isequal(size(m),[1, 2]), true);
t(3) = dassert(m, [sqrt(3), 0]);
end
T = all(t);
%@eof:2
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment