python 斯皮尔曼相关系数_使用Python计算非参数的秩相关
相关性是两个变量之间关联的度量。
当两个变量都有良好理解的高斯分布时,很容易计算和解释。而当我们不知道变量的分布时,我们必须使用非参数的秩相关(Rank Correlation,或称为等级相关)方法。
在本教程中,你将了解用于量化具有非高斯分布变量之间关联的秩相关方法。
完成本教程后,你会学到:
秩相关方法的工作原理以及方法是否适用。
如何在Python中计算和解释Spearman的秩相关系数。
如何在Python中计算和解释Kendall的秩相关系数。
本教程分为4个部分; 他们是:
秩相关
测试数据集
Spearman秩相关
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的秩相关系数。
python 斯皮尔曼相关系数_使用Python计算非参数的秩相关相关推荐
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- 机械专业与python的联系_使用python进行机械设计计算
分析 这一过程的核心在于机械设计,python的编程的用途有两个 1.当作计算器,缺点在于没有casio计算器那样的自然显示,优点在于可以反复调用,使用lambda函数简化运算 2.当设计需要修改时, ...
- python实现案例_基于Python实现相关分析案例
节选自<Python预测之美:数据分析与算法实战>. 相关关系是一种非确定的关系,就好像身高与体重的关系一样,它们之间不能用一个固定的函数关系来表示.而相关分析就是研究这种随机变量间相关关 ...
- python 免费空间_用python做大数据
不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...
- python硬件交互_对Python的交互模式和直接运行.py文件的区别详解
对Python的交互模式和直接运行.py文件的区别详解 看到类似C:\>是在Windows提供的命令行模式,看到>>>是在Python交互式环境下. 在命令行模式下,可以执行p ...
- python集群_使用Python集群文档
python集群 Natural Language Processing has made huge advancements in the last years. Currently, variou ...
- python机器学习预测_使用Python和机器学习预测未来的股市趋势
python机器学习预测 Note from Towards Data Science's editors: While we allow independent authors to publish ...
- python 打印类型_让Python输出更漂亮:PrettyPrinter
PrettyPrinter是Python 3.6 及以上版本中的一个功能强大.支持语法高亮.描述性的美化打印包.它使用了改进的Wadler-Leijen布局算法,和Haskell打印美化库中的pret ...
最新文章
- centos下设置node.js开机启动(并且启动自己的项目js)
- 使用纯C++实现SQL Server2005 数据库读写操作详细步骤
- Freemarker的Null处理
- 如何将结婚当作项目来管理
- javascript中的异常处理
- java学习记录【day12】
- OV7725的帧率和PCLK寄存器设置
- yy神曲url解析php_php解析url的三个示例
- SQL Server MDS(主数据服务)介绍
- vscode怎么全局搜索_VS Code 新版本发布!支持远程开发、同步设置等新特性
- 计算机表格怎么加减乘除,如何在Word表格中进行加减乘除
- python-threading.Event实现事件功能--汽车过红绿灯(转载)
- RK3288_Android7.1调试uart串口屏
- jquery对象与js对象的相互转换
- 中国知名it软件开发外包公司有哪些呢
- cad墙线打断lisp_CAD墙体如何打断,用tr命令不行,打散的话墙线会错位?
- Richard Hamming:You and your research
- java 内存 监控_Java内存监视
- CVE-2020-1472 Netlogon特权提升漏洞分析及复现
- 一个int类型到底占多少个字节
热门文章
- springboot整合 neo4j (OGM+JPA方式操作图数据库)
- r2000s_昭阳R2000S笔记本一键重装win7系统教程
- eclipse hadoop1.2.0配置及wordcount运行
- 今天是2007年12月20号,今天心情
- 电子音乐包括电声乐器和计算机音乐,电声乐器
- 系统学习机器学习之距离的度量(一)--常见距离
- OpenGL程序VC框架:Bezier 曲线
- 应用matlab仿真几类混沌电路,典型混沌电路及分析.ppt
- Linux的文件操作
- Android App Initializer 实现方案