开启生长之旅!这是我参加「日新计划 2 月更文挑战」的第 2 天,点击检查活动概况

前言

相关性剖析算是很多算法以及建模的基础知识之一了,十分经典。关于许多特征相关关系以及相关趋势都能够利用相关性剖析核算表达。其中常见的相关性系数就有三种:person相关系数,spearman相关系数,Kendall’s tau-b等级相关系数。各有各自的用法和运用场景。当然关于这以上三种相关系数的核算算法和原理+代码我都会在我专栏里面写彻底。现在关于数学建模的专栏已经将传统的机器学习猜测算法、维度算法、时序猜测算法和权重算法写的七七八八了,有这个需求爱好的同学能够去看看。 皮尔逊相关性剖析一文详解+python实例代码

斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

一、定义

经常用希腊字母表示。 它是衡量两个变量的依赖性的非参数指标。 它利用单调方程评价两个核算变量的相关性。 如果数据中没有重复值, 而且当两个变量彻底单调相关时,斯皮尔曼相关系数则为+1或−1。斯皮尔曼相关系数被定义成等级变量之间的皮尔逊相关系数。对于样本容量为n的样本,n个原始数据被转换成等级数据,相关系数为:

斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

在实践应用或是具体题目中,变量间的连接是无关紧要的,将观测的两个变量的对应元素相减得到一个差值,则还能够将上述公式转化为:

斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

其中,di为Xi和Yi之间的等级差。 di的核算方法为:

斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

二、斯皮尔曼相关运用场景

斯皮尔曼相关系数的适用条件比皮尔逊相关系数要广,只需两个变量的观测值是成对的等级评定数据,或者是由连续变量观测数据转化得到的等级数据,不管两个变量的总体散布形态、样本容量的大小如何,都能够用斯皮尔曼等级相关系数来进行研究。只要数据满意单调关系(例如线性函数、指数函数、对数函数等)就能够运用。

斯皮尔曼相关系数对于异常值不太敏感,因为它根据排序位次进行核算,实践数值之间的差异大小对于核算结果没有直接影响。

三、斯皮尔曼相关系数核算

和上期文章运用的函数相同,能够运用pandas的函数corr:

DataFrame.corr(method='pearson',
               min_periods=1,
               numeric_only=_NoDefault.no_default)

参数阐明:

method: {‘pearson’, ‘kendall’, ‘spearman’} or callable。Method ofcorrelation。

  • pearson : standard correlation coefficient,皮尔逊系数

  • kendall : Kendall Tau correlation coefficient,肯德尔系数

  • spearman :Spearman rank correlation,斯皮尔曼系数

min_periods:int, optional。每对列所需的最小样本数。现在仅适用于Pearson和Spearman相关性。

numeric_only:bool, default True。仅包含浮点、整型或布尔型数据。

实现起来很简单

rho =df_test.corr(method='spearman')
rho

斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

热力求

plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.heatmap(rho, annot=True)
plt.title('Heat Map', fontsize=18)

斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

或者运用scipy的state函数,效果是相同的:

import numpy as np
from scipy import stats
stats.spearmanr(data1,data2)

四、斯皮尔曼相关系数的假设查验

分为两种情况:小样本和大样本

小样本情况(n ≤ 30),直接查临界值表
H0:rs = 0; H1:rs ≠ 0
运用得出的斯皮尔曼相关系数 r 与对应的临界值进行比较。

斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

大样本情况下,核算量

斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

H0:rs = 0; H1:rs ≠ 0,核算查验值z*,并求出对应的p值与0.05比较即可。