view scripts/statistics/base/corr.m @ 24511:4f0e6ee6c9b8 stable

Make documentation Sec 26.1 more consistent and Sec 25.4 clearer (bug #52685) * corr.m: Add space in LaTeX formula. For the example, place variables in a @var qualifier. * cov.m: Use @var in LaTeX for x and y when referring to function input vector. Correct Octave-help formula by placing parentheses around N-1 so that -1 is in the denominator. Define N after the formula in which it is used. * gls.m: Define what GLS stands for. Use @var instead of @math for function input and output variables. Move the description of matrix O and scalar s to a third paragraph, ensuring s is lower case. Give a little more context to the description of X and Y in the second paragraph. Add an expansive paragraph three for details about the error variables E including the description of O and s along with their dimensions. Add "matrix" before B and "scalar" before s for clarity. Place @var around variables r, y, x and beta to make those upper case in Octave-help. * histc.m: Use LaTeX math rather than @code for the @tex scenario. * kendall.m: Treat tau differently for LaTeX and Octave-help scenarios. Add space in LaTeX formulas. Treat tau as @var in Octave-help case. Use lower case 'i' for index variable and upper case 'N' for vector length. * kurtosis.m: For mean value of x, use script rather than non-script. Define N after the formula in which it is used for Octave-help case. * mean.m: Indicate N is number of elements. Use @var on input vector x for Octave-help case. * meansq.m: Indicate N is number of elements, but drop the reference to mean value because there is none. Use @var on input vector x for Octave-help case. Use "If x is a matrix" consistent with all others. * median.m: Indicate N is number of elements for LaTeX case. For Octave-help place some vertical lines to represent case curly-bracket. Place @math around N. Define an intermediate vector S representing sorted X and use that in the math formula. * moment.m: Define x-bar as mean and N as number of elements. Use @var on x and p in the Octave-help formulas. * ols.m: Define meaning of OLS. Add @var to LaTeX variables to make them non-script vectors. Use @var instead of @math for function input and output variables. Use hyphens for matrix dimensions in Octave-help formula. Move the description of matrix S to a third paragraph. Give a little more context to the description of X and Y in the second paragraph. Add an expansive paragraph three for details about the error variables E including the description of matrix S along with its dimensions, ensuring S is upper case. Add "matrix" before B for clarity. Make the definition of SIGMA one line for appearance in Octave-help. * prctile.m: Change a mistaken 'y' to 'q' to work in LaTeX as well. * quantile.m: Use @var{method} rather than METHOD. Break up all the method formulas for p(k) into LaTeX and Octave-help versions for better control. Use upper case N for the length of P. * skewness.m: Remove @var from x when referring to vector elements in LaTeX. Indicate N is number of elements. * spearman.m: Break into separate LaTeX and Octave-help cases rather than use @code for LaTeX. Use Greek symbol rho in LaTeX. * std.m: Add @var to x variable to indicate LaTeX or Octave-help vector. Add clarification about N being number elements of x to both LaTeX and Octave-help formulas. * var.m: Indicate N is number of elements. Apply @var to x to show it is a vector. Change == to "is equal to" for normal text.
author Daniel J Sebald <daniel.sebald@ieee.org>
date Wed, 27 Dec 2017 23:38:25 -0600
parents 3ac9f9ecfae5
children 3fc1c8ebe5c3
line wrap: on
line source

## Copyright (C) 1996-2017 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
## <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
## @deftypefn  {} {} corr (@var{x})
## @deftypefnx {} {} corr (@var{x}, @var{y})
## Compute matrix of correlation coefficients.
##
## If each row of @var{x} and @var{y} is an observation and each column is
## a variable, then the @w{(@var{i}, @var{j})-th} entry of
## @code{corr (@var{x}, @var{y})} is the correlation between the
## @var{i}-th variable in @var{x} and the @var{j}-th variable in @var{y}.
## @tex
## $$
## {\rm corr}(x,y) = {{\rm cov}(x,y) \over {\rm std}(x) \, {\rm std}(y)}
## $$
## @end tex
## @ifnottex
##
## @example
## corr (@var{x},@var{y}) = cov (@var{x},@var{y}) / (std (@var{x}) * std (@var{y}))
## @end example
##
## @end ifnottex
## If called with one argument, compute @code{corr (@var{x}, @var{x})},
## the correlation between the columns of @var{x}.
## @seealso{cov}
## @end deftypefn

## Author: Kurt Hornik <hornik@wu-wien.ac.at>
## Created: March 1993
## Adapted-By: jwe

function retval = corr (x, y = [])

  if (nargin < 1 || nargin > 2)
    print_usage ();
  endif

  ## Input validation is done by cov.m.  Don't repeat tests here

  ## Special case, scalar is always 100% correlated with itself
  if (isscalar (x))
    if (isa (x, "single"))
      retval = single (1);
    else
      retval = 1;
    endif
    return;
  endif

  ## No check for division by zero error, which happens only when
  ## there is a constant vector and should be rare.
  if (nargin == 2)
    c = cov (x, y);
    s = std (x)' * std (y);
    retval = c ./ s;
  else
    c = cov (x);
    s = sqrt (diag (c));
    retval = c ./ (s * s');
  endif

endfunction


%!test
%! x = rand (10);
%! cc1 = corr (x);
%! cc2 = corr (x, x);
%! assert (size (cc1) == [10, 10] && size (cc2) == [10, 10]);
%! assert (cc1, cc2, sqrt (eps));

%!test
%! x = [1:3]';
%! y = [3:-1:1]';
%! assert (corr (x, y), -1, 5*eps);
%! assert (corr (x, flipud (y)), 1, 5*eps);
%! assert (corr ([x, y]), [1 -1; -1 1], 5*eps);

%!test
%! x = single ([1:3]');
%! y = single ([3:-1:1]');
%! assert (corr (x, y), single (-1), 5*eps);
%! assert (corr (x, flipud (y)), single (1), 5*eps);
%! assert (corr ([x, y]), single ([1 -1; -1 1]), 5*eps);

%!assert (corr (5), 1)
%!assert (corr (single (5)), single (1))

## Test input validation
%!error corr ()
%!error corr (1, 2, 3)
%!error corr ([1; 2], ["A", "B"])
%!error corr (ones (2,2,2))
%!error corr (ones (2,2), ones (2,2,2))