Python 语言 |Kendall Rank 相关系数

什么是相关性测试?

两个变量之间的关联强度称为相关性检验。例如,如果我们有兴趣知道父子的身高之间是否存在关系,可以计算相关系数来回答这个问题。

相关性分析方法:

主要有两种类型的相关性:

参数相关性 – 皮尔逊相关性 (r) :它测量两个变量(x 和 y)之间的线性依赖性被称为参数相关性检验,因为它取决于数据的分布。
非参数相关 – Kendall(tau) 和 Spearman(rho): 它们是基于秩的相关系数,称为非参数相关。
Kendall Rank 相关系数公式:

哪里

  • 一致对:属性后面的一对观测值 (x1, y1) 和 (x2, y2)
    • x1 > x2 和 y1 > y2 或
    • x1 < x2 和 y1 < y2
  • Discordant Pair:属性后面的一对观测值 (x1, y1) 和 (x2, y2)
    • x1 > x2 和 y1 < y2 或
    • x1 < x2 和 y1 > y2
  • n:样本总数

注意:

其中的货币对

x1 = x2

y1 = y2

未分类为一致或不不一致,因此会被忽略。

例:

让我们考虑下表中两位专家对食品的排名。

项目专家 1专家 2
111
223
336
442
557
664
775

该表显示,对于项目 1,专家 1 给出排名 1,而专家 2 也给出排名 1。同样,对于项目 2,专家 1 给出等级 2,而专家 2 给出等级 3,依此类推。

步骤1:

首先,根据公式,我们必须找到一致对的数量和不一致对的数量。因此,请查看 item-1 和 item-2 行。设 for expert-1,

x1 = 1

x2 = 2

.同样,对于 expert-2,

y1 = 1

y2 = 3

.所以条件

x1 < x2

Y1 < Y2

satisfies,我们可以说 item-1 和 item-2 行是一致的对。同样,请查看 item-2 和 item-4 行。设 for expert-1,

x1 = 2

x2 = 4

.同样,对于 expert-2,

y1 = 3

y2 = 2

.所以条件

x1 < x2

Y1 > Y2

satisfies,我们可以说 item-2 和 item-4 行是不一致的对。像这样,通过比较每一行,你可以计算出一致和不一致对的数量。下表给出了完整的解决方案。

1
2C
3CC
4CDD
5CCCC
6CCCDD
7CCCCDD
1234567

步骤2:

所以从上表中,我们发现, 一致对的数量是: 15 不一致对的数量是: 6 样本/项目的总数是: 7 因此通过应用 Kendall Rank Correlation Coefficient 公式

tau = (15 – 6) / 21 = 0.42857

这个结果表明,如果它基本上很高,那么两位专家之间有广泛的共识。否则,如果 expert-1 与 expert-2 完全不同,您甚至可能会得到负值。

kendalltau() :

在 Python 中计算 Kendall Rank 相关系数的 Python 函数

语法:kendalltau(x, y)
  • x, y:具有相同长度的数字列表

法典:

说明 Kendall Rank 相关性的 Python 程序

# Import required libraries from scipy.stats import kendalltau # Taking values from the above example in Lists X = [1, 2, 3, 4, 5, 6, 7] Y = [1, 3, 6, 2, 7, 4, 5] # Calculating Kendall Rank correlation corr, _ = kendalltau(X, Y) print('Kendall Rank correlation: %.5f' % corr) # This code is contributed by Amiya Rout 

输出:

Kendall Rank correlation: 0.42857
在不依赖Python的第三方库的情况下,我们可以手动计算皮尔逊相关系数(Pearson's correlation coefficient)、斯皮尔曼等级相关系数(Spearmans rank correlation coefficient)和肯德尔等级相关系数(Kendall's tau coefficient)。这里仅给出基本的数学公式,然后提供简单的示例代码。 **皮尔逊相关系数 (Pearson's r)**: 这是一种度量两个连续变量之间线性关系强度和方向的统计方法。公式如下: 对于样本 x 和 y: \[ r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2}\sqrt{\sum (y_i - \bar{y})^2}} \] 其中 \( \bar{x} \) 和 \( \bar{y} \) 分别是样本均值。 **斯皮尔曼等级相关系数 (Spearmans rho):** 适用于两个非连续但可以排序的变量。通过比较等级而非原始数值计算,适合于对称分布的数据。公式相似,但是使用排名代替原始值: \[ \rho_S = 1 - \frac{6 \sum d_i(d_i-1)}{n(n^2 - 1)} \] 其中 \( d_i \) 是排名差异。 **肯德尔等级相关系数 (Kendall's tau):** 同样用于排序数据,衡量的是观察到的配对一致性和不一致性。公式涉及计数同序对和反序对: \[ \tau = \frac{n_c - n_d}{\binom{n}{2}} \] \( n_c \) 是正序对,\( n_d \) 是反序对,\( \binom{n}{2} \) 是所有可能的配对数。 以下是简单手动实现的Python代码示例(假设我们有两列数据列表x和y): ```python import math # 计算均值 def mean(lst): return sum(lst) / len(lst) # 计算方差 def variance(lst): m = mean(lst) return sum((x - m) ** 2 for x in lst) / len(lst) # 皮尔逊相关系数 def pearson(x, y): x_mean = mean(x) y_mean = mean(y) numerator = sum((xi - x_mean) * (yi - y_mean) for xi, yi in zip(x, y)) denominator = math.sqrt(variance(x)) * math.sqrt(variance(y)) return numerator / denominator if denominator else 0 # 斯皮尔曼和肯德尔等级相关系数需要对数据进行排序并计算等级差 def calculate_rank_diffs(x, y): ranked_x = [i+1 for i, _ in sorted(zip(x, range(len(x))))] ranked_y = [j+1 for j, _ in sorted(zip(y, range(len(y))))] scott_pi = lambda data: len(data) * (len(data) + 1) / 4.0 n = len(ranked_x) n_c = n_c_d = 0 for xi, yi in zip(ranked_x, ranked_y): n_c += (xi - yi)**2 n_d += min(xi, yi) * max(xi, yi) tau = (n_c - n_d) / (scott_pi(range(1, n+1)) * (n*(n-1)/2)) rho_s = 1 - (6*n_c / (n*(n**2 - 1))) return tau, rho_s # 示例数据 x = [...] y = [...] # 调用函数计算相关系数 pearson_r = pearson(x, y) tau, rho_s = calculate_rank_diffs(x, y) print("Pearson Correlation:", pearson_r) print("Spearman Rank Correlation:", rho_s) print("Kendall Tau Coefficient:", tau) ``` 请注意,这个实现非常基础,并未处理异常情况。在实际应用中,可能需要更复杂的错误检查和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法资料吧!

我会继续分享编程资料,学习资料

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值