肯德尔相关性分析(Kendall’s Tau)
肯德尔相关性分析是一种用于衡量两个变量之间的排序一致性的非参数统计方法。
一、起源
肯德尔相关系数由莫里斯·肯德尔(Maurice Kendall)在1938年提出。肯德尔在研究社会科学数据时,发现传统的相关性分析方法在处理非线性关系和异常值时效果不佳,因此他提出了一种基于排序一致性的非参数方法,以更准确地评估变量之间的相关性。
二、原理
肯德尔相关系数(Kendall’s Tau)通过比较所有可能的变量对,计算它们之间的顺序一致性来衡量相关性。其计算公式为:
- Tau-a(适用于没有重复数据的情况):
τ a = 2 ( n c − n d ) n ( n − 1 ) \tau_a = \frac{2(n_c - n_d)}{n(n-1)} τa=n(n−1)2(nc−nd)
其中, n c n_c nc 表示顺序一致的对数, n d n_d nd 表示顺序不一致的对数, n n n 是观测值的总数。
- Tau-b(适用于存在重复数据的情况):
τ b = n c − n d ( n 0 − n 1 ) ( n 0 − n 2 ) \tau_b = \frac{n_c - n_d}{\sqrt{(n_0 - n_1)(n_0 - n_2)}} τb=(n0−n1)(n0−n2)nc−nd
其中, n 0 = n ( n − 1 ) 2 n_0 = \frac{n(n-1)}{2} n0=2n(n−1), n 1 n_1 n1 是与第一个变量相关的重复分组的调整项, n 2 n_2 n2 是与第二个变量相关的重复分组的调整项。
三、步骤
- 数据准备:收集并整理需要分析的变量数据。
- 排序对比较:比较每对变量的顺序一致性。
- 计算顺序对数:计算顺序一致的对数 n c n_c nc 和顺序不一致的对数 n d n_d nd。
- 计算相关系数:使用公式计算肯德尔相关系数。
四、应用场景
肯德尔相关性分析广泛应用于各种场景,特别是在以下情况下:
- 数据不符合正态分布
- 数据存在显著的异常值
- 变量之间的关系可能是非线性的
- 数据量较小的情况下,适用性较高
五、案例分析
假设我们有一组数据,包含若干人的工作年限、薪资和每周工作小时数,我们希望通过肯德尔相关性分析来评估这些变量之间的关系。数据如下:
人 工作年限(年) 薪资(千元) 每周工作小时数
A 10 85 40
B 8 80 42
C 5 60 38
D 7 75 45
E 3 50 36
-
数据准备:
人 工作年限(年) 薪资(千元) 每周工作小时数 A 10 85 40 B 8 80 42 C 5 60 38 D 7 75 45 E 3 50 36
-
生成所有可能的变量对:
(A, B), (A, C), (A, D), (A, E), (B, C), (B, D), (B, E), (C, D), (C, E), (D, E)
-
比较每对变量的顺序一致性:
-
工作年限与薪资:
- (A, B):工作年限和薪资顺序一致(10 > 8, 85 > 80),一致对。
- (A, C):工作年限和薪资顺序一致(10 > 5, 85 > 60),一致对。
- (A, D):工作年限和薪资顺序一致(10 > 7, 85 > 75),一致对。
- (A, E):工作年限和薪资顺序一致(10 > 3, 85 > 50),一致对。
- (B, C):工作年限和薪资顺序一致(8 > 5, 80 > 60),一致对。
- (B, D):工作年限和薪资顺序不一致(8 > 7, 80 < 75),不一致对。
- (B, E):工作年限和薪资顺序一致(8 > 3, 80 > 50),一致对。
- (C, D):工作年限和薪资顺序一致(5 < 7, 60 < 75),一致对。
- (C, E):工作年限和薪资顺序一致(5 > 3, 60 > 50),一致对。
- (D, E):工作年限和薪资顺序一致(7 > 3, 75 > 50),一致对。
-
工作年限与每周工作小时数:
- (A, B):工作年限和每周工作小时数顺序不一致(10 > 8, 40 < 42),不一致对。
- (A, C):工作年限和每周工作小时数顺序一致(10 > 5, 40 > 38),一致对。
- (A, D):工作年限和每周工作小时数顺序不一致(10 > 7, 40 < 45),不一致对。
- (A, E):工作年限和每周工作小时数顺序一致(10 > 3, 40 > 36),一致对。
- (B, C):工作年限和每周工作小时数顺序不一致(8 > 5, 42 < 38),不一致对。
- (B, D):工作年限和每周工作小时数顺序不一致(8 < 7, 42 > 45),不一致对。
- (B, E):工作年限和每周工作小时数顺序一致(8 > 3, 42 > 36),一致对。
- (C, D):工作年限和每周工作小时数顺序一致(5 < 7, 38 < 45),一致对。
- (C, E):工作年限和每周工作小时数顺序一致(5 > 3, 38 > 36),一致对。
- (D, E):工作年限和每周工作小时数顺序一致(7 > 3, 45 > 36),一致对。
-
-
计算顺序对数:
-
工作年限与薪资:
- 顺序一致对数 n c = 8 n_c = 8 nc=8
- 顺序不一致对数 n d = 2 n_d = 2 nd=2
-
工作年限与每周工作小时数:
- 顺序一致对数 n c = 6 n_c = 6 nc=6
- 顺序不一致对数 n d = 4 n_d = 4 nd=4
-
计算肯德尔相关系数
- 工作年限与薪资:
τ = ( n c − n d ) n c + n d = ( 8 − 2 ) 8 + 2 = 6 10 = 0.6 \tau = \frac{(n_c - n_d)}{n_c + n_d} = \frac{(8 - 2)}{8 + 2} = \frac{6}{10} = 0.6 τ=nc+nd(nc−nd)=8+2(8−2)=106=0.6
- 工作年限与每周工作小时数:
τ = ( n c − n d ) n c + n d = ( 6 − 4 ) 6 + 4 = 2 10 = 0.2 \tau = \frac{(n_c - n_d)}{n_c + n_d} = \frac{(6 - 4)}{6 + 4} = \frac{2}{10} = 0.2 τ=nc+nd(nc−nd)=6+4(6−4)=102=0.2
六、Python代码示例
使用Python进行肯德尔相关系数计算,可以使用scipy
库中的kendalltau
函数:
import numpy as np
from scipy.stats import kendalltau
# 数据准备
years_of_experience = [10, 8, 5, 7, 3]
salary = [85, 80, 60, 75, 50]
weekly_hours = [40, 42, 38, 45, 36]
# 计算肯德尔相关系数
corr_years_salary, _ = kendalltau(years_of_experience, salary)
corr_years_hours, _ = kendalltau(years_of_experience, weekly_hours)
print(f"工作年限与薪资的肯德尔相关系数: {corr_years_salary}")
print(f"工作年限与每周工作小时数的肯德尔相关系数: {corr_years_hours}")
七、R代码示例
使用R进行肯德尔相关系数计算,可以使用cor
函数并指定方法为kendall
:
# 数据准备
years_of_experience <- c(10, 8, 5, 7, 3)
salary <- c(85, 80, 60, 75, 50)
weekly_hours <- c(40, 42, 38, 45, 36)
# 计算肯德尔相关系数
corr_years_salary <- cor(years_of_experience, salary, method = "kendall")
corr_years_hours <- cor(years_of_experience, weekly_hours, method = "kendall")
print(paste("工作年限与薪资的肯德尔相关系数:", corr_years_salary))
print(paste("工作年限与每周工作小时数的肯德尔相关系数:", corr_years_hours))
八、注意事项
- 肯德尔相关系数的取值范围为-1到1,正值表示正相关,负值表示负相关,0表示无相关。
- 数据中的重复值会影响肯德尔相关系数的计算准确性。
- 对于较大的数据集,计算复杂度较高。
九、总结
肯德尔相关性分析是一种灵活且有效的统计方法,特别适用于非正态分布或存在异常值的数据。通过对排序一致性的分析,它能有效揭示变量间的相关关系,为研究和决策提供有力支持。