【时间序列分析】皮尔森相关系数理论基础及python代码实现

皮尔森相关系数(Pearson Correlation Coefficient),又称 皮尔逊相关系数,是衡量两个变量之间线性相关程度的一种统计量。它的值介于 -1 和 1 之间,表示两个变量之间的线性关系强度和方向。

1. 定义

皮尔森相关系数 r r r 的数学定义如下:
r = ∑ ( X i − X ˉ ) ( Y i − Y ˉ ) ∑ ( X i − X ˉ ) 2 ∑ ( Y i − Y ˉ ) 2 r = \frac{\sum (X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum (X_i - \bar{X})^2 \sum (Y_i - \bar{Y})^2}} r=(XiXˉ)2(YiYˉ)2 (XiXˉ)(YiYˉ)
其中:

  • X i X_i Xi Y i Y_i Yi 是数据集中的第 i i i 个数据点
  • X ˉ \bar{X} Xˉ Y ˉ \bar{Y} Yˉ 分别是变量 X X X Y Y Y 的样本均值
  • 分子部分是 X X X Y Y Y 之间的协方差
  • 分母部分是 X X X Y Y Y 的标准差的乘积

对于协方差理解可以参考:https://blog.csdn.net/qq_42761751/article/details/144507606?sharetype=blogdetail&sharerId=144507606&sharerefer=PC&sharesource=qq_42761751&spm=1011.2480.3001.8118

2. 物理意义

皮尔森相关系数的物理意义是衡量两个变量之间的线性关系强度。它的取值范围为 [ − 1 , 1 ] [−1,1] [1,1],具体含义如下:

  • r = 1 r=1 r=1 : 完全正线性相关,表示两个变量之间存在完美的正相关关系,即当一个变量增加时,另一个变量也按固定比例增加
  • r = − 1 r=-1 r=1 :完全负线性相关,表示两个变量之间存在完美的负相关关系,即当一个变量增加时,另一个变量按固定比例减少
  • r = 0 r=0 r=0 : 没有线性关系,两个变量之间没有线性依赖关系,但这不意味着它们完全没有关系,可能存在非线性关系
  • 0 < r < 1 0<r<1 0<r<1 : 正相关关系,随着一个变量的增加,另一个变量也倾向于增加, r r r 越接近 1,线性关系越强
  • − 1 < r < 0 -1<r<0 1<r<0 : 负相关关系,随着一个变量的增加,另一个变量倾向于减少, r r r 越接近 -1,负线性关系越强

3. 局限性

尽管皮尔森相关系数非常有用,但它也存在一些局限性:

  • 只考虑线性关系: 皮尔森相关系数只能捕捉变量之间的线性关系,无法有效处理非线性关系。若两个变量之间存在非线性关系,皮尔森相关系数可能会低估它们之间的关联程度,甚至得出接近于 0 的值,这时需要使用其他方法。
    例如: 考虑一个二次关系 y = x 2 y=x^2 y=x2 即使数据点之间的关系是非常紧密的,但皮尔森相关系数可能接近 0,因为该关系不是线性的。

  • 对异常值敏感: 皮尔森相关系数对异常值非常敏感。如果数据集中的某个或某些点与其他数据点相差过大,它们可能会显著影响相关系数,导致误导性的结论。因此,在使用皮尔森相关系数时,需要特别注意数据中的异常值,最好先进行数据清洗和异常值检测。

  • 假设正态分布: 皮尔森相关系数假设数据呈正态分布。如果数据严重偏离正态分布,相关系数的计算和解释可能不可靠。

4. 皮尔森相关系数的实际应用

皮尔森相关系数广泛应用于统计分析和数据科学中,常见的应用场景包括:

  • 金融分析: 评估股票、债券或其他资产之间的相关性。例如,通过计算不同股票之间的皮尔森相关系数,可以帮助投资者构建多样化的投资组合,以降低风险。

  • 健康研究: 分析不同生理指标之间的关系。例如,研究体重和血压之间的相关性,或者分析不同药物治疗效果的相关性。

  • 社会科学: 研究教育水平和收入之间的关系,或者考察人们的生活满意度与其他社会因素之间的关联。

  • 机器学习与数据挖掘: 皮尔森相关系数可用于特征选择,评估各个特征与目标变量之间的线性相关性,从而筛选出最相关的特征,提高模型性能。

5. python代码实现

5.1 numpy.corrcoef() 计算皮尔森相关系数

import numpy as np

X = np.array([1,2,3,4,5])
Y = np.array([5,4,3,2,1])

# 皮尔森相关系数在[0,1]位置
r = np.corrcoef(X,Y)[0,1]
print(r)

5.2 自己实现皮尔森相关系数

import numpy as np

X = np.array([0,1,0,3])
Y = np.array([0,1,1,1])

# 计算均值
mean_X = np.mean(X)
mean_Y = np.mean(Y)

# 计算协方差的分子
covariance = np.sum((X-mean_X)*(Y-mean_Y)) / len(X)

# 计算标准差
std_X = np.std(X)
std_Y = np.std(Y)

# 计算皮尔森相关系数
r = covariance / (std_X*std_Y)
print(r)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值