前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python计算非参数的秩相关

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

作者头像
AiTechYun
发布2018-07-27 14:31:10
2.6K0
发布2018-07-27 14:31:10
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号

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个随机浮点值的第二个样本,并将其加上到第一个样本以创建关联。

代码语言:javascript
复制
# prepare data
data1 = rand(1000) * 20
data2 = data1 + (rand(1000) * 10)

完整代码如下:

代码语言:javascript
复制
# 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值。

代码语言:javascript
复制
# calculate spearman's correlation
coef, p = spearmanr(data1, data2)

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

完整示例如下:

代码语言:javascript
复制
# 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%置信度),并且我们可以驳回样本不相关的零假设。

代码语言:javascript
复制
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)两个样本之间没有关联。

代码语言:javascript
复制
# calculate kendall's correlation
coef, p = kendalltau(data1, data2)

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

下面列出了完整的示例:

代码语言:javascript
复制
# 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值接近零(打印为零),这意味着我们可以放心地驳回样本不相关的零假设。

代码语言:javascript
复制
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的秩相关系数。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 秩相关
  • 测试数据集
  • Spearman秩相关
  • Kendall秩相关
  • 进一步阅读
  • API
  • 维基百科
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档