【时间序列分析】肯德尔(Kendall)相关系数基础理论及python代码实现

1. 肯德尔(Kendall)相关系数定义

肯德尔(Kendall)相关系数,又称肯德尔秩相关系数,它是一种秩相关系数。Kendall秩相关系数可以通过比较数据对之间的排序关系来计算。假设有两个变量 X X X Y Y Y,每个变量都有 n n n 个观测值。对这些观测值进行排序,Kendall秩相关系数的计算基于每一对观测值之间的“协同”或“不协同”关系。

2. 什么是秩相关系数

秩相关系数(Coefficient of Rank Correlation),又称等级相关系数,是将两要素的样本值按数据的大小顺序排列位次,以各要素样本值的位次代替实际数据而求得的一种统计量。它是反映等级相关程度的统计分析指标,常用的等级相关分析方法有Spearman相关系数和Kendall秩相关系数等。

3. 计算方法

Kendall秩相关系数可以通过比较数据对之间的排序关系来计算。假设有两个变量 X X X Y Y Y ,每个变量有 n n n 个观测值,对这些观测值的排序中,Kendall秩相关系数的计算基于每一对观测值之间的“协同”或“不协同”关系。

1. 数据对的比较: 对于每对观测值 ( X i , Y i ) (X_i, Y_i) (Xi,Yi) ( X j , Y j ) (X_j, Y_j) (Xj,Yj)

  • 如果 X i > X j X_i > X_j Xi>Xj Y i > Y j Y_i > Y_j Yi>Yj ,则该对被称为 一致对
  • 如果 X i < X j X_i < X_j Xi<Xj Y i < Y j Y_i < Y_j Yi<Yj ,则该对被称为 一致对
  • 如果 X i > X j X_i > X_j Xi>Xj Y i < Y j Y_i < Y_j Yi<Yj ,则该对被称为 不一致对
  • 如果 X i < X j X_i < X_j Xi<Xj Y i > Y j Y_i > Y_j Yi>Yj ,则该对被称为 不一致对
  • 如果 X i = X j X_i = X_j Xi=Xj Y i = Y j Y_i =Y_j Yi=Yj,则该对被称为 完全平局对
  • 如果 X i = X j X_i = X_j Xi=Xj Y i ≠ Y j Y_i \neq Y_j Yi=Yj,则该对被称为 仅在x中的平局对
  • 如果 X i ≠ X j X_i \neq X_j Xi=Xj Y i = Y j Y_i = Y_j Yi=Yj,则该对被称为 仅在y中的平局对

2.计算公式:
τ = C − D n ( n − 1 ) 2 \tau = \frac {C-D}{\frac {n(n-1)} {2}} τ=2n(n1)CD

其中:

  • C C C 是一致对的数量
  • D D D 是不一致对的数量
  • n n n 是观测值的数量
  • τ \tau τ 的取值范围为 [ − 1 , 1 ] [-1,1] [1,1]

解释:

  • τ = 1 \tau =1 τ=1 时,表示完全正相关,意味着所有的观测对都是一致对。即在一对观测值 ( X i , Y i ) (X_i, Y_i) (Xi,Yi) ( X j , Y j ) (X_j, Y_j) (Xj,Yj) 中,如果 X i > X j X_i > X_j Xi>Xj ,那么 Y i > Y j Y_i > Y_j Yi>Yj 始终成立,或者如果 X i < X j X_i < X_j Xi<Xj 那么 Y i < Y j Y_i < Y_j Yi<Yj 也始终成立
  • τ = − 1 \tau =-1 τ=1 时,表示完全负相关,意味着所有的观测对都是不一致对。即在一对观测值 ( X i , Y i ) (X_i, Y_i) (Xi,Yi) ( X j , Y j ) (X_j, Y_j) (Xj,Yj) 中,如果 X i > X j X_i > X_j Xi>Xj ,那么 Y i < Y j Y_i < Y_j Yi<Yj 必然成立,或者如果 X i < X j X_i < X_j Xi<Xj 那么 Y i > Y j Y_i > Y_j Yi>Yj 也必然成立
  • τ = 0 \tau =0 τ=0 时,表示没有相关性,意味着一致对和不一致对的数量相等,或者两者的关系没有显著的一致性。换句话说,两个变量之间没有线性相关性或排序上的一致性
  • τ \tau τ 接近 +1 或者 -1 时,表示两个变量之间的排序一致性非常强。 τ \tau τ 接近 +1 时,表示正相关较强, τ \tau τ 接近 -1 时,表示负相关较强
  • τ \tau τ 的值介于0与 ±1 之间时,表示两个变量之间有一定程度的相关性,但不完全。数值越接近0,相关性越弱,接近±1时,相关性越强

4. 示例及代码实现

4.1 示例

假设我们现在有两个变量:

  • X = [ 1 , 2 , 3 , 4 ] X=[1,2,3,4] X=[1,2,3,4]
  • Y = [ 2 , 3 , 1 , 4 ] Y=[2,3,1,4] Y=[2,3,1,4]

