public class StorelessCovariance extends 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.
Modifier and Type | Field and Description |
---|---|
private StorelessBivariateCovariance[] |
covMatrix
the square covariance matrix (upper triangular part)
|
private int |
dimension
dimension of the square covariance matrix
|
Constructor and Description |
---|
StorelessCovariance(int dim)
Create a bias corrected covariance matrix with a given dimension.
|
StorelessCovariance(int dim,
boolean biasCorrected)
Create a covariance matrix with a given number of rows and columns and the
indicated bias correction.
|
Modifier and Type | Method and Description |
---|---|
void |
append(StorelessCovariance sc)
Appends
sc to this, effectively aggregating the computations in sc
with this. |
double |
getCovariance(int xIndex,
int yIndex)
Get the covariance for an individual element of the covariance matrix.
|
RealMatrix |
getCovarianceMatrix()
Returns the covariance matrix
|
double[][] |
getData()
Return the covariance matrix as two-dimensional array.
|
private StorelessBivariateCovariance |
getElement(int i,
int j)
Gets the element at index (i, j) from the covariance matrix
|
int |
getN()
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. |
void |
increment(double[] data)
Increment the covariance matrix with one row of data.
|
private int |
indexOf(int i,
int j)
Returns the index (i, j) translated into the one-dimensional
array used to store the upper triangular part of the symmetric
covariance matrix.
|
private void |
initializeMatrix(boolean biasCorrected)
Initialize the internal two-dimensional array of
StorelessBivariateCovariance instances. |
private void |
setElement(int i,
int j,
StorelessBivariateCovariance cov)
Sets the covariance element at index (i, j) in the covariance matrix
|
computeCovarianceMatrix, computeCovarianceMatrix, computeCovarianceMatrix, computeCovarianceMatrix, covariance, covariance
private StorelessBivariateCovariance[] covMatrix
private int dimension
public StorelessCovariance(int dim)
dim
- the dimension of the square covariance matrixpublic StorelessCovariance(int dim, boolean biasCorrected)
dim
- the dimension of the covariance matrixbiasCorrected
- 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.private void initializeMatrix(boolean biasCorrected)
StorelessBivariateCovariance
instances.biasCorrected
- if the covariance estimate shall be corrected for biasprivate int indexOf(int i, int j)
i
- the row indexj
- the column indexprivate StorelessBivariateCovariance getElement(int i, int j)
i
- the row indexj
- the column indexStorelessBivariateCovariance
element at the given indexprivate void setElement(int i, int j, StorelessBivariateCovariance cov)
i
- the row indexj
- the column indexcov
- the StorelessBivariateCovariance
element to be setpublic double getCovariance(int xIndex, int yIndex) throws NumberIsTooSmallException
xIndex
- row index in the covariance matrixyIndex
- column index in the covariance matrixNumberIsTooSmallException
- if the number of observations
in the cell is < 2public void increment(double[] data) throws DimensionMismatchException
data
- array representing one row of data.DimensionMismatchException
- if the length of rowData
does not match with the covariance matrixpublic void append(StorelessCovariance sc) throws DimensionMismatchException
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.sc
- externally computed StorelessCovariance to add to thisDimensionMismatchException
- if the dimension of sc does not match thispublic RealMatrix getCovarianceMatrix() throws NumberIsTooSmallException
getCovarianceMatrix
in class Covariance
NumberIsTooSmallException
- if the number of observations
in a cell is < 2public double[][] getData() throws NumberIsTooSmallException
NumberIsTooSmallException
- if the number of observations
for a cell is < 2public int getN() throws MathUnsupportedOperationException
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.getN
in class Covariance
MathUnsupportedOperationException
MathUnsupportedOperationException
- in all casesCopyright (c) 2003-2014 Apache Software Foundation