打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一文带您了解相关性分析:常见的相关系数及Python示例
userphoto

2023.07.29 浙江

关注

什么是相关性分析

相关性分析也称为双变量分析,主要关注找出变量之间是否存在关系,然后确定该关系的大小和作用。相关性分析在数据分析中扮演着关键的角色,帮助我们深入理解数据之间的关系,为更明智的决策提供依据。通常使用相关系数来衡量变量之间的相关程度。常见的相关系数包括皮尔逊相关系数(Pearson's correlation coefficient)、斯皮尔曼秩相关系数(Spearman's rank-order correlation coefficient)、肯德尔秩相关系数(Kendall's tau correlation coefficient)等。

  • 皮尔逊相关系数(Pearson's correlation coefficient )是最为常见的一种,它用于衡量两个变量之间的线性关系程度。其取值范围为-1到1。当相关系数接近1时,说明两个变量之间的正相关性非常强;当相关系数接近-1时,说明两个变量之间的负相关性非常强;当相关系数接近0时,说明两个变量之间没有线性关系。

  • 斯皮尔曼秩相关系数(Spearman's rank-order correlation coefficient)在应用于包含某种自然顺序的变量时最为适用,例如起薪与不同学位(高中、学士、硕士等)之间的关系,或者年龄与收入之间的关系。它不对数据的分布做任何假设。

  • 肯德尔(Kendall's tau correlation coefficient)秩相关系数,它用于排名配对。肯德尔相关系数的目的是确定两个变量之间的依赖程度。如果相关系数的值为零,可以认为变量X和Y彼此独立。

最重要的是:相关性并不代表因果关系。相关性仅仅表明两个变量之间存在某种联系或关联,并不能说明其中一个变量的变化导致另一个变量发生变化的原因。因此,在进行相关性分析时,我们必须同时考虑其他因素,以免误判。

皮尔逊相关系数

由卡尔·皮尔逊从弗朗西斯·高尔顿在1880年代提出的一个相似却又稍有不同的想法演变而来,并且其数学公式由奥古斯特·布拉菲(Auguste Bravais)于1844年推导出和发表。这个相关系数也称作“皮尔森相关系r”。

皮尔逊相关系数在范围−1 ≤ r ≤ 1内取任意实数值。

  • 最大值 r = 1 对应于x和y之间存在完美的正相关线性关系,即较大的x值对应于较大的y值,反之亦然。值 r > 0 表示x和y之间存在正相关关系。

  • 值 r = 0 对应于x和y之间不存在线性关系。

  • 值 r < 0 表示x和y之间存在负相关关系。

  • 最小值 r = −1 对应于x和y之间存在完美的负相关线性关系。即较大的x值对应于较小的y值,反之亦然。

Pearson's r ValueCorrelation Between x and yequal to 1perfect positive linear relationshipgreater than 0positive correlationequal to 0no linear relationshipless than 0negative correlationequal to -1perfect negative linear relationship

示例

下面的示例是对包括语文、数学、英语、物理和化学在内的学科成绩表进行相关性分析,探究学科之间是否存在关联性。通过皮尔逊相关系数等方法,我们将揭示学科成绩之间的相关性程度。

  • 利用SQL加载数据到DataFrame ,添加小的随机数作为数据脱敏,不影响相关性分析

  • 利用dataFrame 相关函数corr函数进行皮尔逊相关系数矩阵输出:

df3.corr()  ## Pearson's r

从相关系数矩阵可以观察到学科成绩之间普遍存在着一定程度的正相关性。具体而言:

  • 物理和数学成绩之间的相关系数为0.858,表示这两门科目成绩之间呈现较强的正相关关系。

  • 物理和化学成绩之间的相关系数为0.868,也呈现较强的正相关性。

  • 数学和化学成绩之间的相关系数为0.839,同样表现出较强的正相关关系。

  • 英语和数学、化学、物理成绩之间的相关系数分别为0.821、0.794、0.802,均显示了这门学科与其他科目之间的正相关性。

  • 语文与其他学科的相关系数在0.715到0.737之间,虽然略低于其他学科之间的相关性,但仍然表现出一定程度的正相关关系。

综上所述,该学科成绩表中的学科间普遍存在一定的正相关性,这意味着学生在某个学科表现较好时,其他学科的成绩也可能相对较好。这种相关性可以为教育者和学生提供有价值的信息,帮助他们制定更有效的学习策略和学科优化安排。但需要注意的是,相关性并不代表因果关系,学科成绩之间的关联可能受到其他复杂因素的影响,因此在做出任何决策时,仍需综合考虑其他因素。

什么是秩相关系数

秩相关系数(Coefficient of Rank Correlation),又称等级相关系数,反映的是两个随机变量的的变化趋势方向和强度之间的关联,是将两个随机变量的样本值按数据的大小顺序排列位次,以各要素样本值的位次代替实际数据而求得的一种统计量。它是反映等级相关程度的统计分析指标,常用的等级相关分析方法有斯皮尔曼(Spearman)秩相关系数和肯德尔(Kendall)秩相关系数等。这里秩是秩序的秩,或者说排名、顺序、等级的意思(ranked或者ranking)。

考虑两个随机变量X和Y,如果秩相关系数为正,则Y 随着X的增加而增加;如果秩相关系数为负,则Y随着X的增加而减小;如果秩相关系数为0,则表示随着Y的增减变化跟X的增减变化没啥关系。当Y和X越来越接近严格单调的函数关系时,秩相关系数在数值上就越来越大。当秩相关系数为1或者-1时,就表明Y随着X的增加而严格单调增加或单调减小。

在实际应用中,有时获得的原始资料没有具体的数据表现,只能用等级来描述某种现象,要分析现象之间的相关关系,就只能用秩相关系数。

斯皮尔曼秩相关系数

斯皮尔曼秩相关系数(The Spearman's rank coefficient of correlation)是秩相关(rank correlation)的一种非参数度量(nonparametric measure)。得名于英国统计学家Charles Spearman,通常记为希腊字母'ρ' (rho)( often called Spearman's rho)。

在讨论斯皮尔曼相关系数之前,首先要理解皮尔逊相关(Pearson's correlation),斯皮尔曼相关可以看作是皮尔逊相关的非参数版本(nonparametric version)。皮尔逊相关是关于两个随机变量之间的线性关系强度的统计度量(statistical measure),而斯皮尔曼相关考察的是两者单调关系(monotonic relationship)的强度,通俗地说就是两者在变大或变小的趋势上多大程度上保持步调一致,哪怕没有保持比例关系。计算皮尔逊相关系数时使用的是数据样本值本身,而计算斯皮尔曼相关系数使用的是数据样本排位位次值(有时候数据本身就是位次值,有时候数据本身不是位次值,则在计算斯皮尔曼相关系数之前要先计算位次值)。

能够适用皮尔逊相关的场合当然是优先使用皮尔逊相关,但是在有些场合,皮尔逊相关所需要的前提假设不能得到满足,这时就可以考虑使用斯皮尔曼相关,比如说以下一些情况下:

  • 如果你的数据展现的是非线性关系,或者不是正态分布的。

  • 如果至少有一方数据是序数类型(ordinal)而非数值类型。比如说,如果数据的赋值为'第一、第二、第三、... '你就是在处理序数类型数据。更具具体一点的例子就是,比如说你考察两个球队在历年联赛中的战绩之间的关系,那么你得到的数据可能是这样的:A队在2010~2020年间的联赛排名为{1,2,4,5,...,2}, B队在2010~2020年间的联赛排名为{2,1,3,6,...,4}。这两个数据就是序数类型的数据,考察它们的相关性你使用皮尔逊相关系数就不妥当。

  • 如果数据中有明显的异常值(outliers)。与皮尔逊相关不同,斯皮尔曼相关对于异常值不太敏感,因为它是基于排序位次进行计算,实际数值之间的差异大小对计算结果没有直接影响。

计算公式

取决于观测数据中有没有位次相同的数据(the same rank assigned to two or more observations),斯皮尔曼相关系数可以通过以下两种方法进行计算。当没有位次相同的数据时,可以用一个更简单的公式,如下所示:

其中: di 表示第i个数据对的位次值之差 n 总的观测样本数

如果观测样本中存在位次相同的数据,则需要使用如下所示的全版本的计算公式:

示例

  • 为了展示手工计算斯皮尔曼秩相关系数,我们任意选出10条物理和语文成绩进行分析。

import seaborn as snssns.scatterplot(x='pyts', y='chin', data=df)
  • 计算d 和d^2:

df['pyts_rank'] = df['pyts'].rank()df['chin_rank'] = df['chin'].rank()df['d'] = df['pyts_rank'] - df['chin_rank']df['d2'] = df['d'].apply(lambda x: x*x)df
  • 计算Spearman's Rank Correlation Coefficient

def spearman_rank(df):    sum_d2 = sum(df['d2'])    n = len(df['d2'])    r = 1 - sum_d2*6/((n*n-1)*n)    return rr = spearman_rank(df)print(f'Spearman's Rank Correlation Coefficient is: {r}')
  • corr函数 计算Spearman's Rank Correlation Coefficient:

肯德尔秩相关系数

肯德尔(Kendall)的Tau相关系数(Kendall's tau correlation coefficient)是一种用于衡量两个变量之间等级关系(顺序关系)的相关性指标。它不依赖于数据的具体数值,而是根据数据的秩次(排序)来计算相关性。肯德尔Tau相关系数常用于对有序等级数据进行相关性分析。

考虑两个变量X和Y,假设有n个数据点。首先,对X和Y的每个数据点进行秩次排名,得到它们的秩次Rx和Ry。然后,计算出对所有两两数据点(i点,j点)之间的秩次对(Rxi-Rxj, Ryi-Rxj)中有多少对秩次对符号(正负号)相符的对和秩次对符合(正负号)不相符的对。秩次对相符的对表示在两个变量中,数据点的排序顺序是一致的,秩次不相符的对表示数据点在两个变量中的排序顺序是不一致的。

然后,根据秩次相符对数目和秩次不相符对数目,计算肯德尔Tau相关系数(τ):

τ = (秩次相符对数目 - 秩次不相符对数目) / (秩次相符对数目 + 秩次不相符对数目)

肯德尔Tau相关系数的取值范围在-1到1之间。当τ接近于1时,表示两个变量的秩次之间存在完全的正相关关系;当τ接近于-1时,表示两个变量的秩次之间存在完全的负相关关系;当τ接近于0时,表示两个变量的秩次之间几乎没有相关关系。

肯德尔Tau相关系数适用于有序等级数据,特别是当数据之间存在等级关系,但数值之间的差异不具有实际意义或不可测量时,它便是一种比较合适的相关性度量方法。

示例

  • 引入示例数据

  • 计算秩次

df['pyts_rank'] = df['pyts'].rank()df['chin_rank'] = df['chin'].rank()df
  • 计算肯德尔(Kendall's tau correlation coefficient)秩相关系数

s=0for i in range(df.shape[0]):  for j in range(i+1,df.shape[0]):    if (df['pyts_rank'][i]-df['pyts_rank'][j])*(df['chin_rank'][i]-df['chin_rank'][j])>0:      s+=1    else:      s-=1print('Kendall\'s tau Rank Correlation Coefficient is:',s/(df.shape[0]*(df.shape[0]-1))*2)
  • corr函数 计算肯德尔(Kendall's tau correlation coefficient)秩相关系数

相关性≠因果性

虽然相关性分析在数据分析中非常重要,但我们需要牢记一些关键的注意事项。其中最重要的一点是:相关性并不代表因果关系。两个变量之间的相关性只是表明它们之间存在某种联系或关联,而不能确定其中一个变量的变化一定会导致另一个变量发生变化。因此,在进行相关性分析时,我们必须同时考虑其他因素,以避免误判。

下面分别举一个生活中和数据分析工作中实际场景的例子,以更好地理解这个概念。

生活中的例子

假设我们观察到城市的冰淇淋销量与游泳池的使用量之间存在正相关性。即随着气温升高,冰淇淋销量和游泳池的使用量都增加。然而,我们不能简单地得出结论认为冰淇淋销量的增加会直接导致游泳池使用量的增加,或者游泳池使用量的增加是会导致冰淇淋销量增加。实际上,这两者之间可能只是因为炎热的天气而导致的结果,而不能把其中一个的变化作为另外一个发生变化的原因。

数据分析中的例子

在一份销售数据的分析中,我们可能会发现销售额与广告投入之间存在正相关性。然而,仅仅依据相关性并不能确定广告投入是直接导致销售额增加的原因。也可能有其他因素,如产品品质、市场需求等,这些因素同样会对销售额产生影响。因此,在进行决策时,我们需要综合考虑这些因素,而不是仅仅依赖于相关性分析的结果。

相关性分析的局限性

尽管相关性分析可以帮助我们理解不同变量之间的关系,但也存在一些局限性,主要体现在以下几个方面:

  1. 相关性分析只能衡量线性关系:相关性分析主要适用于线性关系的测量,对于非线性关系,其表现可能甚至不如预期。在存在非线性关系的情况下,使用其他的相关系数或采用非线性分析方法可能更为合适。

  2. 仅适用于两个变量之间的关系:相关性分析只能测量两个变量之间的关系,而现实中往往存在多个变量之间的相互作用。在这种情况下,我们需要采用更为复杂的统计模型,如回归分析等,用来探究多个变量之间的关联。

  3. 相关性可能是偶然的:在一些情况下,两个变量之间的相关性可能只是偶然的,而并不表示它们之间存在真正的因果关系。在进行相关性分析时,我们必须谨慎,而不应该轻易将相关性解释为因果关系,避免产生误导性的结论。

相关性分析是数据分析中一个非常重要的环节,它可以帮助我们了解数据之间的关系,为我们做出更好的决策提供依据。在实际应用中,我们需要根据具体问题来选择恰当的相关系数进行分析,并注意相关性分析的局限性和相关注意事项。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何使用 cor() 计算 R 中的相关系数
统计学之三大相关性系数(pearson、spearman、kendall)
关于相关性和特征选择的重要性
BMJ 统计问题(5):描述两个定量数据线性关联程度合适方式是什么?
别说相关太简单,且听松哥说相关
【R分享|实战】科白君教你相关性分析及其绘图
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服