拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SPSS中Quade非参数协方差分析:手动实现完整指南

SPSS中Quade非参数协方差分析:手动实现完整指南

上周一个做教育测量的学生来找我,手里数据大概是这样的:三组学生用不同方法教学,记录了前测和后测成绩,想比较三种方法的效果差异,同时要把前测成绩当作协变量控制掉。问题在于后测成绩明显右偏,方差不齐,样本量也只有三十出头。SPSS里自带的分析——协方差分析——跑起来倒是没什么障碍,但残差正态性检验和方差齐性检验几乎全军覆没,结果写进论文心里完全没底。我给他指了一条路:Quade非参数协方差分析。这个方法在SPSS里没有一键菜单,网上也很少有人把完整流程讲明白,但其实手动实现非常清晰,核心就是一句话:先编秩、再回归、后比较。这篇文章就把从数据准备到结果解读的每一步都摊开讲清楚,顺便给出可以直接在SPSS中复现的完整操作。

如果你手头的数据不满足正态性、方差不齐,或者本来就是等级资料、小样本,传统的参数协方差分析做不了,那这个方法是目前最实用的替代方案之一。我默认读者已经能分清"自变量、因变量、协变量"这三个概念,也知道SPSS的基本界面操作,但不需要你很懂统计原理。跟着走一遍,你就能自己把分析跑完,并且知道每一步在干什么、为什么这么干。

1. 为什么协方差分析需要非参数版本

1.1 参数协方差分析的三道坎

传统协方差分析(ANCOVA)听起来很美好:先回归掉协变量的影响,再比较组间差异。但很多人在实际项目中忽略了它的前提条件。SPSS的Univariate过程能直接输出很多检验,但真正决定结果能否站得住脚的是下面三条硬性假设。

第一是正态性。要求的是"各组内因变量Y在控制协变量X后的残差呈现正态分布",不是原始Y的正态分布,很多人一开始就搞错。偏偏教育、心理、管理、生物实验的数据,像满意度评分、行为次数、生理指标,经常是偏态的,有的甚至呈明显的长尾分布。残差一旦偏离正态,F检验的p值就不准了,样本量越小偏差越明显。

第二是方差齐性。要求各组残差的方差大体相同。如果组间样本量差距大,或者其中一组数据特别分散,方差齐性很容易被破坏,此时参数ANCOVA的第一类错误率会明显上升,也就是本来没差异,却容易做出有差异的错误结论。

第三是线性关系和回归斜率平行。协变量X对Y的影响在所有组里应该方向一致、强度相近,否则组间比较会被X和组的交互作用污染。实际操作中,这个假设一旦违反,后面所有校正都是白搭。

问题的关键在于,这三条假设同时满足的概率,在真实数据里远比你想象的低。尤其是小样本研究,想检验这些假设本身就很困难,检验功效不足,检验通过了也不代表真的满足。

1.2 秩变换解决问题的基本思路

既然原始数据不满足那些"规矩",那就换一种尺度去看待它。秩变换的思路非常朴素:不再关心数值本身到底是多少,只关心它在所有观测里的相对位置。比如后测成绩分别是62分、65分、68分,编成秩就是1、2、3。这样做的好处是,把偏态分布、异常值、方差不齐这些"形状"问题全部抹平了,剩下的只有排序信息。

但这里要注意,秩变换不是简单地把Y编个秩然后就去做方差分析。那样的话协变量X的影响还在数据里,你没有控制它。Quade检验的核心思路是:把协变量X也变成秩,然后在"秩空间"里做一次回归,把X秩对Y秩的影响剔除掉,再用剩下的残差去比较组间差异。整个过程完全绕开了正态性和方差齐性的要求,因为你处理的是排位,而不是原始分布。

1.3 Quade检验的两种常见实现路径

Quade在1967年提出秩协方差分析之后,一直没有进入SPSS的内置菜单,所以实操中大家用的都是"手动实现"的版本。目前我见过的主流做法有两种。

第一种是秩-秩回归残差法,也是本文重点演示的方法:把X和Y分别编秩,用Y秩对X秩做线性回归,提取未标准化残差,再对残差做组间检验。这个方法计算量小,思路直观,SPSS几步就能完成。

第二种是分层秩调整法:把X秩分成若干层,在每一层内对Y秩做中心化调整,然后用调整后的值比较组间差异。这个方法更接近区组设计的逻辑,但SPSS里操作起来很绕,需要自己写很多中间变量,实际应用中没有第一种普遍。两种方法在大样本情况下结论通常一致,对于绝大多数论文和课题来说,掌握第一种就够了。

