【从零到一】一篇文章让你彻底玩转Spearman相关性矩阵
【从零到一】一篇文章让你彻底玩转Spearman相关性矩阵
想象你是一位班主任,面前摆着全班同学的身高、体重、数学成绩、语文成绩、体育成绩和睡眠时间等数据。你想知道:这些变量之间,到底有没有关系?
你可能会发现,身高越高,体重也越重——这似乎是常识。但“学习时间”和“成绩排名”之间呢?“睡眠时间”和“体育成绩”之间呢?
这时候,Spearman相关性矩阵就像一个数据世界的“雷达扫描仪”,能把所有变量之间的“默契程度”一次性扫描出来,并用一张直观的“热力图”展现给我们。
简单来说,相关性矩阵是一个表格,其中包含了数据框中各列之间所有成对的相关系数。Spearman版本测量的是数据等级之间的单调关系。
全文思维导图:
一、概念理解:Spearman相关 vs Pearson相关
1. 先认识“相关性”
相关性分析是一种统计方法,用于衡量两个变量因素之间的密切程度。市面上主流的两种“关系测量仪”分别是:
- Pearson相关系数:衡量两个变量之间是否呈直线关系(线性关系)。
- Spearman相关系数:衡量两个变量之间是否呈趋势一致关系(单调关系)。
2. 为什么抛弃Pearson,拥抱Spearman?
Pearson同学是个“强迫症”:它要求数据服从正态分布,而且只能识别笔直的线性关系。
如果你强行用Pearson去测量“细菌增长曲线”(指数级变化),Pearson会说:“你们俩不是直线关系,我看不懂!”
但Spearman同学则很灵活,它不关心数据分布,也不要求是直线,只问一句:“你变大时,他是不是也变大(或变小)?”
更关键的是,Pearson怕异常值,而Spearman很“健壮”。有个经典案例:
- 没有离群点时,Pearson和Spearman都算出 0.44
- 加入一个离群点后,Pearson猛跳到 0.69,而Spearman稳如泰山,仍是 0.44
所以,Spearman擅长在不完美的、嘈杂的现实数据中捕捉真实的趋势。
| 特性 | Pearson 相关系数 | Spearman 相关系数 |
|---|---|---|
| 度量关系 | 线性关系 | 单调关系 |
| 输入数据 | 原始值 | 数据排名 |
| 对异常值敏感度 | 高 | 低(基于排名) |
| 最佳适用场景 | 近似线性关系 | 偏态或嘈杂数据集 |
二、原理剖析:Spearman的“排名江湖”
Spearman相关性的全称是Spearman秩相关系数。它的核心思路就是不看数据绝对值,只看排名。
1. 一个生动的“武林大会”比喻
让我们用故事来理解它的计算过程:
江湖上举办比武大会,统计了每位侠客的内力(X)和轻功(Y)两项数值。
- 张无忌:内力1000,轻功900
- 周芷若:内力700,轻功500
- 韦小宝:内力50,轻功95
- 令狐冲:内力850,轻功880
- 灭绝师太:内力900,轻功300
Spearman的“裁判法则”分四步走:
① 排座次(编秩)
将所有人按内力值从低到高排“内力榜”,按轻功值从低到高排“轻功榜”。
- 内力榜:韦小宝(1)、周芷若(2)、令狐冲(3)、灭绝师太(4)、张无忌(5)
- 轻功榜:灭绝师太(1)、周芷若(2)、韦小宝(3)、张无忌(4)、令狐冲(5)
② 算差距(求秩差 d)
计算每个人的“内力排名”和“轻功排名”之间的差距:
- 张无忌:5 - 4 = 1
- 灭绝师太:4 - 1 = 3
- 令狐冲:3 - 5 = -2
③ 平方求和(∑d²)
将所有秩次差的平方求和,计算公式为:ρ = 1 - (6∑d²) / [n(n²-1)]
若该值为 0,即完全正相关;值越大,相关性越弱。
④ 得出结论
由此可知,只要用排名排出来,Spearman就能计算。
2. 正式定义
Spearman等级相关系数(通常用希腊字母 ρ 或 rs 表示),是衡量两个变量之间单调关系强度和方向的非参数指标。其值范围从 -1 到 +1:
- +1:完全的单调递增关系
- -1:完全的单调递减关系
- 0:没有单调关系
3. 什么是“单调关系”?
单调关系就是指变量之间“同向变化”或“反向变化”,但变化速度不要求恒定。
单调关系可以分为三类:
- 单调增加:X增大,Y也增大,但不一定是直线。比如“年龄”和“血压”,年纪越大血压总体趋势是升高的,但增长速率可能是波动的。
- 单调递减:X增大,Y却减小。比如“汽车车龄”和“价格”,通常越旧越便宜,但不是每年降固定的金额。
- 非单调关系:X变大,Y时而变大时而变小,毫无章法。比如“喝水量”和“心情”,没有固定的变化趋势。
三、解读矩阵:从数字到热力图
理解了单个的Spearman ρ,我们再来看相关性矩阵。它是一个把所有变量两两配对计算的ρ值,整齐排列成一个正方形矩阵。
1. 矩阵的核心特征
这个矩阵有几个特点:
- 正方形:行和列对应同一组变量。
- 对称:右上和左下的数值完全一样,因为 X 和 Y 的相关性等于 Y 和 X 的相关性。
- 对角线都是 1:因为任何变量和自己的相关性都是完美的 1。
2. 为什么需要矩阵?——从“蜘蛛网”到“清晰地图”
假设你要分析 50 个基因之间的相互作用。如果单独查看每对基因的相关系数,你需要看C(50,2) = 1225对。这无异于盯着一团乱麻找规律。
而 Spearman 相关性矩阵将所有这些成对关系有序地组织起来。更进一步,我们可以把它画成热力图(Heatmap),用颜色深浅代表相关性大小。热力图通过将矩阵转化为空间模式,可以一目了然地被解读。
淡蓝色块对应正相关系数,土黄色块对应负相关系数,颜色的深浅表示相关系数的大小,色块上还会标注相关系数数字,这样我们就能快速看到变量之间的相关关系。
通过热力图,你可以一眼看出哪些基因的表达是“同进同退”的(正相关,红色区域),哪些是“你升我降”的(负相关,蓝色区域),哪些是“各玩各的”(接近 0,白色区域)。
四、实战环节:用Python打造你的Spearman热力图
下面进入实操环节,用Python代码把“智商、学习时间、游戏时间、成绩”的例子变成一张看得见的热力图。
1. 创建数据集
importpandasaspdimportnumpyasnp# 模拟一个小学生班级的数据np.random.seed(42)data={'智商':np.random.normal(100,15,100),# 正态分布'学习时间':np.random.uniform(1,10,100),# 均匀分布'游戏时间':np.random.exponential(2,100),# 指数分布(偏态)'成绩':np.random.randint(40,100,100)# 随机整数}df=pd.DataFrame(data)print(df.head())2. 计算Spearman相关性矩阵
这一步非常简单,Pandas已经内置了计算函数:
spearman_corr=df.corr(method='spearman')print(spearman_corr)仅需一行代码df.corr(method='spearman'),DataFrame 中数值列两两之间的 Spearman 相关系数就被计算了出来。
3. 绘制热力图
importseabornassnsimportmatplotlib.pyplotasplt plt.figure(figsize=(8,6))sns.heatmap(spearman_corr,annot=True,# 在格子内显示数值cmap='coolwarm',# 红蓝配色center=0,# 以0为颜色中点square=True,# 正方形格子fmt='.2f')# 保留两位小数plt.title('Spearman 相关性矩阵热力图',fontsize=16)plt.show()4. 解读结果
| 相关系数绝对值范围 | 关系强度 |
|---|---|
| 0.8 - 1.0 | 极强相关 |
| 0.6 - 0.8 | 强相关 |
| 0.4 - 0.6 | 中等相关 |
| 0.2 - 0.4 | 弱相关 |
| 0.0 - 0.2 | 极弱或无相关 |
| 符号 | 含义 |
|---|---|
| + (正) | 同向变化 |
| - (负) | 反向变化 |
5. 补充:显著性检验
相关性分析中,只看系数大小是不够的,还需要进行统计检验,以确保这种相关性不是随机产生的。可以使用 SciPy 的spearmanr()函数同时输出相关系数和 p 值。通常,当 p 值小于 0.05 时,我们才认为相关性在统计上是显著的。
五、总结回顾
- Spearman 相关性用来衡量两个变量之间的单调关系,基于数据排名计算,而非原始值。
- 它的优势在于:不要求数据服从正态分布,对异常值不敏感,能捕捉非线性但趋势一致的关系。
- 计算过程就像“武林大会排座次”:先给两组数据分别排名,再计算排名之间的差距,代入公式即可。
- 相关性矩阵将多个变量两两之间的 Spearman 相关系数整齐排列成一个方形表格,是探索数据集内部结构的强大工具。
- 通过 Python 的 Pandas 和 Seaborn 库,我们只用几行代码就能将矩阵可视化为一目了然的热力图。
- 最后,别忘了结合p 值来判断相关性的统计显著性。
当你的数据不服从正态分布、存在异常值或关系不完全是线性时,请果断选择 Spearman 相关性分析,它会给出比 Pearson 更真实可靠的结果。
六、 小结与下一步学习建议
- 一句话总结:Spearman相关性矩阵,就是不看数据大小只看排名的“关系雷达图”,专门用来发现数据之间“你大我也大”或“你小我反大”的趋势。
- 下一步方向:
- 学习Kendall’s tau:另一种秩相关方法,对小样本和存在大量相同值的数据更稳健。
- 了解偏相关:在控制其他变量影响的前提下,计算两个变量的“净”相关性。
- 掌握聚类热图:在热图上对相似变量进行聚类排序,更容易发现数据中的“模块结构”。
Spearman 相关性矩阵,就像给你的数据拍了一张 X 光片,让隐藏在数字背后的复杂关系瞬间变得一目了然。现在就打开你的 Jupyter Notebook,用这篇文章的方法试试看吧!
