Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
Currently there is no storeless version for computing the covariance. However, Pebay (2008) describes algorithms for on-line covariance computations, http://infoserve.sandia.gov/sand_doc/2008/086212.pdf. I have provided a simple class for implementing this algorithm. It would be nice to have this integrated into org.apache.commons.math.stat.correlation.Covariance.
//This code is granted for inclusion in the Apache Commons under the terms of the ASL. public class StorelessCovariance{ private double deltaX = 0.0; private double deltaY = 0.0; private double meanX = 0.0; private double meanY = 0.0; private double N=0; private Double covarianceNumerator=0.0; private boolean unbiased=true; public Covariance(boolean unbiased){ this.unbiased = unbiased; } public void increment(Double x, Double y){ if(x!=null & y!=null){ N++; deltaX = x - meanX; deltaY = y - meanY; meanX += deltaX/N; meanY += deltaY/N; covarianceNumerator += ((N-1.0)/N)*deltaX*deltaY; } } public Double getResult(){ if(unbiased){ return covarianceNumerator/(N-1.0); }else{ return covarianceNumerator/N; } } }