2. 算法拆解:秩-秩回归残差法

2.1 编秩:把"数值大小"换成"排位"

无论是协变量X还是因变量Y,都要先做一次编秩。SPSS的Rank Cases功能可以同时处理多个变量,它会把所有个案混合在一起排序,最小的赋秩1,最大的赋秩N。

编秩时有几个细节需要注意。如果数据存在并列,SPSS默认采用平均秩,也就是并列的几个数取它们所占位置的平均值。比如两个并列第5和第6名,它们的秩就是5.5。这个默认设置不要改,它是最标准的处理方式。另外,编秩时千万不能把分组变量放进"By"框里,放进去了就会变成组内编秩,也就是每组内部各自排1到n,秩的意义完全不同,整个分析就废了。

编完秩之后,X和Y各自多出一列新变量,这两列就是后续计算的原材料。

2.2 回归取残差:在秩空间里剔除协变量影响

这一步是整个方法的核心。用Y的秩作为因变量,X的秩作为自变量,做一元线性回归,然后保存每个观测的未标准化残差。

很多人不理解为什么这样能"控制"协变量。其实道理和参数协方差分析完全一样,只不过把原始值换成了秩。回归线描述的是"随着X秩升高,Y秩平均会升高多少"。残差则是实际Y秩减去回归预测值,代表的是"在剔除X秩影响之后,这个样本的Y秩相对偏高还是偏低"。

残差为正,说明这个观测的因变量排名高于X排名所预期的位置;残差为负,说明低于预期。这个"预期位置"就是协变量带来的影响,剔除掉之后剩下的部分就是组别效应加上随机误差。

2.3 组间比较:残差再做一次检验

得到残差值后,用分组变量对残差做单因素方差分析。由于残差经过秩空间的回归处理,通常已经比较对称,用参数F检验是可以接受的。如果残差仍然有明显偏态,也可以改用Kruskal-Wallis检验来比较三组的残差分布位置。

这里要提醒一句:很多教程走到这一步就直接拿秩做比较,完全跳过回归取残差,那是把Quade检验做成了普通的Kruskal-Wallis检验,没有控制任何协变量。回归这一步绝对不能省。

2.4 一个生活化类比

我把这个过程类比成选篮球队员:X是身高,Y是弹跳测试成绩,分组代表三种训练方法。身高会影响弹跳,但不是你想比较的那个东西。于是你先画一条"身高-弹跳"的关系线,看看160厘米的人大概跳多高、190厘米的人大概跳多高,然后看每个人实际跳的高度偏离这条线多少。偏离量大,说明这个人的弹跳超出或低于身高带来的预期。最后比较三个训练组的"偏离量"是否有差别。Quade检验做的就是这件事,只不过把身高和弹跳都换成了名次。

这个例子能说明一个容易被忽视的点:Quade检验控制的是"线性排序意义上的影响",它没法捕捉非常复杂的非线性关系。如果X和Y之间的关系本身就很奇特,比如U形、倒U形,秩回归的拟合效果会比较差,方法仍然可以用,但解释要谨慎。

3. 手动计算演示:15条数据完整走一遍

3.1 示例数据与场景

为了把每一步都摊开让你看清楚,我用一个15个样本的小数据来演示。背景是三种训练方法对某项技能成绩的影响,协变量X是训练前的基础测试成绩,Y是训练后的测试成绩。数据故意选得没那么完美,里面有两个地方出现了并列的X值,正好用来演示平均秩的处理方式。

三组数据如下表。

样本编号组别X(前测)Y(后测)
1组14579
2组15291
3组14877
4组15589
5组15084
6组24073
7组24270
8组23876
9组24572
10组24474
11组33566
12组33862
13组33068
14组33363
15组33765

注意看X这一列,38出现了两次,45也出现了两次,这在真实数据里非常常见。

3.2 编秩结果与秩均值

把所有15个X混在一起排序。完整排序后,X的秩如下:两个38并列第5和第6位,平均秩为5.5;两个45并列第10和第11位,平均秩为10.5。Y没有并列,所以Y的秩就是普通的1到15。

编秩结果汇总如下表。

样本编号组别X秩Y秩
1组110.512
2组11415
3组11211
4组11514
5组11313
6组278
7组286
8组25.510
9组210.57
10组299
11组334
12组35.51
13组315
14组322
15组343

如果你想核对计算,有几个关键数字可以先记下来。N=15,X秩的总和是120,Y秩的总和也是120,因为秩的总和永远等于1一直加到N。总均值都是8。X秩的离差平方和Sxx=279,Y秩的离差平方和Syy=280,两者的交叉乘积和Sxy=239。

