【时间序列分析】斯皮尔曼(Spearman)相关系数理论基础及python代码实现
文章目录
- 1. 斯皮尔曼相关系数
- 1.1 公式定义
- 1.2 计算过程
- 1.3 计算示例
- 1.4 注意事项(当有重复值时)
- 2. 优缺点
- 2.1 优点
- 2.2 缺点
- 3. 适用场景
- 4. Python代码实现
- 4.1 调用scipy库
- 5 思考
- 5.1 什么是单调关系?与线性关系的区别是什么?
- 5.2 斯皮尔曼相关系数如何度量单调关系?
1. 斯皮尔曼相关系数
1.1 公式定义
什么是秩相关系数?
秩相关系数(Coefficient of Rank Correlation),又称等级相关系数,反映两个随机变量变化趋势的方向和强度之间的关系。它通过将两个随机变量的样本值按大小顺序排列位次,使用这些位次代替实际数据来计算得出。秩相关系数用于衡量变量间的等级相关程度,常用的等级相关分析方法包括Spearman相关系数和Kendall秩相关系数等。
斯皮尔曼相关系数(Spearman’s Rank Correlation Coefficient)是通过比较两个变量的排名来计算相关性的,而不是直接使用原始值。它的核心思想是,两个变量如果具有单调关系(即随着一个变量的增加,另一个变量也按某种规律增加或减少),那么它们的排名应该是相关的。
斯皮尔曼相关系数的计算公式为:
R s = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) R_s = 1 - \frac{6 \sum d_i^2}{n(n^2 - 1)} Rs=1−n(n2−1)6∑di2
其中:
- R s : R_s: Rs: 是斯皮尔曼相关系数
- d i = R ( X i ) − R ( Y i ) d_i=R(X_i)-R(Y_i) di=R(Xi)−R(Yi) 是第 i i i 个数据点在 X X X 和 Y Y Y 两个变量的排名差异
- n n n 是数据点的数量
- R ( X i ) R(X_i) R(Xi) 和 R ( Y i ) R(Y_i) R(Yi) 分别是 X X X 和 Y Y Y 在第 i i i 个数据点的排名
取值范围 [ 0 , 1 ] [0,1] [0,1]:
- R s = 1 R_s =1 Rs=1 表示完美的正单调关系,即两个变量的排序完全一致。也就是说,随着一个变量的增大,另一个变量也始终按相同的顺序增大
- R s = − 1 R_s =-1 Rs=−1 表示完美的负单调关系,即两个变量的排序完全相反。也就是说,随着一个变量的增大,另一个变量始终按相反的顺序减小
- R s = 0 R_s =0 Rs=0 表示没有单调关系,即两个变量的排名没有任何一致性或依赖性,变化趋势完全独立
- 0 < R s < 1 0<R_s<1 0<Rs<1 表示正单调关系,即随着一个变量的增加,另一个变量也倾向于增加,但不一定完全一致
- − 1 < R s < 0 -1<R_s<0 −1<Rs<0 表示负单调关系,即随着一个变量的增加,另一个变量倾向于减少,但不一定完全一致
1.2 计算过程
数据排序:
为每个变量分配排名,从最小值 1 开始计算排名差异:
计算每个数据点在两个变量中的排名差 d i = R ( X i ) − R ( Y i ) d_i=R(X_i)-R(Y_i) di=R(Xi)−R(Yi)平方差异:
计算每个排名差异的平方 d i 2 d_i^2 di2求和:
计算所有 d i 2 d_i^2 di2 的和 ∑ d i 2 \sum d_i^2 ∑di2代入公式:
将求得的 ∑ d i 2 \sum d_i^2 ∑di2 和数据点的数量 n n n 代入斯皮尔曼公式中,得到相关系数 R s R_s Rs
1.3 计算示例
假设我们现在有两个变量:
- X = [ 86 , 82 , 94 , 79 , 88 ] X=[86, 82, 94, 79, 88] X=[86,82,94,79,88]
- Y = [ 88 , 76 , 92 , 80 , 86 ] Y=[88, 76, 92, 80, 86] Y=[88,76,92,80,86]
按照从小到大排序得到 R ( X i ) R(X_i) R(Xi) 和 R ( Y i ) R(Y_i) R(Yi):
- R ( X i ) = [ 3 , 2 , 5 , 1 , 4 ] R(X_i)=[3,2,5,1,4] R(Xi)=[3,2,5,1,4]
- R ( Y i ) = [ 4 , 1 , 5 , 2 , 3 ] R(Y_i)=[4,1,5,2,3] R(Yi)=[4,1,5,2,3]
计算 d i 2 d_i^2 di2 有:
- d i 2 = [ 1 , 1 , 0 , 1 , 1 ] d_i^2 =[1,1,0,1,1] di2=[1,1,0,1,1]
计算斯皮尔曼相关系数 R s R_s Rs:
- R s = 1 − 6 ∗ 4 5 ∗ ( 5 2 − 1 ) = 0.8 R_s=1-\frac{6*4}{5*(5^2-1)} =0.8 Rs=1−5∗(52−1)6∗4=0.8
1.4 注意事项(当有重复值时)
注意:当有两个或多个相同值时排名是通过分配给重复值的平均排名来处理的。举个例子:
当 X = [ 79 , 82 , 82 , 86 , 88 , 94 ] X=[79,82,82,86,88,94] X=[79,82,82,86,88,94]
接着为这些值分配排名:
- 79 排名 1
- 82 和 82 是相同的值,排名为 2 和 3,这两个值的排名是 2.5,因为它们共享第 2 和第 3 位,平均排名为 ( 2 + 3 ) / 2 = 2.5 (2+3)/2=2.5 (2+3)/2=2.5
- 86 排名 4
- 88 排名 5
- 94 排名 6
综上所述:
R ( X i ) = [ 1 , 2.5 , 2.5 , 4 , 5 , 6 ] R(X_i) = [1, 2.5, 2.5 , 4,5 , 6] R(Xi)=[1,2.5,2.5,4,5,6]
2. 优缺点
2.1 优点
非线性关系:
斯皮尔曼相关系数能够有效捕捉变量之间的单调关系,无论是线性还是非线性对异常值不敏感:
与皮尔森相关系数不同,斯皮尔曼相关系数对异常值不太敏感,因为它使用的是排名而不是原始数据值适用范围广:
适用于定序数据或顺序数据(如问卷调查中的满意度等级),并且不要求数据服从正态分布
2.2 缺点
只考虑单调关系:
斯皮尔曼相关系数只能捕捉到单调关系,对于某些不满足单调性的数据,可能不适用可能丢失信息:
在排名过程中,数据的具体数值被转换为排名,这可能导致丢失部分信息,尤其是当数据变化不大时
3. 适用场景
非线性关系分析:
当你怀疑两个变量之间有单调关系,但不一定是线性关系时,斯皮尔曼相关系数是一个很好的选择顺序数据:
适用于顺序数据(如等级评分),例如对学生成绩的排名,调查问卷的满意度评分等对异常值的容忍性:
如果数据集包含一些异常值,且这些异常值会影响到皮尔森相关系数的计算,斯皮尔曼相关系数是一个更稳健的选择
4. Python代码实现
4.1 调用scipy库
import numpy as np
from scipy.stats import spearmanrX = [86,82,94,79,88]
Y = [88,76,92,80,86]# r是斯皮尔曼系数, p 值是用来判断结果是否具有统计显著性的一个指标
r, p = spearmanr(X,Y)
print(r)
print(p)
- r r r :斯皮尔曼系数
- p p p : p p p 值是用来判断结果是否具有统计显著性的一个指标,表示假设检验中观察到的结果或更极端的结果在零假设成立下出现的概率。在皮尔森、斯皮尔曼等相关系数的情况下,p 值用于检验相关性是否显著。
- 如果 p p p 值较小(通常小于设定的显著性水平,如 0.05),说明结果具有统计显著性,即我们有足够的证据拒绝零假设(即假设两个变量之间没有关系)
- 如果 p p p 值较大(大于显著性水平),则说明结果不显著,即没有足够的证据拒绝零假设,我们无法确认这两个变量之间是否存在显著的线性或单调关系
5 思考
5.1 什么是单调关系?与线性关系的区别是什么?
单调关系(Monotonic Relationship) 是指随着一个变量的增加或减少,另一个变量始终按照同样的方向增加或减少,不一定是线性关系。单调关系可以是 单调递增(monotonically increasing) 或 单调递减(monotonically decreasing),而不要求数据的变化遵循直线(线性)规律。
单调关系的定义:
- 单调递增 : 如果 X X X 增加,那么 Y Y Y 也要增加;即 X 1 < X 2 X_1 < X_2 X1<X2 时,必有 Y 1 < = Y 2 Y_1 <= Y_2 Y1<=Y2 它不一定是直线关系,只要求随着 X X X 增加, Y Y Y 也要增加。
- 单调递减 : 如果 X X X 增加,那么 Y Y Y 也要减少;即 X 1 < X 2 X_1 < X_2 X1<X2 时,必有 Y 1 > = Y 2 Y_1 >= Y_2 Y1>=Y2
- 斯皮尔曼相关系数 专门用来度量两个变量之间的单调关系。它假设两个变量之间的关系是单调的,即随着一个变量的变化,另一个变量的排序变化(增加或减少)是保持一致的。然而,单调关系不要求这种关系是线性的。例如,即使关系是曲线(非线性)的,只要随着 X X X 增加, Y Y Y 始终保持增加或减小,斯皮尔曼相关系数仍然能捕捉到这种关系。
单调关系与线性关系的区别:
- 线性关系: 要求两个变量之间的关系是直线性的,即可以用一个直线来描述它们的关系。比如 Y = a X + b Y=aX+b Y=aX+b
- 单调关系: 不仅仅局限于直线关系,它可以是非线性的,只要随着一个变量的变化,另一个变量总是按照同样的方向变化
举个例子:
- 单调递增关系: Y = X 2 Y=X^2 Y=X2 在 X > = 0 X>=0 X>=0 时是单调递增的,尽管他是非线性的,但是随着 X X X 的增大, Y Y Y 值始终增大
- 单调递减关系:例如 Y = − l o g ( X ) Y=-log(X) Y=−log(X),是单调递减的,但同样不是线性的
5.2 斯皮尔曼相关系数如何度量单调关系?
斯皮尔曼相关系数通过计算两个变量的排名差异来衡量它们之间的单调关系。如果两个变量的排名总是同步变化(即排名顺序保持一致),则它们的斯皮尔曼相关系数接近 1 或 -1,表示强单调关系。
例如:
- 如果随着 X X X 增大, Y Y Y 的值始终增加或始终减少,那么它们之间的斯皮尔曼相关系数接近 1 或 -1
- 如果随着 X X X 增大,并没有导致 Y Y Y 的值单调增减(即 X X X 和 Y Y Y 变化方向不一致),那么斯皮尔曼相关系数接近 0