比较每一对观测值的关系:

  • ( X 1 , X 2 ) (X_1, X_2) (X1,X2) ( Y 1 , Y 2 ) (Y_1, Y_2) (Y1,Y2) 一致对
  • ( X 1 , X 3 ) (X_1, X_3) (X1,X3) ( Y 1 , Y 3 ) (Y_1, Y_3) (Y1,Y3) 不一致对
  • ( X 1 , X 4 ) (X_1, X_4) (X1,X4) ( Y 1 , Y 4 ) (Y_1, Y_4) (Y1,Y4) 一致对
  • ( X 2 , X 3 ) (X_2, X_3) (X2,X3) ( Y 2 , Y 3 ) (Y_2, Y_3) (Y2,Y3) 不一致对
  • ( X 2 , X 4 ) (X_2, X_4) (X2,X4) ( Y 2 , Y 4 ) (Y_2, Y_4) (Y2,Y4) 一致对
  • ( X 3 , X 4 ) (X_3, X_4) (X3,X4) ( Y 3 , Y 4 ) (Y_3, Y_4) (Y3,Y4) 一致对

因此:

  • 一致对数量 C = 4 C=4 C=4
  • 不一致对数量 D = 2 D=2 D=2

代如公式计算得:
τ = C − D n ( n − 1 ) 2 = 4 − 2 0.5 ∗ 4 ∗ ( 4 − 1 ) = 1 3 = 0.333..... \tau = \frac {C-D}{\frac {n(n-1)} {2}} = \frac {4-2}{0.5 * 4 *(4-1)} = \frac {1} {3} = 0.333..... τ=2n(n1)CD=0.54(41)42=31=0.333.....

4.2 python代码实现

在python中通过调用scipy库实现肯德尔(Kendall)相关系数计算:

import numpy as np
from scipy.stats import kendalltau

X=[1,2,3,4]
Y=[2,3,1,4]

r, p_value = kendalltau(X,Y)
print(r)
print(p_value)

5. 优缺点

优点:

  • 不受异常值影响:Kendall秩相关系数是基于排序的,通常比皮尔逊相关系数更不容易受到异常值(outliers)的影响
  • 适用于非线性关系:Kendall秩相关系数可以有效处理非线性关系,而不仅限于线性关系。它能更好地反映变量间的顺序一致性

缺点:

  • 计算复杂度高:Kendall秩相关系数需要计算每对观测值的关系,计算量较大,尤其在样本量较大时,计算时间复杂度为 O ( n 2 ) O(n^2) O(n2)

6. 适用范围

  • 非线性关系分析:当两个变量之间存在非线性关系时,Kendall秩相关系数能够较好地反映其相关性
  • 小样本数据:Kendall秩相关系数比皮尔逊相关系数对小样本数据更加稳定,尤其在数据分布不满足正态假设时,Kendall方法更具优势
  • 异常值影响较大时:Kendall秩相关系数基于排序,不受极端值的影响,适合处理存在异常值的情况

7. 与斯皮尔曼相关系数比较

相同点:

  • 都是秩相关系数: Kendall秩相关系数和斯皮尔曼秩相关系数都属于秩相关系数,旨在衡量两个变量之间的相关性。它们通过对数据进行排序,并基于排序结果来评估变量之间的相关程度。
  • 不依赖数据分布: 与皮尔逊相关系数(Pearson correlation coefficient)不同,Kendall和斯皮尔曼系数不依赖于数据的正态分布,因此可以应用于非正态分布的数据或具有非线性关系的数据。
  • 适用于非线性关系: Kendall和斯皮尔曼秩相关系数都可以有效处理非线性关系,因为它们主要考虑的是数据的排序,而非具体数值之间的差异。
  • 适应异常值: 这两种方法都不容易受到数据中的异常值影响,因为它们是基于排序计算的,而非依赖原始数据点的大小,因此比皮尔逊相关系数更为稳健。

不同点:

  • 计算复杂度 : 肯德尔(Kendall)相关系数的计算更为复杂
  • 适用场景的差异:对于小样本数据,Kendall的 τ \tau τ 比斯皮尔曼的 ρ \rho ρ 更稳定。因为Kendall秩相关系数考虑了每一对数据之间的秩比较,能够更细致地反映变量之间的关系。斯皮尔曼相关系数更适合样本量较大的数据集,并且计算上更为简便。因此在样本量较大时,斯皮尔曼相关系数通常是一个较为常用的选择。

8. 思考

8.1 当变量中有重复值时肯德尔(Kendall)相关系数是如何计算的?

我们先来看一个示例:

import numpy as np
from scipy.stats import kendalltau

X=[1,2,3]
Y=[2,3,3]

rho, p_value = kendalltau(X,Y)
print(rho)
print(p_value)

代码输出:

0.816496580927726
0.22067136191984693

即肯德尔(Kendall)相关系数为 :0.816496580927726,与我们通过上述公式计算出来的结果(0.666…)不一致,这是为什么呢?
通过研究 kendalltau 源码 我们发现,肯德尔(Kendall)相关系数有两种计算形式 T a u _ b Tau\_b Tau_b T a u _ c Tau\_c Tau_c,默认使用 T a u _ b Tau\_b Tau_b

τ b = P − Q ( P + Q + T ) ∗ ( P + Q + U ) \tau_b = \frac {P-Q} {\sqrt {(P+Q+T) * (P+Q+U)}} τb=(P+Q+T)(P+Q+U) PQ

  • P P P 是一致对的数量
  • Q Q Q 是不一致对的数量
  • T T T 是仅在 x x x 中存在的平局对数量
  • U U U 是仅在 y y y 中存在的平局对数量

如果在 x 和 y 中同一对数据存在平局(即两个值相同),则该平局不计入 T T T U U U

τ c = 2 ( P − Q ) n 2 ( m − 1 ) m \tau_c = \frac {2(P-Q)} {n^2\frac {(m-1)}{m}} τc=n2m(m1)2(PQ)

  • n 是样本的总数
  • m 是 x 或 y 中唯一值的数量(取较小者)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值