这里有个小细节值得注意:X秩由于存在并列,Sxx=279而不是理论上无并列时的280,这就是平均秩带来的微小影响。

3.3 回归计算与残差表

用Y秩对X秩做线性回归,回归系数为:

b = Sxy / Sxx = 239 / 279 = 0.8566

截距为:

a = 8 - 0.8566 × 8 = 1.1470

回归方程为:

Y秩预测值 = 1.1470 + 0.8566 × X秩

把每个样本的X秩代入,得到预测值,再用实际Y秩减去预测值,就得到残差。下面是逐组残差结果。

组1残差:1.8584,1.8602,-0.4265,0.0036,0.7168。这组残差的平均值约为0.8025。

组2残差:0.8566,-2.0000,4.1416,-3.1416,0.1434。平均值约为0。

组3残差:0.2832,-4.8584,2.9964,-0.8602,-1.5735。平均值约为-0.8025。

三组残差均值加起来约等于0,这是回归残差本身的数学性质决定的,可以用来核对计算有没有出错。残差总平方和等于75.2652,这个值是后面方差分析的基础。

3.4 组间检验:F统计量手算

现在拿残差去做单因素方差分析。总均值为0,组间平方和为:

组间SS = 5 × 0.8025² + 5 × 0² + 5 × (-0.8025)² = 6.4402

组内平方和等于总平方和减去组间平方和:

组内SS = 75.2652 - 6.4402 = 68.8250

自由度方面,组间自由度为2,组内自由度为12。于是:

组间均方 = 6.4402 / 2 = 3.2201 组内均方 = 68.8250 / 12 = 5.7354 F = 3.2201 / 5.7354 = 0.5614

对应的p值大约是0.58。这个结果在0.05水平上完全不显著。

如果改用Kruskal-Wallis检验对这三组残差做比较,先对15个残差编秩,得到三组秩和分别为48、39、33,算出的H统计量为1.14,p值同样约为0.57。两种检验方式结论一致。

3.5 怎么解读这套结果

这个结果的意义是:在控制了前测成绩的秩影响之后,三种训练方法的后测成绩秩残差没有统计学上的显著差异。也就是说,当前数据提供的证据不足以认为三种方法的效果存在区别。

不显著不等于没有差异。看残差均值你会发现,组1比组2高约0.8个秩位,组2又比组3高约0.8个秩位,趋势是存在的,只是组内的个体差异太大,淹没了组间信号。用效应量来感受一下,eta平方等于组间SS除以总SS,即6.44除以75.27,约等于0.086,属于中等偏小的效应。在只有每组5个样本的情况下,检出这种效应需要非常好的运气。

4. SPSS实操全流程

4.1 数据表怎么整理

在SPSS里新建数据文件,三列就够了。第一列group,用1、2、3分别表示三个组;第二列X,放前测成绩;第三列Y,放后测成绩。变量视图里把group的"值"标签设置一下,方便后续看结果。注意不要用组别的中文汉字当数值,后续很多分析都要求分组变量是数值型。

4.2 编秩操作与注意事项

点击菜单:转换 → 排名个案。把X和Y选入"变量"框,下面那个"分组的变量"框保持空白。再点"秩的类型"按钮,默认的"秩"就是我们要的,其他选项不用勾选。点"绑定"按钮,可以看到默认的并列处理方式是"平均值",这正是平均秩,保持默认。确定之后,SPSS会生成两列新变量,名字通常是RX和RY,代表X的秩和Y的秩。

这一步最常见的错误就是把group放进"分组的变量"框。放进去之后SPSS会在分组内部各自编秩,每组都有自己的1、2、3、4、5,这样X秩的总和就不再是120,后面回归和检验全部失去意义。

4.3 回归保存残差

点击菜单:分析 → 回归 → 线性。因变量选择RY,也就是Y秩那一列,自变量选择RX。关键是点击"保存"按钮,在"残差"区域勾选"未标准化"。确定之后,数据视图会新增一列残差变量,SPSS默认命名为RES_1。

这里再强调一次,因变量和自变量都必须用秩变量,不能写成原始X和Y。如果写成原始变量,得到的就是普通线性回归残差,分析对象就变了,你做的就不是Quade检验。

4.4 残差组间检验:两条路线

第一条路线是用单因素方差分析。点击菜单:分析 → 比较均值 → 单因素ANOVA。因变量选择RES_1,因子选择group。这个分析会输出F值和p值,对应我们手算的F=0.561和p≈0.58。

