Class StorelessCovariance


  • public class StorelessCovariance
    extends Covariance
    Covariance implementation that does not require input data to be stored in memory. The size of the covariance matrix is specified in the constructor. Specific elements of the matrix are incrementally updated with calls to incrementRow() or increment Covariance().

    This class is based on a paper written by Philippe Pébay: Formulas for Robust, One-Pass Parallel Computation of Covariances and Arbitrary-Order Statistical Moments, 2008, Technical Report SAND2008-6212, Sandia National Laboratories.

    Note: the underlying covariance matrix is symmetric, thus only the upper triangular part of the matrix is stored and updated each increment.

    • Constructor Detail

      • StorelessCovariance

        public StorelessCovariance​(int dim)
        Create a bias corrected covariance matrix with a given dimension.
        Parameters:
        dim - the dimension of the square covariance matrix
      • StorelessCovariance

        public StorelessCovariance​(int dim,
                                   boolean biasCorrected)
        Create a covariance matrix with a given number of rows and columns and the indicated bias correction.
        Parameters:
        dim - the dimension of the covariance matrix
        biasCorrected - if true the covariance estimate is corrected for bias, i.e. n-1 in the denominator, otherwise there is no bias correction, i.e. n in the denominator.
    • Method Detail

      • getCovariance

        public double getCovariance​(int xIndex,
                                    int yIndex)
                             throws org.hipparchus.exception.MathIllegalArgumentException
        Get the covariance for an individual element of the covariance matrix.
        Parameters:
        xIndex - row index in the covariance matrix
        yIndex - column index in the covariance matrix
        Returns:
        the covariance of the given element
        Throws:
        org.hipparchus.exception.MathIllegalArgumentException - if the number of observations in the cell is < 2
      • increment

        public void increment​(double[] data)
                       throws org.hipparchus.exception.MathIllegalArgumentException
        Increment the covariance matrix with one row of data.
        Parameters:
        data - array representing one row of data.
        Throws:
        org.hipparchus.exception.MathIllegalArgumentException - if the length of rowData does not match with the covariance matrix
      • append

        public void append​(StorelessCovariance sc)
                    throws org.hipparchus.exception.MathIllegalArgumentException
        Appends sc to this, effectively aggregating the computations in sc with this. After invoking this method, covariances returned should be close to what would have been obtained by performing all of the increment(double[]) operations in sc directly on this.
        Parameters:
        sc - externally computed StorelessCovariance to add to this
        Throws:
        org.hipparchus.exception.MathIllegalArgumentException - if the dimension of sc does not match this
      • getCovarianceMatrix

        public org.hipparchus.linear.RealMatrix getCovarianceMatrix()
                                                             throws org.hipparchus.exception.MathIllegalArgumentException
        Returns the covariance matrix
        Overrides:
        getCovarianceMatrix in class Covariance
        Returns:
        covariance matrix
        Throws:
        org.hipparchus.exception.MathIllegalArgumentException - if the number of observations in a cell is < 2
      • getData

        public double[][] getData()
                           throws org.hipparchus.exception.MathIllegalArgumentException
        Return the covariance matrix as two-dimensional array.
        Returns:
        a two-dimensional double array of covariance values
        Throws:
        org.hipparchus.exception.MathIllegalArgumentException - if the number of observations for a cell is < 2
      • getN

        public int getN()
                 throws org.hipparchus.exception.MathRuntimeException
        This Covariance method is not supported by a StorelessCovariance, since the number of bivariate observations does not have to be the same for different pairs of covariates - i.e., N as defined in Covariance.getN() is undefined.
        Overrides:
        getN in class Covariance
        Returns:
        nothing as this implementation always throws a MathRuntimeException
        Throws:
        org.hipparchus.exception.MathRuntimeException - in all cases