1. 皮尔逊相关到底在算什么:先把适用边界搞清楚
1.1 一句话讲透相关系数的计算逻辑
有人把皮尔逊相关当成一个“傻瓜按钮”:选两个变量,点确定,r和p就出来了。但如果你不知道r到底在算什么,后面所有解读都容易翻车。
皮尔逊相关系数r的公式本质上是“协方差除以两个变量标准差的乘积”。协方差描述的是两个变量是否“同步”变化:当X高于自身均值时,Y是不是也倾向于高于自身均值;X低于自身均值时,Y是不是也跟着低下去。这个思路本身没问题,但它有个致命短板——协方差的大小受量纲影响。同样是“同步变化”,用厘米和用米去测量,数值天差地别。除以各自标准差之后,量纲被消掉了,r就被压到-1到1之间,变成一把谁都能用的尺子。
用人话说:协方差看你俩“步调是否一致”,r则进一步看你俩“动作协调到什么程度”。r=1是完美同步,r=-1是完美反向,r=0则是完全各跳各的。
至于后面那个p值,它回答的是另一个问题:如果两个变量在总体里实际上没有相关(总体相关为0),那我们现在抽到的这份样本里出现当前这个r值(或者更极端的r值),概率有多大。p<0.05只能说明“这个相关有统计学意义,不太像纯偶然”,它完全不等于“相关很强”。这份区分是整个皮尔逊相关分析里最容易埋雷的地方,后面我会专门展开。
1.2 不是所有数据都能硬上皮尔逊
我见过太多人拿着问卷里“1-5满意度打分”顺手就做皮尔逊,或者拿性别、职业这种分类变量直接往变量框里丢。结果不是SPSS报错,就是输出一个看不懂的系数。皮尔逊相关有它明确的适用前提,任何一条不满足都可能让结果失真。
第一,两个变量都必须是连续变量,也就是等距或等比尺度。身高、得分、时间、温度、收入这类没问题。有序分类变量(比如年级排序、满意度等级1到5)严格来说更适合用斯皮尔曼等级相关,因为等级之间的“距离”并不等距,不能默认它是等距数据。无序分类变量(性别、职业、地区)则应该走卡方检验那条路。至于二分类变量,比如“是否购买”和“消费金额”之间,SPSS里用皮尔逊也能算出点二列相关,数值上等价,但报告时要写明是什么系数。
第二,两个变量之间的关系必须是线性关系。皮尔逊r衡量的是“直线式共变”,不是“曲线式共变”。典型的反例是焦虑水平与考试成绩:适度焦虑成绩最好,焦虑过低或过高都会拉低成绩,这是一个倒U型关系。如果你直接做皮尔逊,r可能趋近于0,然后你得出“焦虑与成绩无关”的错误结论。不是它们没关系,而是它们的关系不是直线。
第三,不能有离谱的异常值。样本里如果混入一个“录入错误型”的极端值,它会把相关系数往一个方向猛拽。我后面会专门演示这个破坏力。
第四,观测要独立。每个样本之间不能互相影响。同一个被试在不同时间测了好几次,再把这些重复测量放到一起做皮尔逊,就是伪重复,会人为膨胀样本量,p值会变得异常好看。
这些条件听起来多,实际上在SPSS里只需要多做十分钟的“数据体检”就能基本确认。这就是下一节要说的内容。
2. 数据体检:操作前花十分钟,省得解释时被人问住
2.1 缺失值:默认设置不一定是你要的
很多人的SPSS数据里都带着缺失值,这是常态。但在做相关分析之前,你必须想清楚一个问题:遇到缺失值时,SPSS到底该放弃谁。
在“双变量相关”对话框里点“选项”,你会看到缺失值那一栏有两个选项:“按对排除个案”和“按列表排除个案”。这两个的区别非常关键。“按对排除”的意思是:我在算变量A和变量B的相关时,只用A和B都没有缺失的那些个案;在算变量A和变量C的相关时,再看A和C都有数据的个案。好处是每个相关系数都尽量用到了更多样本,坏处是相关矩阵里不同格子的样本量可能不一样,r之间不能进行严格比较。“按列表排除”则是“一票否决”:只要这个个案在任意一个分析变量上有缺失,就整个剔除,所有相关都基于同一批个案。
我个人的习惯是:缺失率低于5%时,优先用“按列表排除”,这样整个矩阵口径一致;缺失较多但样本又金贵时,主分析用“按对排除”,同时在报告里注明每对相关的个案数(SPSS相关矩阵第三行就会输出N),方便审稿人判断。数据缺失特别严重时,别硬做相关,先考虑多重插补,但那已经是另一个话题了。
2.2 异常值:一个点能把r从0.6拽到0.2
异常值对皮尔逊相关的破坏力可以用一个简单例子感受一下:假如你有40个学生样本,学习时长和成绩的r本来是0.65,看起来很不错。但因为一次录入失误,有个学生的学习时长被多敲了一个0,从10小时/周变成了100小时/周,这一个点就足以把r拖到0.2甚至更低。更阴险的是,有时候异常点恰好顺着相关方向,会把r从0.4抬高到0.7,给你一个虚假的“强相关”。
所以跑相关之前,强烈建议先做两步检查。第一步是在SPSS里用箱线图过一眼每个变量:图形 → 旧对话框 → 箱图 → 选“简单箱图”,把变量选入“变量”框。箱图外面的那些小圆点、小雪花就是离群值。第二步更严谨一点,把连续变量做标准化,看看有没有|Z|大于3的个案:分析 → 描述统计 → 描述 → 把变量选进去 → 勾选“将标准化得分另存为变量”。新生成的变量就是Z分数,排序看一眼,超过3的基本都可以当异常值处理。
发现异常值之后别急着删。先回原始数据核对是不是录入错误,是就改掉;如果确实是真实存在的极端情况,比如某人每周真的学了80小时,那就做敏感性分析:把异常值剔除后重新跑一次相关,如果结论方向不变,你就放心了;如果结论反转,说明你的结论完全被一个点绑架,报告里一定要交代清楚。
2.3 正态性检验和线性确认:两个最容易蒙混过关的环节
严格来说,皮尔逊相关的推断依赖于双变量正态性。但现实中很多社科数据根本不是正态的,所以实际操作中我们至少要做到“每个单独变量近似正态”。
在SPSS里确认正态性最快的路径是:分析 → 描述统计 → 探索 → 把变量放进“因变量列表” → 点“图” → 勾选“含检验的正态图” → 继续 → 确定。输出结果里找“正态性检验”那张表,当样本量小于5000时主要看Shapiro-Wilk(夏皮罗-威尔克)这一行,p>0.05说明数据跟正态分布没有显著差异,可以接受。p<0.05则说明有偏态嫌疑,需要再看直方图和P-P图综合判断。要注意的是,样本量一大(比如N>300),正态性检验很容易因为样本量大而变得极其敏感,哪怕数据只是轻微偏态也会显示p<0.05。这时候重点看直方图的形状,只要不是严重偏态,皮尔逊还是能用的。
线性关系则主要靠“看”。在正式跑相关之前,画一张矩阵散点图:图形 → 旧对话框 → 散点图/点图 → 矩阵散点图,把要分析的变量拖进矩阵变量框。除了前面说的倒U型曲线问题,你还能顺便观察到有没有明显的“扇形分布”(一头宽一头窄)或者被少数点带偏的迹象。这一步花不了两分钟,但它能帮你拦住一多半“跑出来r很漂亮但其实是假象”的翻车现场。
3. SPSS实操全流程:菜单路径与参数设置
3.1 数据表该怎么排:这一行个案、一列变量必须刻进DNA
很多第一次接触SPSS的人会被问卷题的排列方式带偏,在Excel里把每一列做成“题项”,每一行做成“一个人”,这是对的。但还有人会把同一个人的多次数据放在一行里,或者在多行里重复同一个被试的ID,这些都会让相关分析的结果变得无法解释。
标准的数据结构是:一行一个样本(一个被试、一家企业、一夜城市),一列一个变量。举个例子,研究学习时长、课堂参与度和期末成绩的关系,数据表应该长这样:
| 学生编号 | 学习时长 | 课堂参与度 | 期末成绩 |
|---|---|---|---|
| 1 | 6.5 | 72 | 78 |
| 2 | 8.0 | 80 | 85 |
| 3 | 3.0 | 55 | 62 |
| ... | ... | ... | ... |
注意几个细节。学习时长和期末成绩都是数值型变量,别把成绩输成“优、良、中、差”这种文本;如果某个学生缺考,期末成绩留空,不要填0,因为0会被当成真实分数参与计算。问卷里的反向计分题,在录入数据前先统一反转,不然后面合成维度时相关方向会乱得你怀疑人生。
3.2 一步步点击:双变量相关对话框里的每个选项都有讲究
确认数据没问题之后,进入核心操作环节。路径如下:
分析 → 相关 → 双变量
在弹出的对话框里完成四件事。
第一,把左侧变量列表里的变量选入“变量”框。要分析几个变量就选几个,比如把学习时长、课堂参与度、期末成绩全部选进去,SPSS会输出一张完整的对称相关矩阵。如果只做单对相关,选两个即可。
第二,在“相关系数”区域勾选“皮尔逊”。这里可以继续往下看,下面还有“斯皮尔曼”和“肯德尔tau-b”,建议同时把“斯皮尔曼”也勾上,原因我下一小节专门说。
第三,“显著性检验”区域默认是“双侧检验”。除非你在研究方案里预先写了明确的方向假设(比如“预期学习时长与成绩正相关”)并且注册过,否则不要轻易改成“单侧检验”。有些期刊对单侧检验比较警惕,双侧检验更保守也更稳妥。双侧的p值一般大约是单侧的两倍,改成单侧后看着好看了,但审稿人一问就露怯。
第四,勾选“标记显著性相关性”。勾上之后,SPSS会在显著的r值右上角打上星号,一个是p<0.05,两个是p<0.01,方便你阅读结果。
对话框里还有一个“选项”按钮。点开后建议勾选“均值与标准差”,这样输出里会附带一张描述性统计表,省得你翻来翻去找均值和SD。缺失值那一栏按我前面说的逻辑去设置,别闭眼用默认。另外左下角通常还有“Bootstrap”按钮,如果版本支持,勾选“执行Bootstrap”并保持样本数1000,输出里会给出相关系数的95%置信区间,这是进阶用法,期刊越来越喜欢看置信区间而不是单个点估计,建议有条件就勾上。
3.3 为什么我总是顺手把斯皮尔曼也勾上
这是一个成本极低但收益很高的习惯。斯皮尔曼等级相关计算的是两个变量的等级排序之间的相关,它对正态性没要求,对异常值也不太敏感,能捕捉到单调关系(包括一些非线性的单调关系)。在同一个对话框里同时勾选皮尔逊和斯皮尔曼,等于同一批数据你同时拿到了两个证据。
如果两种方法算出来的结论一致,比如r和rho方向一致、显著性一致,那你的结果非常稳健。如果出现分歧,比如皮尔逊显著但斯皮尔曼不显著,或者两者符号相反,这通常意味着数据里存在异常值或非线性关系,这时果断回到散点图上找原因。我实际跑数据时,这种“双验证”几乎成了标准动作,因为它能省掉很多事后补救的麻烦。
4. 结果输出怎么读:三张表里的关键信息
4.1 描述性统计表:先看N和标准差,别急着兴奋
SPSS输出结果里最上面的一般是描述性统计表,列出每个变量的均值、标准差和样本量N。很多人直接跳过这张表去看相关矩阵,这其实是个坏习惯。
第一步先核对N。如果原始数据有60个学生,这张表里N却显示58,说明有2个样本因为缺失被排除了。你要确认这2个样本的缺失情况是否符合预期,还是数据整理时出了纰漏。第二步看标准差。如果某个变量的标准差是0,说明这个变量在样本里根本没有变异,比如所有人期末成绩都是80分,那相关分析无从谈起,SPSS虽然能跑,但输出的r会是一个非常奇怪的东西。第三步看均值的合理性。比如学习时长均值如果是800小时/周,那必然有数据录入错误,回查去吧,别继续往下走了。
4.2 相关矩阵的阅读规则:符号、星号、第三行N
主表就是相关矩阵,行和列都是你选入的变量名。这张表有四个阅读要点。
第一,对角线上的值永远是1,因为变量和它自己完全正相关。第二,矩阵是对称的,看上半三角或下半三角都行,别重复读取。第三,每个格子默认显示三行内容:第一行是皮尔逊r值,第二行是Sig.(双尾)也就是p值,第三行是N(成对样本量)。第三行N尤其重要,它直接告诉你这对相关到底用了多少样本,前面“按对/按列表排除”的设置效果就体现在这里。
第四,看r的符号和绝对值。正号代表正相关,负号代表负相关,绝对值越大关系越强。星号代表显著性:一个星号是p<0.05,两个星号是p<0.01,这是SPSS的自动标记,汇报的时候直接把星号对应的p值区间写进去就行。
关于相关强度的判断,不同领域标准不太一样,心理学里比较常参考Cohen的建议:r在0.10附近是小效应,0.30附近是中等效应,0.50以上是大效应。医学或物理科学里对相关系数的要求通常更高,0.5可能都觉得不够看。所以别死记硬背这个区间,要先问自己所在领域通常接受什么标准。
4.3 p值、r值和置信区间:汇报时别只丢一个p
这里必须反复强调一个所有相关分析新手都容易犯的错:p值显著不代表相关强。样本量一大,哪怕r只有0.08,p都可能小于0.001。反过来,样本量一少,r=0.4但p=0.06,也不代表“没有相关”,更准确的说法是“本次样本量不足以确认这个相关是否真实存在”。
所以规范的汇报顺序是:先写r的方向和大小,再写自由度,最后写p值,如果有置信区间就更好。比如:
“学习时长与期末成绩呈显著正相关,r(58)=0.62,p<0.001,双尾,95% CI [0.43, 0.76]。”
这里的58是自由度,它等于成对样本量减去2,也就是N-2。如果你做了Bootstrap,置信区间可以直接从输出里读;没做的话,也可以用在线计算器根据r和N算出近似区间,但报告时注明来源即可。
5. 一次完整案例:从模拟数据到成稿结论
5.1 案例场景与模拟结果
假设你现在要分析三个变量:学习时长(小时/周)、课堂参与度(0-100分)和期末成绩(0-100分),样本是60名学生。原始数据整理成一行一个人的标准格式后,在SPSS里跑完上述流程,输出大致会是下面这样:
| 变量 | 均值 | 标准差 | N |
|---|---|---|---|
| 学习时长 | 7.2 | 2.8 | 60 |
| 课堂参与度 | 74.5 | 12.3 | 60 |
| 期末成绩 | 79.6 | 10.1 | 60 |
相关矩阵的核心结果可以整理成:
| 配对 | r | p(双尾) |
|---|---|---|
| 学习时长 × 期末成绩 | 0.62 | <0.001 |
| 课堂参与度 × 期末成绩 | 0.47 | <0.001 |
| 学习时长 × 课堂参与度 | 0.35 | 0.006 |
这里特意让学习时长和课堂参与度之间也存在中等程度的相关,因为这代表两个预测变量之间有重叠,但不完全重叠,后续如果你要跑回归,这就是一个值得讨论的前提信息。
5.2 把矩阵结果写成一段规范的结论
拿到输出之后,写成论文或报告里的一段话,可以按这种结构来组织:
“采用皮尔逊积差相关分析考察学习时长、课堂参与度与期末成绩之间的关系。结果显示,学习时长与期末成绩呈中等偏强的显著正相关,r(58)=0.62,p<0.001,双尾;课堂参与度与期末成绩也呈显著正相关,r(58)=0.47,p<0.001,双尾;此外,学习时长与课堂参与度之间存在中等程度的显著正相关,r(58)=0.35,p=0.006,表明两者虽有关联但仍相对独立。综合分析,学习时长与课堂参与度均与期末成绩正相关,且学习时长与成绩的关联更强。”
这段话可以直接当作模板套用。核心信息一个不落:用了什么方法、每一对的r、自由度、p值、双尾或单尾、方向解释。写完后你会发现,真正有信息量的是r值和方向,p值只起辅助判断的作用。
5.3 散点图:让结论站得住的最后一道保险
前面说过矩阵散点图要在跑分析前先画一遍,这里再补一个重要理由:论文里你通常需要放一张带拟合线的散点图,来展示“这个相关不是靠一两个离群点撑起来的”。
SPSS里做带拟合线的散点图也很简单:图形 → 图表构建器 → 选择“散点图”类型图,把Y轴变量拖入y轴,X轴变量拖入x轴,然后在“元素属性”里勾选“总拟合线”,选线性。注意代码里我会直接把X放学习时长、Y放期末成绩,这样图上能清楚看到,当学习时长上升时成绩的分布也整体上移,而且点的分布大体围绕一条直线,没有明显弧线,也没有独自漂在远方的孤立点。
如果散点图上发现某个点极度扎眼,比如所有人都聚在左下角,就它孤零零地飘在右上角,那这个点很可能就是前面说的“绑架r的真凶”。别犹豫,回到数据体检那一步,检查它的原始值是否真实。
6. 汇报与避坑:从SPSS输出到论文之间还有几道坎
6.1 相关不等于因果:这句老话到底怎么理解
几乎每篇讲相关的文章都会提“相关不等于因果”,但很多人听完就忘。我提供一个更具体的记忆方式:皮尔逊相关只告诉你两件事——“有没有共变”和“共变的方向是正是负”。它完全无法回答“谁导致谁”以及“是不是有第三个变量在同时驱动两者”。
最常被拿来当例子的就是夏季冰淇淋销量与溺水人数的高度正相关。你把它俩跑皮尔逊,r保底0.8以上,p绝对小于0.001。但你要是因此得出结论“卖冰淇淋会导致溺水”,那就贻笑大方了。真实原因是“气温升高”这个第三变量同时驱动了两者。
放到实际科研场景里,发现学习时长和成绩相关,但成绩好的人也可能更有学习动力、更愿意投入时间;家庭收入、天赋、同伴影响都可能同时影响这两个变量。所以报告里写“相关”时可以谨慎一点,可以加上“本结果仅表明这两个变量在样本中存在关联,尚不能据此推断因果关系”这句话。别嫌啰嗦,审稿人看到你主动声明这一点,反而会放心。
6.2 多重比较问题:变量一多,假阳性风险成倍上升
很多人做相关分析时喜欢一股脑把问卷里所有维度都丢进去,跑出一张8×8甚至更大的相关矩阵。8个变量意味着C(8,2)=28个相关检验,10个变量就是45个。按p<0.05的阈值,如果所有变量在总体里真的全都无关,你这28次检验里平均还是会冒出约1.4个“显著”结果;45次检验则平均约2.25个假阳性。也就是说,矩阵越大,你越可能在“噪音”里找出一个让你兴奋的假信号。
解决思路有两个。第一个是在分析前就写清楚核心假设,只对少数几对变量进行相关检验,其他结果只做探索性参考。第二个是做校正,最简单的是Bonferroni校正:把0.05除以检验次数,比如45次检验就把显著性阈值从0.05调到0.0011左右。SPSS里不会自动帮你做这个,但你可以在解读结果时手动使用校正后的阈值。要注意的是,校正会让检验变得保守,小样本里本来就难显著的弱相关就更容易被“牺牲”掉,所以最好在方案设计阶段就想清楚策略,而不是看到结果不显著之后才去校正。
6.3 维度合成、反向计分与测量信度:相关分析上下游的坑
相关分析的变量本身如果是从量表多道题合并出来的维度分,这里还有三个容易被忽略的细节。
第一,反向计分题必须事先反转。不然你合成维度分时,方向相反的题目会相互抵消,维度分失去意义,跟其他变量的相关方向也可能完全反过来。
第二,合成维度分之前最好先看信度。维度内部一致性太差(比如Cronbach's alpha低于0.6),意味着这个维度分里有大量测量误差,而测量误差会稀释真实相关。这就是为什么有时候你明明觉得两个构念应该有相关,结果却很低,不一定是理论上错了,也可能是题目施工质量不行。
第三,如果你同时分析同一个量表里的多个维度,又把这些维度分两两做皮尔逊,会发现很多维度之间天然就呈正相关。这一部分是因为共享被试的主观偏差,也可能是题目表述相似造成的“方法效应”。报告时最好把这一点作为局限性说出来,或者用偏相关控制住总体态度分再看净相关,会更有说服力。
6.4 几个SPSS操作层面的“事故现场”和处理方式
最后分享几个我做相关分析时实际遇到过的操作层面问题,每一件都曾经让新手当场卡壳。
用字符串变量硬做相关:变量一看是“性别”或“专业名称”,SPSS根本不让你选进“变量”框,或者结果里什么都没有。解决办法是把分类变量手动编码成数值(如1=男、2=女),但要注意编码后的“男女”并不意味着数值大小有实际意义,做出来的“相关”只能叫点二列相关。
相关矩阵里某个变量显示一堆“.”(缺失值):大概率是这个变量本身有大量缺填,或者变量类型被SPSS识别成了字符串。把数据视图里该列的类型改成“数值”并确认缺失值标记为系统缺失值就好。
r值出现1.000但p是“.”:常见于你不小心把同一个变量复制了两列放进了分析框。自查一下变量列表里是不是有两个长得一样、名字不同的变量。还有一个冷门情况是某个变量在样本里几乎是常数,比如只取了1到5分里的一个分值,它和任何变量的相关都无法计算。
我也见过有人把显著性改成了“单侧”之后,p值全部减半,结果看上去特别好看,但审稿人一问“你的方向假设是事前提出的吗”就哑火。所以再次郑重建议:默认双侧,别图好看。
做了这么多年数据分析,我自己最深的体会是:皮尔逊相关分析的SPSS操作流程非常短,短到五分钟就能点完,但真正花时间的永远在操作之前的数据体检,和操作之后的解释校验。每次跑完结果,我都会强制自己再画一遍散点图,再看看显著性是从哪对样本来的,最后才敢把它写进报告。也希望你把“先看图、再看矩阵、最后看星号”这个顺序养成习惯,那样很多看似玄学的问题,根本不会出现在你身上。