第二条路线是Kruskal-Wallis检验。点击菜单:分析 → 非参数检验 → 旧对话框 → K个独立样本。检验变量选择RES_1,分组变量选择group,点击"定义范围"填入最小值1和最大值3,检验类型勾选Kruskal-Wallis H。输出的H统计量约为1.14,p值约为0.57。

两条路线给出的结论一致。一般来说,残差经过秩回归之后形态通常比较对称,用F检验问题不大;如果你特别谨慎,可以两种都跑,把Kruskal-Wallis的结果作为稳健性证据写进论文。

4.5 论文里的报告模板

如果你要把这套结果写进论文,可以参考下面的写法。

"以前测成绩为协变量,采用Quade非参数协方差分析比较三种训练方法的效应。先分别对前测成绩和后测成绩编秩,以后测成绩秩对前测成绩秩回归取残差,再对残差进行组间比较。结果显示,残差均值在三个组分别为0.80、0.00和-0.80,组间差异无统计学意义(F=0.56,p=0.58;Kruskal-Wallis H=1.14,p=0.57)。"

建议F检验和Kruskal-Wallis检验的结果同时报告,审稿人会觉得你做得更严谨。

5. 常见问题与避坑手册

5.1 并列数据会影响编秩吗

几乎不影响。SPSS用平均秩处理并列之后,Quade检验依然有效。并列的数量越多,秩的信息量损失越大,检验功效会受到一些影响,但结论的方向不会偏。如果并列数据非常多,比如超过三分之一,建议考虑改用二分法处理或使用其他针对序数数据的模型。

5.2 残差检验用参数F还是非参数H

没有绝对标准。我的习惯是以F检验为主,因为秩回归后的残差通常接近对称,F检验的稳健性足够;再用Kruskal-Wallis做敏感性分析,两者一致就在报告里写两者,不一致就以Kruskal-Wallis为准并说明原因。毕竟我们选择非参数分析的原因就是担心分布假设不成立,没必要在最后一步重新迷信参数方法。

5.3 跑出来不显著怎么办

不显著是正常的,尤其在小样本情况下。记住你报告出来的不是"没有差异",而是"现有数据不足以证明有差异"。可以补充效应量,比如本例的eta平方为0.086,说明组别解释了约8.6%的残差变异。在此基础上建议审慎解释趋势,并基于功效分析说明适当增加样本量后检验可能得到不同结果。我在实际项目里见过不少p=0.06、0.07的情况,强行解释很容易翻车,如实报告效应量和置信区间才是稳的。

5.4 和参数ANCOVA结果不一致怎么解释

这是经常遇到的情况,尤其是参数ANCOVA显著、Quade检验不显著的时候。先回头检查参数方法的假设:残差正态性、方差齐性、斜率平行是否真的满足。如果参数方法的前提条件有严重问题,优先相信秩方法的结果,因为参数p值本身已经失真。如果参数方法的前提都满足,而秩方法不显著,那可能是样本量下秩方法功效不足,此时可以把两种结果都写在论文里,作为一种敏感性分析来呈现。

5.5 关于样本量的经验

秩方法损失了一部分数值信息,相对功效天然低于参数方法。我个人经验是每组的样本量不少于8到10个,总体本量超过30,结果才开始稳定。如果你每组只有5个样本,就像前面演示的案例,即便真实效应存在,也很难跑出显著性。如果条件允许,优先加大样本量,这比选择哪一版检验方法更重要。

5.6 常见操作错误清单

我在帮别人检查分析流程时,发现错误总是集中在几个地方,整理成清单方便你对照排查。

  • 编秩时把分组变量放进了"分组的变量"框,导致组内编秩而非全局编秩
  • 回归时误用原始X和Y,而不是X秩和Y秩
  • 忘了保存未标准化残差,直接拿Y秩去做组间比较,等于没有控制协变量
  • Kruskal-Wallis检验里忘记定义分组变量的取值范围,SPSS报错或者只比较了其中两组
  • 编秩和回归两步之间插入了筛选或排序操作,导致数据错位

以上每个问题我都见过真实案例。只要核对清楚这几点,整套流程基本不会跑偏。

我自己的习惯是拿到数据先做一次完整的参数ANCOVA,再做一次Quade检验,两份结果对比着看。如果两者结论一致,说明数据无论用什么尺度都稳定;如果不一致,往往正是数据分布或者方差结构出问题的信号。这种对比本身就能让论文的分析部分更耐看,也更容易让审稿人买账。秩方法不是万能的,但它在那些参数方法做不了的数据上,是真的能救场。

返回列表