You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Patrick Meyer (JIRA)" <ji...@apache.org> on 2011/06/15 20:32:47 UTC

[jira] [Updated] (MATH-449) Storeless covariance

     [ https://issues.apache.org/jira/browse/MATH-449?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Patrick Meyer updated MATH-449:
-------------------------------

    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.

{code}
//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;
        }
    }   
}
{code}

  was:
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.

{code}
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;
        }
    }   
}
{code}


> Storeless covariance
> --------------------
>
>                 Key: MATH-449
>                 URL: https://issues.apache.org/jira/browse/MATH-449
>             Project: Commons Math
>          Issue Type: Improvement
>            Reporter: Patrick Meyer
>             Fix For: 3.0
>
>   Original Estimate: 168h
>  Remaining Estimate: 168h
>
> 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.
> {code}
> //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;
>         }
>     }   
> }
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira