Pearson相关系数及其python和MATLAB代码实现

什么是相关系数?

相关系数是衡量两个变量之间线性关系强度的指标。通常,相关系数值的范围为 -1 到 1:

  • 1 = 强正线性关系。这意味着,对于一个变量中的每一次正增长,另一个变量中就会出现成比例的正增长。例如,腰带尺寸的增加几乎与腰围尺寸完全相关。
  • -1 = 强负线性关系。换句话说,对于一个变量的每一次正增长,另一个变量就会出现成比例的负减少。例如,车辆油箱中的油量几乎与速度完全相关。
  • 0 = 变量之间没有线性关系。
    显示正负关系的图表

相关系数的绝对值表示关系的强度。绝对值越大,表示关系越强。例如,-.75|= .75,则比 .65 具有更强的关系。“有意义”的相关性取决于学科的不同 。例如,在物理学中,相关系数应该在 -0.95 到 0.95 之间,而在社会科学中,-0.6 到 0.6 之间的结果是有意义的。

相关系数用于衡量两个变量之间的关系强度。相关系数有几种类型,但最受欢迎的是 Pearson 相关系数。(也称为 Pearson R)是线性回归中常用的相关系数。
Pearson 相关系数(也称为 Pearson 的 r)和 Spearman 秩相关是使用最广泛的相关系数 。但是,还有许多其他因素,包括类内相关性和 Moran I。如果您的数据看起来大致像一条直线,则可以使用 Pearson 的 r。如果它是随机的,或者遵循任何其他形状(U 形、S 形等),则不应计算相关系数。

Pearson 相关系数

什么是 Pearson 相关?
数据集之间的相关性是衡量它们相关性的指标。统计中最常见的相关性度量是 Pearson Correlation。全称是 Pearson Product Moment Correlation (PPMC)。它显示了两组数据之间的线性关系

Pearson 相关性的潜在问题

PPMC 无法区分因变量和自变量。例如,如果您试图找到高热量饮食与糖尿病之间的相关性,您可能会发现0.8 的高相关性。但是,您也可以在切换变量的情况下获得相同的结果。换句话说,你可以说糖尿病会导致高热量饮食。这显然没有意义。因此,作为研究人员,您必须了解您插入的数据。此外,PPMC 不会为您提供有关线路斜率的任何信息;它只告诉你是否存在关系。

现实生活中的例子:皮尔逊相关用于数以千计的现实生活情况。例如,中国的科学家想知道杂草稻种群的遗传差异是否存在关系。目标是找出水稻的进化潜力。分析了两组之间的 Pearson 相关性。它显示杂草稻群的 Pearson 乘积矩正相关在 0.783 和 0.895 之间。这个数字相当高,这表明存在相当强的关系。

如何求 Pearson 的相关系数

Pearson的计算公式

手工

示例问题:从下表中查找相关系数的值:

序号年龄 x葡萄糖水平 y
12165
24275
35981

第 1 步:制作图表。 使用给定的数据,并再添加三列: x y xy xy x 2 x^2 x2 y 2 y^2 y2.

序号年龄 x葡萄糖水平 y x y xy xy x 2 x^2 x2 y 2 y^2 y2
12165
24275
35981

第 2 步:将 x 和 y 相乘以填充 xy 列。例如,第 1 行将是 43 × 99 = 4,257。

序号年龄 x葡萄糖水平 y x y xy xy x 2 x^2 x2 y 2 y^2 y2
121651365
242753150
359814779

步骤3: 取 x 列中数字的平方,并将结果放在 x 中2列。

序号年龄 x葡萄糖水平 y x y xy xy x 2 x^2 x2 y 2 y^2 y2
121651365441
2427531501764
3598147793481

步骤4: 取 y 列中数字的平方,并将结果放在 y 中2列。

序号年龄 x葡萄糖水平 y x y xy xy x 2 x^2 x2 y 2 y^2 y2
1216513654414225
24275315017645625
35981477934816561

第 5 步:将列中的所有数字相加,并将结果放在列的底部。希腊字母 sigma (Σ) 是 “sum of” 或 summation 的缩写。

序号年龄 x葡萄糖水平 y x y xy xy x 2 x^2 x2 y 2 y^2 y2
1216513654414225
24275315017645625
35981477934816561
Σ247486204851140940022

第 6 步:使用以下相关系数公式。
Pearsons 相关系数答案是:2868 / 5413.27 = 0.529809 从我们的表格中:

  • σ x = 247 σx = 247 σx=247
  • σ y = 486 σy = 486 σy=486
  • σ x y = 20 , 485 σxy = 20,485 σxy=20,485
  • σ x 2 = 11 , 409 σx^2= 11,409 σx2=11,409
  • Σ y 2 = 40 , 022 Σy^2= 40,022 Σy2=40,022
  • n 是样本量,在我们的例子中 n = 6

相关系数 = 6(20,485) – (247 × 486) / [√[[6(11,409) – (2472)] × [6(40,022) – 4862]]] = 0.5298
相关系数的范围是从 -1 到 1。我们的结果是 0.5298 或 52.98%,这意味着变量具有中等正相关。

Python 代码

在 Python 中,可以使用 numpyscipy 库来计算 Pearson 相关系数。以下是两种方法的示例代码:

使用 numpy
import numpy as np

# 示例数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])

# 计算 Pearson 相关系数
correlation_matrix = np.corrcoef(x, y)
pearson_corr = correlation_matrix[0, 1]

print(f"Pearson Correlation Coefficient: {pearson_corr}")
使用 scipy
from scipy.stats import pearsonr

# 示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 计算 Pearson 相关系数
pearson_corr, _ = pearsonr(x, y)

print(f"Pearson Correlation Coefficient: {pearson_corr}")

MATLAB 代码

在 MATLAB 中,可以使用 corrcoef 函数来计算 Pearson 相关系数。以下是示例代码:

% 示例数据
x = [1, 2, 3, 4, 5];
y = [2, 4, 6, 8, 10];

% 计算 Pearson 相关系数
correlation_matrix = corrcoef(x, y);
pearson_corr = correlation_matrix(1, 2);

disp(['Pearson Correlation Coefficient: ', num2str(pearson_corr)])

解释

  1. Python 代码

    • 使用 numpynp.corrcoef 函数返回一个相关系数矩阵,对角线上的值是 1(表示变量与自身的相关性),非对角线上的值是两个变量之间的 Pearson 相关系数。
    • 使用 scipypearsonr 函数返回一个元组,第一个元素是 Pearson 相关系数,第二个元素是 p 值(用于检验相关性的显著性)。
  2. MATLAB 代码

    • corrcoef 函数返回一个相关系数矩阵,对角线上的值是 1,非对角线上的值是两个变量之间的 Pearson 相关系数。

示例输出

对于给定的示例数据 [1, 2, 3, 4, 5][2, 4, 6, 8, 10],Pearson 相关系数应该是 1,因为这两个变量之间存在完全的线性关系。
参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值