Given two array elements and we have to find the correlation coefficient between two arrays. The correlation coefficient is an equation that is used to determine the strength of the relation between two variables. The correlation coefficient is sometimes called as cross-correlation coefficient. The correlation coefficient always lies between -1 to +1 where -1 represents X and Y are negatively correlated and +1 represents X and Y are positively correlated.
![Rendered by QuickLaTeX.com r=\frac{n\left(\sum x y\right)-\left(\sum x\right)\left(\sum y\right)}{\sqrt{\left[n \sum x^{2}-\left(\sum x\right)^{2}\right]\left[n \Sigma y^{2}-\left(\sum y\right)^{2}\right]}}](https://www.geeksforgeeks.org/wp-content/ql-cache/quicklatex.com-de0e70eb2c8fe1af1a01e49125a4301b_l3.png)
Where r is the correlation coefficient.
[Tex]\begin{array}{|c|c|c|} \hline X^{*} Y & X^{*} X & Y^{*} Y \\ \hline 375 & 225 & 625 \\ \hline 450 & 324 & 625 \\ \hline 567 & 441 & 729 \\ \hline 744 & 576 & 961 \\ \hline 864 & 729 & 1024 \\ \hline \sum X^{*} Y=3000 & \sum X^{*} X=2295 & \sum Y^{*} Y=3964 \\ \hline \end{array} [/Tex]
Correlation coefficient
= (5 * 3000 - 105 * 140)
/ sqrt((5 * 2295 - 1052)*(5*3964 - 1402))
= 300 / sqrt(450 * 220) = 0.953463
Examples :
Input : X[] = {43, 21, 25, 42, 57, 59}
Y[] = {99, 65, 79, 75, 87, 81}
Output : 0.529809
Input : X[] = {15, 18, 21, 24, 27};
Y[] = {25, 25, 27, 31, 32}
Output : 0.953463
C++
#include<bits/stdc++.h>
using namespace std;
float correlationCoefficient( int X[], int Y[], int n)
{
int sum_X = 0, sum_Y = 0, sum_XY = 0;
int squareSum_X = 0, squareSum_Y = 0;
for ( int i = 0; i < n; i++)
{
sum_X = sum_X + X[i];
sum_Y = sum_Y + Y[i];
sum_XY = sum_XY + X[i] * Y[i];
squareSum_X = squareSum_X + X[i] * X[i];
squareSum_Y = squareSum_Y + Y[i] * Y[i];
}
float corr = ( float )(n * sum_XY - sum_X * sum_Y)
/ sqrt ((n * squareSum_X - sum_X * sum_X)
* (n * squareSum_Y - sum_Y * sum_Y));
return corr;
}
int main()
{
int X[] = {15, 18, 21, 24, 27};
int Y[] = {25, 25, 27, 31, 32};
int n = sizeof (X)/ sizeof (X[0]);
cout<<correlationCoefficient(X, Y, n);
return 0;
}
|
Java
import java.math.*;
class GFG {
static float correlationCoefficient( int X[],
int Y[], int n)
{
int sum_X = 0 , sum_Y = 0 , sum_XY = 0 ;
int squareSum_X = 0 , squareSum_Y = 0 ;
for ( int i = 0 ; i < n; i++)
{
sum_X = sum_X + X[i];
sum_Y = sum_Y + Y[i];
sum_XY = sum_XY + X[i] * Y[i];
squareSum_X = squareSum_X + X[i] * X[i];
squareSum_Y = squareSum_Y + Y[i] * Y[i];
}
float corr = ( float )(n * sum_XY - sum_X * sum_Y)/
( float )(Math.sqrt((n * squareSum_X -
sum_X * sum_X) * (n * squareSum_Y -
sum_Y * sum_Y)));
return corr;
}
public static void main(String args[])
{
int X[] = { 15 , 18 , 21 , 24 , 27 };
int Y[] = { 25 , 25 , 27 , 31 , 32 };
int n = X.length;
System.out.printf( "%6f" ,
correlationCoefficient(X, Y, n));
}
}
|
Python
import math
def correlationCoefficient(X, Y, n) :
sum_X = 0
sum_Y = 0
sum_XY = 0
squareSum_X = 0
squareSum_Y = 0
i = 0
while i < n :
sum_X = sum_X + X[i]
sum_Y = sum_Y + Y[i]
sum_XY = sum_XY + X[i] * Y[i]
squareSum_X = squareSum_X + X[i] * X[i]
squareSum_Y = squareSum_Y + Y[i] * Y[i]
i = i + 1
corr = ( float )(n * sum_XY - sum_X * sum_Y) /
( float )(math.sqrt((n * squareSum_X -
sum_X * sum_X) * (n * squareSum_Y -
sum_Y * sum_Y)))
return corr
X = [ 15 , 18 , 21 , 24 , 27 ]
Y = [ 25 , 25 , 27 , 31 , 32 ]
n = len (X)
print ( '{0:.6f}' . format (correlationCoefficient(X, Y, n)))
|
C#
using System;
class GFG {
static float correlationCoefficient( int []X, int []Y,
int n)
{
int sum_X = 0, sum_Y = 0, sum_XY = 0;
int squareSum_X = 0, squareSum_Y = 0;
for ( int i = 0; i < n; i++)
{
sum_X = sum_X + X[i];
sum_Y = sum_Y + Y[i];
sum_XY = sum_XY + X[i] * Y[i];
squareSum_X = squareSum_X + X[i] * X[i];
squareSum_Y = squareSum_Y + Y[i] * Y[i];
}
float corr = ( float )(n * sum_XY - sum_X * sum_Y)/
( float )(Math.Sqrt((n * squareSum_X -
sum_X * sum_X) * (n * squareSum_Y -
sum_Y * sum_Y)));
return corr;
}
public static void Main()
{
int []X = {15, 18, 21, 24, 27};
int []Y = {25, 25, 27, 31, 32};
int n = X.Length;
Console.Write(Math.Round(correlationCoefficient(X, Y, n) *
1000000.0)/1000000.0);
}
}
|
PHP
<?php
function correlationCoefficient( $X , $Y , $n )
{
$sum_X = 0; $sum_Y = 0; $sum_XY = 0;
$squareSum_X = 0; $squareSum_Y = 0;
for ( $i = 0; $i < $n ; $i ++)
{
$sum_X = $sum_X + $X [ $i ];
$sum_Y = $sum_Y + $Y [ $i ];
$sum_XY = $sum_XY + $X [ $i ] * $Y [ $i ];
$squareSum_X = $squareSum_X +
$X [ $i ] * $X [ $i ];
$squareSum_Y = $squareSum_Y +
$Y [ $i ] * $Y [ $i ];
}
$corr = (float)( $n * $sum_XY - $sum_X * $sum_Y ) /
sqrt(( $n * $squareSum_X - $sum_X * $sum_X ) *
( $n * $squareSum_Y - $sum_Y * $sum_Y ));
return $corr ;
}
$X = array (15, 18, 21, 24, 27);
$Y = array (25, 25, 27, 31, 32);
$n = sizeof( $X );
echo correlationCoefficient( $X , $Y , $n );
?>
|
Javascript
<script>
function correlationCoefficient(X, Y, n)
{
let sum_X = 0, sum_Y = 0, sum_XY = 0;
let squareSum_X = 0, squareSum_Y = 0;
for (let i = 0; i < n; i++)
{
sum_X = sum_X + X[i];
sum_Y = sum_Y + Y[i];
sum_XY = sum_XY + X[i] * Y[i];
squareSum_X = squareSum_X + X[i] * X[i];
squareSum_Y = squareSum_Y + Y[i] * Y[i];
}
let corr = (n * sum_XY - sum_X * sum_Y)/
(Math.sqrt((n * squareSum_X -
sum_X * sum_X) *
(n * squareSum_Y -
sum_Y * sum_Y)));
return corr;
}
let X = [ 15, 18, 21, 24, 27 ];
let Y = [ 25, 25, 27, 31, 32 ];
let n = X.length;
document.write(
correlationCoefficient(X, Y, n));
</script>
|
Time complexity: O(n), where n is the size of given arrays
Auxiliary space: O(1)