# CovarianceAccumulator class

`CovarianceAccumulator`

computes covariance and correlation of pairs of samples by accumulating the
first two central moments and cross-moments.

Samples are added one pair at the time, using the `Push`

method. Other members are used to retrieve the results.
The accumulator uses a stable algorithm to prevent catastrophic cancellation.

The covariance matrix is formed by

| cov.VarianceX() cov.Covariance() | | cov.Covariance() cov.VarianceY() |

The `Regression`

method returns the parameters to the least squares fit of the equation ,
where is the first sample in each pair and is the second (this is linear regression), is the
intercept and is the slope. The `Slope`

method computes only the slope component.

It is possible to accumulate samples in different objects (e.g. when processing with multiple threads),
and add the accumulators together using the `+`

operator.

## Aliases

- using RegressionResult = dip::RegressionParameters
- Copying type for backward compatibility.

## Functions

- void Reset()
- Reset the accumulator, leaving it as if newly allocated.
- void Push(dip::dfloat x, dip::dfloat y)
- Add a pair of samples to the accumulator
- auto Number() const -> dip::uint
- Number of samples
- auto MeanX() const -> dip::dfloat
- Unbiased estimator of population mean for first variable
- auto MeanY() const -> dip::dfloat
- Unbiased estimator of population mean for second variable
- auto VarianceX() const -> dip::dfloat
- Unbiased estimator of population variance for first variable
- auto VarianceY() const -> dip::dfloat
- Unbiased estimator of population variance for second variable
- auto StandardDeviationX() const -> dip::dfloat
- Estimator of population standard deviation for first variable (it is not possible to derive an unbiased estimator)
- auto StandardDeviationY() const -> dip::dfloat
- Estimator of population standard deviation for second variable (it is not possible to derive an unbiased estimator)
- auto Covariance() const -> dip::dfloat
- Unbiased estimator of population covariance
- auto Correlation() const -> dip::dfloat
- Estimator of correlation between the two variables
- auto Slope() const -> dip::dfloat
- Computes the slope of the regression line
- auto Regression() const -> dip::CovarianceAccumulator::RegressionResult
- Computes the slope and intercept of the regression line

## Operators

- auto operator+=(dip::CovarianceAccumulator const& other) -> dip::CovarianceAccumulator&
- Combine two accumulators