How to find correlation between two integer arrays in java How to find correlation between two integer arrays in java arrays arrays

How to find correlation between two integer arrays in java


There is nothing in core Java. There are libraries out there you can use. Apache Commons has a statistical project, check PearsonCorrelation class.

Sample code:

public static void main(String[] args) {    double[] x = {1, 2, 4, 8};    double[] y = {2, 4, 8, 16};    double corr = new PearsonsCorrelation().correlation(y, x);    System.out.println(corr);}

prints out 1.0


Correlation is quite easy to compute manually:

http://en.wikipedia.org/wiki/Correlation_and_dependence

  public static double Correlation(int[] xs, int[] ys) {    //TODO: check here that arrays are not null, of the same length etc    double sx = 0.0;    double sy = 0.0;    double sxx = 0.0;    double syy = 0.0;    double sxy = 0.0;    int n = xs.length;    for(int i = 0; i < n; ++i) {      double x = xs[i];      double y = ys[i];      sx += x;      sy += y;      sxx += x * x;      syy += y * y;      sxy += x * y;    }    // covariation    double cov = sxy / n - sx * sy / n / n;    // standard error of x    double sigmax = Math.sqrt(sxx / n -  sx * sx / n / n);    // standard error of y    double sigmay = Math.sqrt(syy / n -  sy * sy / n / n);    // correlation is just a normalized covariation    return cov / sigmax / sigmay;  }