📅  最后修改于: 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$表示总样本数量。
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))
x <- c(1, 2, 3, 4, 5)
y <- c(5, 4, 3, 2, 1)
cor(x, y, method = "pearson")
cor(x, y, method = "spearman")