使用Python计算非参数的秩相关

AiTechYun

编辑:yxy

相关性是两个变量之间关联的度量。

当两个变量都有良好理解的高斯分布时,很容易计算和解释。而当我们不知道变量的分布时,我们必须使用非参数的秩相关(Rank Correlation,或称为等级相关)方法。

在本教程中,你将了解用于量化具有非高斯分布变量之间关联的秩相关方法。

完成本教程后,你会学到:

  • 秩相关方法的工作原理以及方法是否适用。
  • 如何在Python中计算和解释Spearman的秩相关系数。
  • 如何在Python中计算和解释Kendall的秩相关系数。

本教程分为4个部分; 他们是:

  1. 秩相关
  2. 测试数据集
  3. Spearman秩相关
  4. Kendall秩相关

秩相关

相关性是指两个变量的观测值之间的关联。

变量可能有正相关,即当一个变量的值增加时,另一个变量的值也会增加。也可能有负相关,意味着随着一个变量的值增加,其他变量的值减小。变量也可能是中立的,也就是说变量不相关。

相关性的量化通常为值-1到1之间的度量,即完全负相关和完全正相关。计算出的相关结果被称为“ 相关系数”。然后可以解释该相关系数以描述度量。

参阅下表:

可以使用诸如Pearson相关这样的标准方法来计算每个具有高斯分布的两个变量之间的相关性。这份方法不能用于没有高斯分布的数据。而必须使用秩相关方法。

秩相关是指使用变量之间序数的关联(而不是特定值)来量化变量之间的关联的方法。有序数据是具有标签值并具有顺序或秩相关的数据;例如:' 低 ',' 中 '和' 高 '。

可以为实值变量计算秩相关。这是通过首先将每个变量的值转换为等级数据来完成的。值在这里被排序并指定整数排名值。然后可以计算秩相关系数以量化两个排序变量之间的关联。

由于没有假设值的分布,所以秩相关方法被称为自由分布相关(distribution-free correlation)或非参数相关(nonparametric correlation)。有趣的是,秩相关的度量通常被用作其他统计假设检验的基础,例如确定两个样本是否可能来自相同(或不同)的群体分布。

秩相关方法通常以研究人员或开发该方法的研究人员的名字命名。如下:

  • Spearman秩相关。
  • Kendall秩相关。
  • Goodman和Kruskal秩相关。
  • Somers秩相关。

在接下来的部分中,我们将仔细研究两种更常见的秩相关方法:Spearman和Kendall。

测试数据集

在我们演示秩相关方法之前,我们必须首先定义一个测试问题。

在本节中,我们将定义一个简单的双变量数据集,其中每个变量都抽取自均匀分布(如,非高斯分布),并且第二个变量的值取决于第一个值的值。

从均匀分布中抽取1,000个随机浮点值的样本,并将其缩放到0到20的范围。从0到10之间的均匀分布中抽取1,000个随机浮点值的第二个样本,并将其加上到第一个样本以创建关联。

# prepare data
data1 = rand(1000) * 20
data2 = data1 + (rand(1000) * 10)

完整代码如下:

# generate related variables
from numpy.random import rand
from numpy.random import seed
from matplotlib import pyplot
# seed random number generator
seed(1)
# prepare data
data1 = rand(1000) * 20
data2 = data1 + (rand(1000) * 10)
# plot
pyplot.scatter(data1, data2)
pyplot.show()

运行该示例生成数据样本并绘制散点图。

我们可以清楚地看到每个变量都有均匀分布,并且通过从图的左下到右上角的点的两组对角线可以看到变量之间明显的正相关。

散点图

Spearman秩相关

Spearman秩相关以Charles Spearman命名。

它也被称为Spearman相关系数,通常用小写希腊字母rho (p)表示。因此,它也被称为Spearman’s rho。

这个统计方法量化了等级变量与单调函数相关联的程度,即递增或递减的关系。作为统计假设检验,该方法假设样本是不相关的。

Spearman等级顺序相关是一种旨在度量序数测量尺度上两个变量之间关系的统计过程。

- 第124页,Nonparametric Statistics for Non-Statisticians: A Step-by-Step Approach,2009年。

Spearman秩相关的直觉是,它使用秩值而不是实际值来计算Pearson相关。Pearson相关性由两个变量中每个变量的方差或分布的标准化的协方差计算。

Spearman的秩相关可以在Python中使用SciPy函数spearmanr()计算。

该函数需要两个实值样本作为参数,并返回介于-1和1之间的相关系数以及用于解释系数意义的p值。

# calculate spearman's correlation
coef, p = spearmanr(data1, data2)

我们可以在测试数据集上证明Spearman秩相关。我们知道数据集中的变量之间存在很强的关联,我们希望Spearman能够找到这种关联。

完整示例如下:

# calculate the spearman's correlation between two variables
from numpy.random import rand
from numpy.random import seed
from scipy.stats import spearmanr
# seed random number generator
seed(1)
# prepare data
data1 = rand(1000) * 20
data2 = data1 + (rand(1000) * 10)
# calculate spearman's correlation
coef, p = spearmanr(data1, data2)
print('Spearmans correlation coefficient: %.3f' % coef)
# interpret the significance
alpha = 0.05
if p > alpha:
	print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
else:
	print('Samples are correlated (reject H0) p=%.3f' % p)

