相关系数 是一种统计度量,帮助我们确定两个变量之间关系的强度和方向。它量化了一个变量的变化如何对应于另一个变量的变化。这个系数有时被称为 互相关系数,其值总是介于 -1 和 +1 之间:
- -1:强负相关(当一个变量增加时,另一个减少)。
- 0:无相关性(变量之间没有关系)。
- +1:强正相关(两个变量同时增加或减少)。
相关系数公式
相关系数(r)使用以下公式计算:
> 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]}}
其中:
- n = 数据点的数量
- x, y = 两个变量的数据值
- Σxy = 对应的 x 和 y 值的乘积之和
- Σx², Σy² = x 和 y 值的平方和
计算示例
让我们为给定的数据集计算相关系数:
Y
—
25
25
27
31
32
ΣY = 140附加计算:
X²
—
225
324
441
576
729
ΣX² = 2295
现在,应用公式:
- r = \frac{(5 \times 3000 – 105 \times 140)}{\sqrt{(5 \times 2295 – 105^2) \times (5 \times 3964 – 140^2)}}
- r = \frac{300}{\sqrt{450 \times 220}}
- r = 0.953463
输入与输出示例
#### 示例 1
> 输入:
> X = {43, 21, 25, 42, 57, 59}
> Y = {99, 65, 79, 75, 87, 81}
>
> 输出:
> r = 0.529809
#### 示例 2
> 输入:
> X = {15, 18, 21, 24, 27}
> Y = {25, 25, 27, 31, 32}
>
> 输出:
> r = 0.953463
Python 中计算相关系数的程序
让我们来看看如何在几种流行的编程语言中实现这个算法。
C++
CODEBLOCK_761b2774
Java
“
// JAVA 程序:寻找相关系数
import java.math.*;
class GFG {
// 返回相关系数的函数。
static float correlationCoefficient(int X[],
int Y[], int n)
{
int sumX = 0, sumY = 0, sum_XY = 0;
int squareSumX = 0, squareSumY = 0;
for (int i = 0; i < n; i++)
{
// 数组 X 的元素之和。
sumX = sumX + X[i];
// 数组 Y 的元素之和。
sumY = sumY + Y[i];
// X[i] * Y[i] 之和。
sumXY = sumXY + X[i] * Y[i];
// 数组元素的平方和。
squareSumX = squareSumX + X[i] * X[i];
squareSumY = squareSumY + Y[i] * Y[i];
}
// 使用公式计算相关
// 系数。
float corr = (float)(n sumXY – sumX sum_Y)/
(float)(Math.sqrt((n * squareSum_X –
sumX sumX) (n * squareSum_Y –
sumY * sumY)));
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;
// 调用 correlationCoefficient 函数。
System.out.printf("%6f",