package org.cloudbus.cloudsim.container.utils;
import java.util.Arrays;
/**
* Created by sareh on 7/08/15.
*/
public class Correlation {
// Ref : http://en.wikipedia.org/wiki/Correlation_and_dependence
public Correlation() {
}
public double getCor(double[] xs1, double[] ys1) {
//TODO: check here that arrays are not null, of the same length etc
double[] xs;
double[] ys;
if (xs1.length > ys1.length) {
xs = Arrays.copyOfRange(xs1, (xs1.length - ys1.length), xs1.length );
ys = ys1;
} else if (xs1.length < ys1.length) {
ys = Arrays.copyOfRange(ys1, (ys1.length - xs1.length), ys1.length );
xs = xs1;
} else {
ys = ys1;
xs = xs1;
}
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;
}
}