运行该示例计算测试数据集中两个变量之间的Spearman相关系数。

统计检验返回的值为0.9(强正相关)。p值接近于零,这意味着观察到数据给出的样本不相关的可能性极小(例如95%置信度),并且我们可以驳回样本不相关的零假设。

Spearmans correlation coefficient: 0.900
Samples are correlated (reject H0) p=0.000

Kendall秩相关

Kendall秩相关以Maurice Kendall命名。

它也被称为Kendall相关系数,通常用小写希腊字母tau(t)表示。所以,它也被称为Kendall’s tau。

这种检验的直觉是计算两个样本之间匹配或一致排名的标准化分数。因此,也称为Kendall’s concordance test。

在Python中,Kendall秩相关系数可以使用SciPy函数kendalltau()计算。它将两个数据样本作为参数,并返回相关系数和p值。作为统计假设检验,该方法假设(H0)两个样本之间没有关联。

# calculate kendall's correlation
coef, p = kendalltau(data1, data2)

我们可以在测试数据集上演示计算结果,我们预计会报告强正相关。

下面列出了完整的示例:

# calculate the kendall's correlation between two variables
from numpy.random import rand
from numpy.random import seed
from scipy.stats import kendalltau
# seed random number generator
seed(1)
# prepare data
data1 = rand(1000) * 20
data2 = data1 + (rand(1000) * 10)
# calculate kendall's correlation
coef, p = kendalltau(data1, data2)
print('Kendall correlation coefficient: %.3f' % coef)
# interpret the significance
alpha = 0.05
if p > alpha:
	print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
else:
	print('Samples are correlated (reject H0) p=%.3f' % p)

运行该示例,Kendall相关系数为0.7,这是高度相关。

与Spearman一样,p值接近零(打印为零),这意味着我们可以放心地驳回样本不相关的零假设。

Kendall correlation coefficient: 0.709
Samples are correlated (reject H0) p=0.000

进一步阅读

如果你希望深入了解,本节将提供有关该主题的更多资源。

  • Nonparametric Statistics for Non-Statisticians: A Step-by-Step Approach, 2009.
  • Applied Nonparametric Statistical Methods, Fourth Edition, 2007.
  • Rank Correlation Methods, 1990.

API

  • scipy.stats.spearmanr()API :https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.spearmanr.html
  • scipy.stats.kendalltau()API:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kendalltau.html

维基百科

  • Nonparametric statistics
  • Rank correlation
  • Spearman’s rank correlation coefficient
  • Kendall rank correlation coefficient
  • Goodman and Kruskal’s gamma on Wikipedia
  • Somers’ D

总结

在本教程中,你将了解用于量化具有非高斯分布的变量之间关联的秩相关方法。

具体来说,你学到了:

  • 秩相关方法的工作原理以及方法是否适用。
  • 如何在Python中计算和解释Spearman的秩相关系数。
  • 如何在Python中计算和解释Kendall的秩相关系数。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2018-07-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习自然语言处理

【干货】GRU神经网络

前用的最多的三种神经网络是CNN,LSTM,GRU。其中,后两者都是RNN的变种,去年又给RNN发明了个SRU(优点是train RNN as fast as ...

498110
来自专栏量化投资与机器学习

【世界读书日】2018版十大引用数最高的深度学习论文集合

14730
来自专栏数据小魔方

Stata特别篇(下)——多变量图表汇总!

今天跟大家分享Stata特别篇的下篇——多变量图表汇总! 在多变量图表中,增加的变量仅仅限于定距变量,也可以是定类变量。 打开数据集: use "D:\Sta...

82650
来自专栏人工智能头条

递归神经网络不可思议的有效性(上)

33740
来自专栏AI研习社

无监督聚类问题中,如何决定簇的最优数量?

编者按:聚类问题有一大经典难题:没有数据集的真实分类情况,我们怎么才能知道数据簇的最优数目? 本文会谈谈解决该问题的两种流行方法:elbow method(肘子...

37180
来自专栏UAI人工智能

深度学习入门教程 第二讲

40780
来自专栏专知

深度学习文本分类方法综述(代码)

【导读】本文是数据科学家Ahmed BESBES的一篇博文,主要内容是探索不同NLP模型在文本分类的性能,围绕着文本分类任务,构建当前主流的七种不同模型:用词n...

1.4K30
来自专栏ATYUN订阅号

【学术】一篇关于机器学习中的稀疏矩阵的介绍

AiTechYun 编辑:Yining 在矩阵中,如果数值为0的元素数目远远多于非0元素的数目,并且非0元素分布无规律时,则称该矩阵为稀疏矩阵;与之相反,若非0...

72140
来自专栏ATYUN订阅号

基于递归网络的语言模型

在使用像LSTM或GRU这样的递归神经网络时,有许多设计决策要做。我进行了一些实验,看看在Text8数据集中运行效果如何(数据集:http://mattmaho...

33050
来自专栏机器之心

教程 | 一个基于TensorFlow的简单故事生成案例:带你了解LSTM

选自Medium 机器之心编译 参与:Ellan Han、吴攀 在深度学习中,循环神经网络(RNN)是一系列善于从序列数据中学习的神经网络。由于对长期依赖问题...

46490

扫码关注云+社区

领取腾讯云代金券