python肯德尔系数相关性数据分析示例

作者:fanstuck 时间:2023-02-20 21:42:35 

前言

相关性分析算是很多算法以及建模的基础知识之一了,十分经典。关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达。其中常见的相关性系数就有三种: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。

  • 如果X和Y是独立的,那么我们期望系数近似为零。

二、使用条件

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

python肯德尔系数相关性数据分析示例

  • 变量数据是有序的( ordinal) 或者是连续的(continuous). 有序尺度(Ordinal scales )的数据通常用于用数值的方式来衡量非数值的概念,比如说,满意度,幸福度等等,还有像成绩排名啊、比赛名次啊之类的。而连续尺度的数据就勿需解释了,常见的温度啊、体重啊、收入啊等等都(或严格、或近似)算是连续尺度的数据。

  • 两个变量的数据之间应该遵循单调关系( monotonic relationship)。 简而言之就是,其中一个变量的值增大,另一个也增大,这个称为正相关;或者一个变量的值增大,另一个就变小,这个称为负相关。当然,这个单调关系是一个统计意义上的,或者说一种趋势上的,而非严格的单调。如下如所示。左图和中图都呈现一种近似单调的关系,而右图则不是,因为右图的左半部分和右半部分的趋势是相反的。

python肯德尔系数相关性数据分析示例

三、计算公式及代码示例

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

1.Tau-a

python肯德尔系数相关性数据分析示例

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肯德尔系数相关性数据分析示例

代码是一致的只不过使用数学运算不一致,具体我不展开了,更多关于python肯德尔系数相关性的资料请关注脚本之家其它相关文章!

来源:https://juejin.cn/post/7187943854141046839

标签:python,肯德尔系数,相关性,数据分析
0
投稿

猜你喜欢

  • Node.js中创建和管理外部进程详解

    2024-05-02 17:36:03
  • ktl工具实现mysql向mysql同步数据方法

    2024-01-15 18:09:21
  • Golang Gin局部和全局中间件使用详解

    2023-07-10 03:03:00
  • opencv3/C++实现视频读取、视频写入

    2021-12-17 10:01:16
  • vue.js在标签属性中插入变量参数的方法

    2024-05-28 15:58:09
  • SQL SERVER的字段类型介绍

    2008-05-23 13:27:00
  • python实现朴素贝叶斯分类器

    2022-12-05 03:35:50
  • python使用Plotly绘图工具绘制散点图、线形图

    2022-06-24 08:11:50
  • 在Python中等距取出一个数组其中n个数的实现方式

    2023-10-18 10:03:10
  • 简单三步轻松实现ORACLE字段自增

    2024-01-16 06:06:58
  • python用线性回归预测股票价格的实现代码

    2023-01-24 02:14:31
  • 轻松掌握MySQL数据库锁机制的相关原理

    2008-12-17 15:23:00
  • 详解Django解决ajax跨域访问问题

    2021-10-14 15:34:10
  • python读取文件名并改名字的实例

    2021-03-19 12:45:37
  • golang gin框架实现大文件的流式上传功能

    2024-05-08 10:44:11
  • Python基于SMTP发送邮件的方法

    2021-07-17 23:42:46
  • 网页设计应急小技巧

    2011-10-05 18:52:57
  • python版本的仿windows计划任务工具

    2021-06-09 03:55:07
  • Python序列化基础知识(json/pickle)

    2021-04-24 01:09:34
  • 详解python3百度指数抓取实例

    2022-01-11 03:06:59
  • asp之家 网络编程 m.aspxhome.com