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

目录
  • 前言
  • 一、定义
  • 二、使用条件
  • 三、计算公式及代码示例
    • 1.Tau-a
    • 2.Tau-b

前言

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

一、定义

Kendall(肯德尔)系数的定义:n个同类的统计对象按特定属性排序,其他属性通常是乱序的。同序对(concordant pairs)和异序对(discordant pairs)之差与总对数(n*(n-1)/2)的比值定义为Kendall(肯德尔)系数。

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

不同的是,斯皮尔曼相关是基于秩差(比如说,小明在班级中的历史成绩排名为10,英语成绩排名为4,那么在这个班级的学生的历史成绩和英语成绩的斯皮尔曼相关分析中,小明的成绩的贡献就是(10-4=6) )来进行相关关系的评估;而肯德尔相关则是基于样本数据对之间的关系来进行相关系数的强弱的分析,数据对可以分为一致对(Concordant)和分歧对(Discordant)。

kendall相关系数的计算公式如下:

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

注意,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是独立的,那么我们期望系数近似为零。

二、使用条件

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

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

三、计算公式及代码示例

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

1.Tau-a

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)

2.Tau-b

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

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

(0)

相关推荐

  • Python数据分析之堆叠数组函数示例总结

    目录 numpy 堆叠数组 ravel() 函数 stack() 函数 vstack()函数 hstack()函数 concatenate() 函数 numpy 堆叠数组 在做图像和 nlp 的数组数据处理的时候,经常需要实现两个数组堆叠或者连接的功能,这就需用到 numpy 库的一些函数,numpy 库中的常用堆叠数组函数如下: stack : Join a sequence of arrays along a new axis. hstack: Stack arrays in sequenc

  • Python制作数据分析透视表的方法详解

    目录 1.pivot_table函数index属性 2.pivot_table函数values属性 3.pivot_table函数aggfunc属性 4.pivot_table函数columns属性 透视表是一种可以对数据动态排布并且分类汇总的表格格式,在常用的python的数据分析非标准库pandas中体现为pivot_table模块. pivot_table数据透视表可以灵活的定制数据分析需求进行汇总,当然在Excel办公操作中早就存在了数据透视表的工具.如今,数据透视表被应用在python

  • python数据分析之时间序列分析详情

    目录 前言 时间序列的相关检验 白噪声检验 平稳性检验 自相关和偏相关分析 移动平均算法 简单移动平均法 简单指数平滑法 霍尔特(Holt)线性趋势法 Holt-Winters季节性预测模型 ARIMA模型 ARMA模型 针对ARMA模型自动选择合适的参数 时序数据的异常值检测 前言 时间序列分析是基于随机过程理论和数理统计学方法: 每日的平均气温 每天的销售额 每月的降水量 时间序列分析主要通过statsmodel库的tsa模块完成: 根据时间序列的散点图,自相关函数和偏自相关函数图识别序列是

  • Python通用函数实现数组计算的方法

    一.数组的运算 数组的运算可以进行加减乘除,同时也可以将这些算数运算符进行任意的组合已达到效果. >>> x=np.arange(5) >>> x array([0, 1, 2, 3, 4]) >>> x=5 >>> x=np.arange(5) >>> x+5 array([5, 6, 7, 8, 9]) >>> x-5 array([-5, -4, -3, -2, -1]) >>&g

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

    目录 前言 一.定义 二.使用条件 三.计算公式及代码示例 1.Tau-a 2.Tau-b 前言 相关性分析算是很多算法以及建模的基础知识之一了,十分经典.关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达.其中常见的相关性系数就有三种:person相关系数,spearman相关系数,Kendall's tau-b等级相关系数.各有各自的用法和使用场景.当然关于这以上三种相关系数的计算算法和原理+代码我都会在我专栏里面写齐全.目前关于数学建模的专栏已经将传统的机器学习预测算法.维度算法

  • Python一阶马尔科夫链生成随机DNA序列实现示例

    目录 1. 原理 2. 代码实现 3. 运行结果 1. 原理 对于DNA序列,一阶马尔科夫链可以理解为当前碱基的类型仅取决于上一位碱基类型.如图1所示,一条序列的开端(由B开始)可能是A.T.G.C四种碱基(且可能性相同,均为0.25),若序列的某一位是A,则下一位碱基是A.T.G.C的概率分别为0.25.0.20.0.20.0.20,下一位无碱基(即序列结束,状态为E)的概率为0.15. 图1 DNA序列的一阶马尔科夫链 2. 代码实现 以下代码运行于Jupyter Notebook (Pyt

  • Python实现12种降维算法的示例代码

    目录 为什么要进行数据降维 数据降维原理 主成分分析(PCA)降维算法 其它降维算法及代码地址 1.KPCA(kernel PCA) 2.LDA(Linear Discriminant Analysis) 3.MDS(multidimensional scaling) 4.ISOMAP 5.LLE(locally linear embedding) 6.t-SNE 7.LE(Laplacian Eigenmaps) 8.LPP(Locality Preserving Projections) 网

  • Python和Matlab实现蝙蝠算法的示例代码

    目录 1前言 2 蝙蝠算法原理细讲 3 详细步骤 4Python实现 4.1代码 4.2结果 5Matlab实现 5.1 代码 5.2 结果 5.3 展望 1 前言 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法.该算法基于迭代优化,初始化为一组随机解,然后迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强局部搜索速度.该算法具有实现简单.参数少等特点. 该算法主要用于目标函数寻优,基于蝙蝠种群利用产生的声波搜索猎物和控制飞行方向的特征来实现

  • Python&Matlab实现灰狼优化算法的示例代码

    目录 1 灰狼优化算法基本思想 2 灰狼捕食猎物过程 2.1 社会等级分层 2.2 包围猎物 2.3 狩猎 2.4 攻击猎物 2.5 寻找猎物 3 实现步骤及程序框图 3.1 步骤 3.2 程序框图 4 Python代码实现 5 Matlab实现 1 灰狼优化算法基本思想 灰狼优化算法是一种群智能优化算法,它的独特之处在于一小部分拥有绝对话语权的灰狼带领一群灰狼向猎物前进.在了解灰狼优化算法的特点之前,我们有必要了解灰狼群中的等级制度. 灰狼群一般分为4个等级:处于第一等级的灰狼用α表示,处于第

  • Python绘制多因子柱状图的实现示例

    目录 背景介绍 软件介绍 绘图教程 最后 背景介绍 R和Python作为两个开源.且容易上手的数据分析和绘图工具,在科研中应用的比较广泛. 在接下来的日子,我们围绕Python进行绘图和数据分析话题,写一系列推文,事实上是我自己的一些学习笔记分享出来,为了我 方便查阅,也方便大家翻阅. 软件介绍 [软件名称]:Anaconda | Spyder [软件安装]:可以参考下方这个推文 Anaconda的下载和安装 绘图教程 1.打开Spyder软件,我们导入相应的库,以及生成一组数据.(一开始作图的

  • Python实现曲线点抽稀算法的示例

    本文介绍了Python实现曲线点抽稀算法的示例,分享给大家,具体如下: 目录 何为抽稀 道格拉斯-普克(Douglas-Peuker)算法 垂距限值法 最后 正文 何为抽稀 在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便.多余的数据一方面浪费了较多的存储空间,另一方面造成所要表达的图形不光滑或不符合标准.因此要通过某种规则,在保证矢量曲线形状不变的情况下, 最大限度地减少数据点个数,这个过程称为抽稀. 通俗的讲就是对曲线进行采样简化,即在曲线上取有限个点,将其变为折

  • 在Python中使用AOP实现Redis缓存示例

    越来越觉得的缓存是计算机科学里最NB的发明(没有之一),本文就来介绍了一下在Python中使用AOP实现Redis缓存示例,小伙伴们一起来了解一下 import redis enable=True #enable=False def readRedis(key): if enable: r = redis.Redis(host='10.224.38.31', port=8690,db=0, password='xxxx') val = r.get(key) if val is None: pri

  • Python文件的读写和异常代码示例

    一.从文件中读取数据 #!/usr/bin/env python with open('pi') as file_object: contents = file_object.read() print(contents) =================================== 3.1415926 5212533 2324255 1.逐行读取 #!/usr/bin/env python filename = 'pi' with open(filename) as file_obje

  • python shell根据ip获取主机名代码示例

    这篇文章里我们主要分享了python中shell 根据 ip 获取 hostname 或根据 hostname 获取 ip的代码,具体介绍如下. 笔者有时候需要根据hostname获取ip 比如根据machine.company.com 获得ip 10.173.14.117 方法1:利用 socket 模块 里的 gethostbyname 函数 代码如下,使用socket模块 >>> import socket >>> socket.gethostbyname(&qu

随机推荐