# HG changeset patch # User Rik # Date 1442925905 25200 # Node ID afdb856e44f19c16322d6a81d6ef610c1b8fc787 # Parent 1f330d33388fd65c5380a35c6632eab48103115d Deprecate mahalanobis function. * NEWS: Announce deprecation. * stats.txi: Remove from manual * scripts/deprecated/module.mk: Add to deprecated build dir. * scripts/statistics/base/module.mk: Remove from existing dir * scripts/deprecated/mahalanobis.m: Add warning message to deprecated function. * scripts/statistics/base/mahalanobis.m: Delete deprecated function. diff -r 1f330d33388f -r afdb856e44f1 NEWS --- a/NEWS Tue Sep 22 04:50:47 2015 -0700 +++ b/NEWS Tue Sep 22 05:45:05 2015 -0700 @@ -47,6 +47,7 @@ Function | Replacement ---------------------|------------------ bitmax | flintmax + mahalanobis | mahal in Octave-Forge statistics pkg wavread | audioread wavwrite | audiowrite diff -r 1f330d33388f -r afdb856e44f1 doc/interpreter/stats.txi --- a/doc/interpreter/stats.txi Tue Sep 22 04:50:47 2015 -0700 +++ b/doc/interpreter/stats.txi Tue Sep 22 05:45:05 2015 -0700 @@ -137,8 +137,6 @@ @DOCSTRING(cloglog) -@DOCSTRING(mahalanobis) - @DOCSTRING(table) @node Statistical Plots diff -r 1f330d33388f -r afdb856e44f1 scripts/deprecated/mahalanobis.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/deprecated/mahalanobis.m Tue Sep 22 05:45:05 2015 -0700 @@ -0,0 +1,94 @@ +## Copyright (C) 1996-2015 John W. Eaton +## +## This file is part of Octave. +## +## Octave 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. +## +## Octave 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 Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {} mahalanobis (@var{x}, @var{y}) +## +## @code{mahalanobis} is deprecated and will be removed in Octave version 4.6. +## See the @code{mahal} function in the statistics package from Octave-Forge +## for equivalent functionality. +## +## Return the Mahalanobis' D-square distance between the multivariate +## samples @var{x} and @var{y}. +## +## The data @var{x} and @var{y} must have the same number of components +## (columns), but may have a different number of observations (rows). +## @end deftypefn + +## Author: Friedrich Leisch +## Created: July 1993 +## Adapted-By: jwe + +function retval = mahalanobis (x, y) + + persistent warned = false; + if (! warned) + warned = true; + warning ("Octave:deprecated-function", + "mahalanobis is obsolete and will be removed from a future version of Octave, please use mahal from the statistics package in Octave-Forge instead"); + endif + + if (nargin != 2) + print_usage (); + endif + + if ( ! (isnumeric (x) || islogical (x)) + || ! (isnumeric (y) || islogical (y))) + error ("mahalanobis: X and Y must be numeric matrices or vectors"); + endif + + if (ndims (x) != 2 || ndims (y) != 2) + error ("mahalanobis: X and Y must be 2-D matrices or vectors"); + endif + + [xr, xc] = size (x); + [yr, yc] = size (y); + + if (xc != yc) + error ("mahalanobis: X and Y must have the same number of columns"); + endif + + if (isinteger (x)) + x = double (x); + endif + + xm = mean (x); + ym = mean (y); + + ## Center data by subtracting means + x = bsxfun (@minus, x, xm); + y = bsxfun (@minus, y, ym); + + w = (x' * x + y' * y) / (xr + yr - 2); + + winv = inv (w); + + retval = (xm - ym) * winv * (xm - ym)'; + +endfunction + + +## Test input validation +%!error mahalanobis () +%!error mahalanobis (1, 2, 3) +%!error mahalanobis ('A', 'B') +%!error mahalanobis ([1, 2], ['A', 'B']) +%!error mahalanobis (ones (2,2,2)) +%!error mahalanobis (ones (2,2), ones (2,2,2)) +%!error mahalanobis (ones (2,2), ones (2,3)) + diff -r 1f330d33388f -r afdb856e44f1 scripts/deprecated/module.mk --- a/scripts/deprecated/module.mk Tue Sep 22 04:50:47 2015 -0700 +++ b/scripts/deprecated/module.mk Tue Sep 22 05:45:05 2015 -0700 @@ -13,6 +13,7 @@ scripts/deprecated/isstr.m \ scripts/deprecated/loadaudio.m \ scripts/deprecated/luinc.m \ + scripts/deprecated/mahalanobis.m \ scripts/deprecated/mouse_wheel_zoom.m \ scripts/deprecated/nfields.m \ scripts/deprecated/octave_tmp_file_name.m \ diff -r 1f330d33388f -r afdb856e44f1 scripts/statistics/base/mahalanobis.m --- a/scripts/statistics/base/mahalanobis.m Tue Sep 22 04:50:47 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -## Copyright (C) 1996-2015 John W. Eaton -## -## This file is part of Octave. -## -## Octave 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. -## -## Octave 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 Octave; see the file COPYING. If not, see -## . - -## -*- texinfo -*- -## @deftypefn {Function File} {} mahalanobis (@var{x}, @var{y}) -## Return the Mahalanobis' D-square distance between the multivariate -## samples @var{x} and @var{y}. -## -## The data @var{x} and @var{y} must have the same number of components -## (columns), but may have a different number of observations (rows). -## @end deftypefn - -## Author: Friedrich Leisch -## Created: July 1993 -## Adapted-By: jwe - -function retval = mahalanobis (x, y) - - if (nargin != 2) - print_usage (); - endif - - if ( ! (isnumeric (x) || islogical (x)) - || ! (isnumeric (y) || islogical (y))) - error ("mahalanobis: X and Y must be numeric matrices or vectors"); - endif - - if (ndims (x) != 2 || ndims (y) != 2) - error ("mahalanobis: X and Y must be 2-D matrices or vectors"); - endif - - [xr, xc] = size (x); - [yr, yc] = size (y); - - if (xc != yc) - error ("mahalanobis: X and Y must have the same number of columns"); - endif - - if (isinteger (x)) - x = double (x); - endif - - xm = mean (x); - ym = mean (y); - - ## Center data by subtracting means - x = bsxfun (@minus, x, xm); - y = bsxfun (@minus, y, ym); - - w = (x' * x + y' * y) / (xr + yr - 2); - - winv = inv (w); - - retval = (xm - ym) * winv * (xm - ym)'; - -endfunction - - -## Test input validation -%!error mahalanobis () -%!error mahalanobis (1, 2, 3) -%!error mahalanobis ('A', 'B') -%!error mahalanobis ([1, 2], ['A', 'B']) -%!error mahalanobis (ones (2,2,2)) -%!error mahalanobis (ones (2,2), ones (2,2,2)) -%!error mahalanobis (ones (2,2), ones (2,3)) - diff -r 1f330d33388f -r afdb856e44f1 scripts/statistics/base/module.mk --- a/scripts/statistics/base/module.mk Tue Sep 22 04:50:47 2015 -0700 +++ b/scripts/statistics/base/module.mk Tue Sep 22 05:45:05 2015 -0700 @@ -12,7 +12,6 @@ scripts/statistics/base/kurtosis.m \ scripts/statistics/base/logit.m \ scripts/statistics/base/lscov.m \ - scripts/statistics/base/mahalanobis.m \ scripts/statistics/base/mean.m \ scripts/statistics/base/meansq.m \ scripts/statistics/base/median.m \