📜  统计-相关系数(1)

📅  最后修改于: 2023-12-03 15:11:41.482000             🧑  作者: Mango

统计-相关系数

简介

相关系数是衡量两个变量之间线性关系紧密程度的一种统计方法,常用于数据分析、经济学、生物学等领域。相关系数的取值范围从-1到1,取值越接近于±1则表示两个变量的线性关系越密切。

在统计学中,常用的相关系数是皮尔逊相关系数和斯皮尔曼相关系数。皮尔逊相关系数用于描述两个变量之间的线性关系,斯皮尔曼相关系数则适用于非线性关系情况下的统计分析。

算法描述
皮尔逊相关系数

皮尔逊相关系数是用于测量两个变量之间相似程度的一种指标。假设有两个变量$X$和$Y$,分别具有$n$个观测值,则皮尔逊相关系数$r_{XY}$的计算公式如下:

$$ r_{XY} = \frac{\sum\limits_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum\limits_{i=1}^{n}(x_i-\bar{x})^2\sum\limits_{i=1}^{n}(y_i-\bar{y})^2}} $$

其中,$\bar{x}$表示变量$X$的平均值,$\bar{y}$表示变量$Y$的平均值。

斯皮尔曼相关系数

斯皮尔曼相关系数是一种非参数统计方法,适用于测量两个变量之间的等级关系。假设有两个变量$X$和$Y$,分别具有$n$个观测值,则斯皮尔曼相关系数$r_{s}$的计算公式如下:

$$ r_s = 1 - \frac{6\sum\limits_{i=1}^{n}(d_i)^2}{n(n^2-1)} $$

其中,$d_i$表示变量$X$与$Y$在第$i$个观测值上的排名差,$n$表示总样本数量。

代码示例
Python
import numpy as np

def pearson_corr(x, y):
    """
    计算两个向量的皮尔逊相关系数
    """
    n = len(x)
    mean_x = np.mean(x)
    mean_y = np.mean(y)
    cov = np.sum((x - mean_x) * (y - mean_y))
    std_x = np.sqrt(np.sum((x - mean_x) ** 2))
    std_y = np.sqrt(np.sum((y - mean_y) ** 2))
    return cov / (std_x * std_y)

def spearman_corr(x, y):
    """
    计算两个向量的斯皮尔曼相关系数
    """
    x_rank = np.argsort(x).argsort()
    y_rank = np.argsort(y).argsort()
    return pearson_corr(x_rank, y_rank)

x = np.array([1, 2, 3, 4, 5])
y = np.array([5, 4, 3, 2, 1])

print("Pearson correlation coefficient:", pearson_corr(x, y))
print("Spearman correlation coefficient:", spearman_corr(x, y))
R
x <- c(1, 2, 3, 4, 5)
y <- c(5, 4, 3, 2, 1)

cor(x, y, method = "pearson")
cor(x, y, method = "spearman")