跳到正文
百沐一下百沐一下
本节目录

相关分析:Pearson 还是 Spearman

跟完这篇,面对「这两个变量有没有关系」,您能自己判断该用 Pearson 还是 Spearman,用 R 跑出相关系数并读懂它,知道相关到哪一步就不能再往「因果」上说,还会读一张相关热图。

「相关」是最常被用、也最常被误用的分析之一。选错系数、或把「相关」当成「因果」,都会让结论站不住。这篇给您一套「先看图、再选系数、最后守住边界」的顺序,而不是上来就 cor()

两种系数在测什么

Pearson 和 Spearman 都给出一个 -1 到 1 之间的数:正号表示同向变(一个大另一个也大),负号表示反向变,绝对值越接近 1 越强,接近 0 表示没有这种关系。但它们测的「关系」并不一样。

  • Pearson 相关(r):测两个变量之间的线性关系,直接用原始数值计算。
  • Spearman 秩相关(ρ):先把每个变量各自转成秩次(第几名),再对秩次算相关。它测的是单调关系——只要「一个涨另一个也大体跟着涨」就行,不要求是直线。

放在一张表里对比:

维度Pearson(r)Spearman(ρ)
测的关系线性单调(含弯曲但同向的关系)
适用数据连续连续,或有序等级(如分期 I/II/III)
对离群值敏感,一个极端点就能带偏稳健,转秩后极端值影响被压平
分布前提做显著性检验/置信区间时,近似要求双变量正态不要求正态
怎么算用原始值先转秩,再算

一句话记忆:关系是直线、数据干净且大致正态,用 Pearson;关系弯一点、有离群、偏态或是等级数据,用 Spearman。

先画散点图

选系数之前,务必先画散点图。一个数字(相关系数)会把很多信息抹平,图能一眼看出该用哪个、甚至该不该用。

plot(df$x, df$y)                 # 最快的一眼
# 或用 ggplot2 加一条趋势线看形状
library(ggplot2)
ggplot(df, aes(x, y)) +
  geom_point() +
  geom_smooth(method = "loess")  # loess 平滑,看关系是直是弯

看图时重点关注三件事,它们正好对应选系数的判断:

  1. 形状是直还是弯:大致沿直线 → Pearson 合适;明显弯曲但一路同向(单调) → Spearman 更合适。
  2. 有没有离群点:有几个远离主群的点时,Pearson 容易被它们带偏,Spearman 更稳。
  3. 是不是根本没有单调关系:这一点最容易被忽略——如果关系是「先升后降」的 U 形,两种系数都可能算出接近 0,但这不代表没关系,只代表「没有单调关系」。这时相关系数本身就不是合适的工具。

经典的 Anscombe's quartet 就是提醒:四组数据的 Pearson r 几乎一样,散点图却完全不同(有的是直线,有的被一个离群点撑起来,有的是曲线)。永远别用一个相关系数替代看图。

三步判断该用哪个

把上面的观察收敛成一条可照走的流程:

  1. 先看数据类型:只要有一列是有序等级(而非连续量),直接用 Spearman。
  2. 再看散点图形状:近似直线走 Pearson,单调但弯走 Spearman。
  3. 最后看离群与分布:有明显离群点、或分布明显偏态、样本又不大时,倾向 Spearman;关系是直线、数据干净、样本量够,用 Pearson。

拿不准时,一个常见做法是两个都算、对照着看:若两者接近,说明结论稳;若差很多,多半是离群点或非线性在作怪,回头看图找原因。

还有第三个选项值得知道:Kendall's τ 也是基于秩的相关,和 Spearman 用途相近,在样本量小、或并列值(tie)很多时被认为更稳一些。R 里 method = "kendall" 即可。

在 R 里跑一遍

cor.test(),它同时给出相关系数和显著性检验(比只给系数的 cor() 信息更全):

# Pearson:线性、近似正态、无强离群
cor.test(df$x, df$y, method = "pearson")

# Spearman:单调、非正态、有离群或等级数据
cor.test(df$x, df$y, method = "spearman")

# Kendall:小样本或并列值多时
cor.test(df$x, df$y, method = "kendall")

输出里挑这几项读:

