Skip to content

Commit 6baf77d

Browse files
authored
Correlation function for discrete variable correlation
1 parent af1d9d1 commit 6baf77d

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.thealgorithms.maths;
2+
3+
/**
4+
* Class for correlation of two discrete variables
5+
*/
6+
7+
public final class Correlation {
8+
private Correlation() {
9+
}
10+
11+
public static final double DELTA = 1e-9;
12+
13+
/**
14+
* Discrete correlation function.
15+
* Correlation between two discrete variables is calculated.
16+
* Correlation with a constant variable is taken to be zero.
17+
*
18+
* @param x The first discrete variable
19+
* @param y The second discrete variable
20+
* @param n The number of values for each variable
21+
* @return The result of the correlation of variables x,y.
22+
*/
23+
public static double correlation(double[] x, double[] y, int n) {
24+
double exy = 0, ex = 0, exx = 0, ey = 0, eyy = 0;
25+
for (int i = 0; i < n; i++) {
26+
exy += x[i] * y[i];
27+
ex += x[i];
28+
exx += x[i] * x[i];
29+
ey += y[i];
30+
eyy += y[i] * y[i];
31+
}
32+
exy /= n;
33+
ex /= n;
34+
exx /= n;
35+
ey /= n;
36+
eyy /= n;
37+
double cov = exy - ex * ey;
38+
double varx = Math.sqrt(exx - ex * ex);
39+
double vary = Math.sqrt(eyy - ey * ey);
40+
if (varx * vary < DELTA) {
41+
return 0;
42+
} else {
43+
return cov / Math.sqrt(varx * vary);
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)