0
点赞
收藏
分享

微信扫一扫

肯德尔系数及Python实现

1. 定义:

肯德尔相关系数可以测量两个随机序列的相关性,肯德尔相关系数被定义为:
τ = 2 n ( n − 1 ) ∑ i < j σ ( x i − x j ) σ ( y i − y j ) \tau = \frac{2}{{n(n - 1)}}\sum\limits_{i < j} {\sigma ({x_i} - {x_j})\sigma ({y_i} - {y_j})} τ=n(n1)2i<jσ(xixj)σ(yiyj)
其中,
σ ( x ) = { 1 , x > 0 0 , x = 0 − 1 , x < 0 \sigma (x) = \left\{ \begin{array}{l}1,{\rm{x > 0}}\\0,{\rm{x = 0}}\\ - 1,{\rm{x < 0}}\end{array} \right. σ(x)=1,x>00,x=01,x<0

x,y 分别表示两个序列,肯德尔相关系数τ 的值域为-1 到 1 之间。当 τ=1时,表示两个序列具有完全一致的相关性当 τ=-1 时,表示两个序列拥有完全相反的相关性;当 τ=0 时,表示这对序列组是不相关的,而 τ≠0 则可以认为两个序列具有一定的相关性

2. python实现

from scipy.stats import kendalltau
import numpy as np

def sckendall(a, b):
    '''
    会与scipy源码中计算的有一定差距
    '''
    L = len(a)
    count = 0
    for i in range(L - 1):
        for j in range(i + 1, L):
            count = count + np.sign(a[i] - a[j]) * np.sign(b[i] - b[j])
    kendall_tau = count / (L * (L - 1) / 2)

    return kendall_tau

if __name__ == '__main__':

    a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    b = [3, 7, 2, 1, 4, 8, 6, 10, 5, 9]

    kendall_tau_2, p_value = kendalltau(a, b)
    kendall_tau = sckendall(a, b)
    print(kendall_tau)
    print(kendall_tau_2)
举报

相关推荐

0 条评论