前语

相关性剖析算是很多算法以及建模的基础知识之一了,非常经典。关于许多特征相关联系以及相关趋势都可以利用相关性剖析核算表达。其间常见的相关性系数就有三种:person相联系数,spearman相联系数,Kendall’s tau-b等级相联系数。各有各自的用法和运用场景。当然关于这以上三种相联系数的核算算法和原理+代码我都会在我专栏里边写完全。现在关于数学建模的专栏已经将传统的机器学习预测算法、维度算法、时序预测算法和权重算法写的七七八八了,有这个需求爱好的同学可以去看看。

肯德尔系数相关性分析一文详解+python实例代码

一、界说

Kendall(肯德尔)系数的界说:n个同类的计算目标按特定特点排序,其他特点一般是乱序的。同序对(concordant pairs)和异序对(discordant pairs)之差与总对数(n*(n-1)/2)的比值界说为Kendall(肯德尔)系数。

与斯皮尔曼秩相关相似的是,肯德尔相关也是一种秩相联系数,是根据数据目标的秩(rank)来进行两个(随机变量)之间的相关联系(强弱和方向)的评价。所剖析的目标目标应该是一种有序的类别变量,比如名次、年龄段、肥壮等级(重度肥壮,中度肥壮、轻度肥壮、不肥壮)等。

不同的是,斯皮尔曼相关是根据秩差(比如说,小明在班级中的前史成果排名为10,英语成果排名为4,那么在这个班级的学生的前史成果和英语成果的斯皮尔曼相关剖析中,小明的成果的奉献便是(10-4=6) )来进行相关联系的评价;而肯德尔相关则是根据样本数据对之间的联系来进行相联系数的强弱的剖析,数据对可以分为共同对(Concordant)和分歧对(Discordant)。

kendall相联系数的核算公式如下:

肯德尔系数相关性分析一文详解+python实例代码

假如咱们设一组8人的身高和体重在那里A的人是最高的,第三重,等等:

肯德尔系数相关性分析一文详解+python实例代码

注意,A最高,但体重排名为 3 ,比体重排名为 4,5,6,7,8 的重,奉献5个同序对,即AB,AE,AF,AG,AH。同理,咱们发现B、C、D、E、F、G、H别离奉献4、5、4、3、1、0、0个同序对,因此,同序对数

P = 5 + 4 + 5 + 4 + 3 + 1 + 0 + 0 = 22.

异序对数 Q=28-22 (总对数减去同序对数为异序对数)

因此R=((22-6)/28)=0.57。这一结果显示出强大的排名之间的规则,契合预期。 咱们看到,有一些相关的两个排名之间的相关性,可以运用肯德尔头系数,客观地衡量对应。

  • 假如两个排名之间的共同性是完美的(即两个排名相同),则系数的值为1。

  • 假如两个排名之间的分歧是完美的(即,一个排名与另一个排名相反),则系数具有值-1。

  • 假如XY是独立的,那么咱们期望系数近似为零。

二、运用条件

在适用肯德尔相关剖析前首先要检查数据是否满意以下根本假设,满意了这些根本假设才能确保你所得到的相关剖析结果是有用的。

肯德尔系数相关性分析一文详解+python实例代码

  • 变量数据是有序的( ordinal) 或许是连续的(continuous). 有序标准(Ordinal scales )的数据一般用于用数值的方式来衡量非数值的概念,比如说,满意度,美好度等等,还有像成果排名啊、比赛名次啊之类的。而连续标准的数据就勿需解说了,常见的温度啊、体重啊、收入啊等等都(或严厉、或近似)算是连续标准的数据。
  • 两个变量的数据之间应该遵从单调联系( monotonic relationship)。 简而言之便是,其间一个变量的值增大,另一个也增大,这个称为正相关;或许一个变量的值增大,另一个就变小,这个称为负相关。当然,这个单调联系是一个计算意义上的,或许说一种趋势上的,而非严厉的单调。如下如所示。左图和中图都出现一种近似单调的联系,而右图则不是,由于右图的左半部分和右半部分的趋势是相反的。

肯德尔系数相关性分析一文详解+python实例代码

三、核算公式及代码示例

肯德尔系数有两个核算公式,一个称为Tau-c,另一个称为Tau-b。两者的区别是Tau-b可以处理有相同值的情况,即并排排位(tied ranks)。

1.Tau-a

肯德尔系数相关性分析一文详解+python实例代码

其间,n表明样本个数。如上所述,肯德尔相联系数是根据数据对来进行剖析的,n个样本每两两组队所得到的组队数便是

肯德尔系数相关性分析一文详解+python实例代码
,Tau-a的分母即来自于此。分子中c和d则别离代表共同对和分歧对的个数。

from scipy.stats.stats import kendalltau
import numpy as np
import matplotlib.pyplot as plt
dat1 = np.array([1,2,3,4,5,6,7,8])
dat2 = np.array([3,4,1,2,5,7,8,6])
fig,ax = plt.subplots()
ax.scatter(dat1,dat2)
kendalltau(dat1,dat2)

肯德尔系数相关性分析一文详解+python实例代码

2.Tau-b

在以上Tau-a的核算中假定原始数据中不存在并排排位。当原始数据中存在并排排位时,则用以下公式可以给出更准确的剖析结果。

肯德尔系数相关性分析一文详解+python实例代码

其间c和d则别离代表共同对和分歧对的个数,和则别离表明数据X中的并排排位个数,和数据Y中的并排排位个数。注意,假如是同时发生在X和Y中并排排位,则既不计入,也不计入。

代码是共同的只不过运用数学运算不共同,详细我不展开了。

点关注,防走丢,如有疏忽之处,请留言指教,非常感谢

以上便是本期全部内容。我是fanstuck ,有问题大家随时留言评论 ,咱们下期见