输出项含义怎么看
cor / rho / tau相关系数(估计值)符号看方向,绝对值看强弱
p-value显著性p < 0.05 常作为「关系不为 0」的判定门槛
95 percent confidence interval系数的置信区间区间是否跨过 0、有多宽

几点要提醒:

  • p 小 ≠ 关系强。样本量很大时,即使 r 只有 0.1(几乎没有实际意义)也可能 p < 0.05要同时看系数大小,别只看 p。p < 0.05 是常用惯例、非铁律,请按研究场景和多重比较情况调整,见 多重检验校正。)
  • 置信区间只有 Pearson 默认给cor.test() 对 Spearman/Kendall 默认不输出置信区间,只给系数、检验统计量和 p 值。
  • Spearman 遇到并列值会报 warningcannot compute exact p-value with ties)——这是提示它改用近似算法,通常不影响结论,知道即可。

至于「系数多大算强」,不同领域习惯不同。下面是一个粗略参考,请把它当经验尺度、而非硬门槛,务必结合专业背景判断:

|系数|粗略解读
< 0.3
0.3 – 0.5中等
> 0.5较强

相关不等于因果

这是整篇最重要、也最容易越界的一节。相关只说「两者一起变」,不说「谁导致谁」。 看到一个显著的相关,至少有四种可能,因果只是其中之一:

  • X 导致 Y,或反过来 Y 导致 X——相关本身分不清方向。
  • 有第三个混杂因素 Z 同时影响 X 和 Y,让它们看起来相关(如「冰淇淋销量」和「溺水人数」相关,背后是「气温」)。
  • 纯属巧合:变量足够多时,总能碰上一些毫无道理却数字上相关的对子。
  • 由离群点或子群拉出来的假象:几个极端点、或数据里混着两个人群,都可能造出(或掩盖)相关。

后一种里有个经典陷阱——Simpson's paradox(辛普森悖论):在合并数据里看到的相关方向,在每个子群内部可能完全相反。所以分析前想清楚数据里有没有该分开看的分组。

要想从相关走到因果,靠的不是更漂亮的系数,而是研究设计:随机对照实验、控制混杂因素的回归、或有明确时间先后与机制支持的证据。报告时如实写「X 与 Y 显著相关」,而不要悄悄升级成「X 引起 Y」——这条边界守住了,结论才可信。

相关热图怎么读

变量一多,就不是两两看,而是把所有变量两两之间的相关系数排成一个矩阵,再用颜色画成热图,一眼看清谁和谁一起变。

# 一次算出所有列两两的相关矩阵
M <- cor(df, method = "spearman", use = "pairwise.complete.obs")
# use = "pairwise.complete.obs":对每一对变量各自用其非缺失样本

# 画图:corrplot 或 pheatmap 都常用
library(pheatmap)
pheatmap(M)                        # 带聚类的相关热图

读这张图记住几条:

  • 颜色 = 方向和强度:一种色系(如红)表示正相关、另一种(如蓝)表示负相关,颜色越深越强;接近 0 的格子颜色最淡。看图前先在图例上确认哪种色是正、哪种是负。
  • 对角线永远是 1:变量和自己完全相关,所以对角线是最深的一条,别去解读它。
  • 矩阵是对称的:左下和右上是镜像,看一半即可。
  • 成块的深色区:如果做了聚类,颜色相近的变量会被排到一起,形成沿对角线的「色块」——这些块就是彼此高度相关的一组变量,往往提示它们测的是同一类信息。

热图看的是「谁和谁相关」的整体图景,具体某一对到底有多强、显不显著,还是回到 cor.test() 逐对确认。相关热图的配色、注释条、聚类等更多讲究,和普通表达热图相通,见 热图聚类:注释条与配色全解

在平台上跑一遍

上面这套判断不必手动敲代码。在百沐一下的【智能统计】里,上传一张整洁数据表,用一句话说清目的,例如「分析基因 A 表达量和患者年龄的相关性」或「画出这些指标的相关热图」,它会替您先看数据形状、在 Pearson 和 Spearman 之间选好系数、跑出系数与 p 值、画好散点图或相关热图,并附上可复现的 R 代码供核对;选哪个系数、要不要分组,它也会先跟您确认。

去试试:app.baimuyixia.com,或先看 智能统计使用指南

相关