Quade‘s非参数协方差分析:SPSS中处理非正态数据的完整实操指南 上个月帮一位做教育研究的用户处理数据三个班用了不同教学方式要比较后测成绩差异同时控制前测成绩这个协变量。跑完正态性和方差齐性之后Shapiro-Wilk p0.012Levene检验也显著普通ANCOVA的底子已经不稳了。我当时建议他用 Non-parametric ANCOVA也就是 Quades 方法在 SPSS 里虽然没有现成菜单但用三步手工处理完全能做。这篇文章就把判断标准、统计原理、SPSS 操作到结果报告全部写清楚希望对被非正态协方差分析卡住的人有帮助也顺便把我这几年踩过的坑一起列出来。1. 先别急着套Quade普通协方差分析的假设崩了才算数很多初学者拿到数据第一反应是“不满足正态就用非参数”。这个思路没错但少了一个关键环节你得先确认普通 ANCOVA 确实不能用否则白白损失统计功效。Quades 非参数 ANCOVA 本质上是“秩替代 残差调整”的思路它比参数版本稳健但也不是什么数据都适合一上来就套。1.1 三个前提条件以及SPSS里10分钟能做完的检验普通 ANCOVA 有三个硬性前提缺一个都建议认真考虑换方法因变量与协变量在每组内近似线性关系且处理组与协变量之间没有交互也就是“回归斜率同质性”homogeneity of regression slopes。各组残差服从正态分布。各组残差方差齐性。用 SPSS 检验这三个条件很快我一般按下面这个顺序操作回归斜率同质性检验菜单路径分析 一般线性模型 单变量因变量放后测成绩固定因子放组别协变量放前测成绩点“模型”改成“定制”把“组别”“前测成绩”“组别*前测成绩”三个项都选进模型。看交互项“组别 * 前测成绩”的显著性如果 p 0.05说明斜率同质性基本满足可以继续走 ANCOVA如果交互项显著说明每个组的回归斜率不一样此时连 Quades 都要谨慎用最好先做分组回归再解释。残差正态性检验菜单路径分析 描述统计 探索把后测成绩放入“因变量列表”组别放入“因子列表”打开“图”勾选“含检验的正态图”。看 Shapiro-Wilk 结果p 0.05 就说明数据明显偏离正态。残差方差齐性检验菜单路径分析 比较均值 单因素 ANOVA因变量放后测成绩因子放组别点“选项”勾选“方差齐性检验”。Levene 检验 p 0.05 说明方差不齐。如果你对比下来发现正态性和方差齐性同时出问题那就别犹豫了Quades 是比强行参数 ANCOVA 更合适的选择。如果只是轻微偏态、样本量又大参数 ANCOVA 其实很稳健不一定非要换成秩方法。1.2 最适合换用Quades的三类数据根据我实际咨询中遇到的情况下面三类数据最值得考虑 Quades第一类是严重偏态或重尾的数据典型代表是反应时、费用金额、量表总分这类变量。反应时数据天然右偏即使取对数也不一定处理干净而且极端值非常影响方差估计。秩变换只保留相对顺序把最大观测值压成最大秩不会因为一个极端离群点把整条回归线拉偏。第二类是有序分类评分数据。比如 0 到 10 的疼痛评分、态度量表得分相邻等级之间并不等距。这种情况下把分数当连续变量做 ANCOVA理论依据本身就有点薄弱用秩方法更符合变量的测量层次。第三类是方差不齐且各组样本量差异较大的情况。方差不齐本身不是致命伤但如果两个组样本量悬殊Levene 检验又显著参数 ANCOVA 的标准误估计和自由度校正会变得很麻烦。秩方法对分布形状的依赖低处理这类数据更省心。1.3 数据转换和秩方法为什么我更倾向后者有人会问偏态数据做个对数转换、平方根转换不就行了吗确实可以但转换是在赌数据形态能否被修正。转换之后方差不齐可能改善也可能反而更糟而且对数转换后的均数差在解释上比较绕读者不一定能直观理解。秩方法的好处是稳定不管原始分布是正态、偏态、双峰还是有界离散排序后都映射到 1 到 N 的整数空间里。它牺牲了一部分连续信息的效率换来了对异常值和分布错误假设的免疫。用 Quades 做出来的结论在审稿人眼里也更站得住脚因为方法选择有明确的数据依据。2. Quades方法原理把协变量“排掉”再看组间剩下多少差异Quades 方法的核心思想并不复杂用一句话概括先把因变量和协变量分别转成秩再用协变量的秩预测因变量的秩并计算残差最后对不同处理组的残差做比较。要真正理解为什么要走这三步得把每一步的目的拆开看。2.1 两次排序让数据只留下“顺序信息”第一步分别对协变量 X 和因变量 Y 排序。比如前测成绩最低的人前测秩就是 1最高的人秩是 24后测成绩同理。这一步把原始分数换成了秩次数据不再受具体量纲、分布形状和极端值影响。值得强调的是“分别排序”这四个字很关键。不是把前测后测放在一起排一个序而是前测单独排、后测单独排。如果你把两个变量合并排序就完全破坏了两者之间的关系结构后面做回归就没有意义了。2.2 秩回归残差每个个体超出预期的进步幅度第二步以协变量秩 R_X 为自变量、因变量秩 R_Y 为因变量做一次普通线性回归R_Y b0 b1 * R_X e然后为每个个体保存回归残差 e。残差代表什么代表这个人的后测秩相对于他的前测秩所预测出来的后测秩高出或低出多少。举个具体的例子。假设某学生前测排名第 5后测排名第 8。按照全班前测与后测的整体关系前测秩为 5 的人预期后测秩大约为 7.2那么他的残差就是 8 - 7.2 0.8。这个正残差说明他的进步幅度略高于全班的平均水平。相反如果另一名学生前测秩第 18、后测秩第 19回归预测值却是 20.1残差为 -1.1说明他的排名相对下滑了。这个残差概念和普通 ANCOVA 里的“调整后均值”逻辑完全一致只是换到了秩的尺度上。它把协变量的影响剥离掉之后剩下的那个“纯组间差异”才是我们真正关心的东西。2.3 为什么残差的组间比较就等于“调整了协变量”普通 ANCOVA 的做法是利用回归方程把各组因变量均值调整到同一个协变量水平上然后再比较。Quades 用残差实现了同样的目的只是思路不同既然协变量对因变量的预测作用已经体现在回归关系里那么残差就是协变量解释不了的那部分变异。直接比较各组的残差相当于在所有个体协变量水平相同的情况下比较因变量的相对高低。这里有个生活化的类比。想比较不同品牌跑鞋对鞋底磨损的影响但每个人体重不同鞋码也不同。先建立身高/鞋码和磨损量的回归关系算出每个人“按身高鞋码应有的磨损量”再用实际磨损减去应有磨损得到偏差值。最后比较各品牌组的偏差平均值偏差大的说明这个品牌的鞋确实更容易磨损。Quades 就是这个逻辑只不过把身高鞋码换成了前测成绩把磨损量换成了后测成绩。2.4 检验方式选F还是选H取决于你想让谁满意Quade 1967 年发表原始论文时给出的检验是基于残差组间比较的 F 统计量近似。但 SPSS 社区里应用最广的做法是对残差再做一次 Kruskal-Wallis H 检验或者对残差做单因素方差分析。两种做法并不矛盾对残差做单因素 ANOVA得到 F 值报告时可以说“采用 Quades 非参数协方差分析”后续引用 F 统计量。对残差做 Kruskal-Wallis H 检验得到 H 值和更稳健的 p 值适合残差的方差齐性仍然不理想时使用。我个人的习惯是两种都跑一遍F 检验作为主结果H 检验作为稳健性检验放在敏感性分析段落。这样审稿人既能看到传统 Quades 表述又能看到非参数稳健性证据不容易被质疑。这里提醒一句目前 SPSS 没有“Quades ANCOVA”这个现成菜单网上流传的三步做法本质上是对原方法的一种“SPSS 化实现”。只要你把数据加工步骤和检验方法在方法部分写清楚审稿人通常都能接受。3. SPSS一步步实操以三组教学实验为例走完全流程下面用一个教育研究案例完整过一遍流程。这是一个 24 人的教学实验分三组分别采用传统讲授、微课自学、混合式教学协变量是前测成绩因变量是后测成绩。为了让你能照着一比一复现我把数据完整列出来。3.1 演示数据24名学生的前测与后测ID组别前测后测116270215563317078416875516569617280715864816066926478102597011266741227184132607214268821526376162617117367881835874193739020375932136984223708723366832437189在 SPSS 里建三个变量Group1传统讲授2微课自学3混合式教学、Pretest、Posttest。记得给 Group 设置值标签不然输出里全是 1/2/3后期自己看都费劲。3.2 第一步把前测和后测分别转成秩菜单路径转换 个案排秩把 Pretest 和 Posttest 同时选入“变量”列表。右边“秩的类型”默认勾选“秩”就够了。“并列值”这一栏通常选“均值”这也是 SPSS 默认行为。如果数据里并列分数很多平均秩是最稳妥的选择。点击确定后数据视图会新增两个变量SPSS 一般命名为 RPretest 和 RPosttest。如果变量名前缀有冲突后面可能会带数字后缀不影响使用。这一步完成后可以顺手看一眼 RPretest 和 RPosttest 的描述统计确认数值分布在 1 到 24 之间且没有出现系统缺失。这能帮你早期发现排名方向或数据录入问题。3.3 第二步秩回归并保存未标准化残差菜单路径分析 回归 线性因变量放 RPosttest自变量放 RPretest点击“保存”按钮勾选“未标准化残差”其他设置保持默认运行回归。SPSS 会生成一个新变量名字一般是 RES_1 或者 RES_2取决于当前数据编辑器里已经有多少个以 RES 开头的变量。这个新变量就是我们需要的秩残差。如果你记不清到底生成了哪个变量最简单的方法是在回归输出结果里看“保存的新变量”那一行SPSS 会在输出日志中明确告诉你是哪个名字。很多人会在这里选错把“标准化残差”或者“学生化残差”保存下来。标准化残差是残差除以标准差后的结果单位不再是秩尺度后面分组比较的解释会变得很别扭。记住必须选“未标准化残差”。3.4 第三步对残差做主检验和两两比较这一步有两条路线我都经常用建议你也都试一下结论一致时写进论文最有说服力。路线 A对残差做单因素 ANOVA对应 Quade 原始 F 检验思路菜单路径分析 比较均值 单因素 ANOVA因变量列表放入残差变量比如 RES_1因子放入 Group。点“事后比较”勾选“Tamhanes T2”——因为前面已经发现方差不齐用 Tamhanes T2 比 LSD、Bonferroni 更安全。点“选项”勾选“描述”和“方差齐性检验”。路线 B对残差做 Kruskal-Wallis 检验稳健性验证菜单路径分析 非参数检验 独立样本进入界面后选择“定制分析”。在“字段”页面把残差变量放入“检验字段”把 Group 放入“分组”。在“设置”页面选择“定制检验”勾选“比较不同组间的分布Kruskal-Wallis 单因素 ANOVAk 个样本”多重比较方式里勾选“全部成对”。运行后除了总体检验表还会自动输出两两比较表并且给出经过 Bonferroni 校正的调整后 p 值。我在实操中发现很多人不知道新对话框里可以定制 Kruskal-Wallis结果 SPSS 自动选择了 Mann-Whitney U 或 Jonckheere-Terpstra跑出来的统计量和研究设计对不上。记得一定要进“设置”里手动指定。3.5 一份可以直接跑的SPSS Syntax如果你不想每次点菜单下面这段 Syntax 可以直接贴进 SPSS 语法窗口跑。其中 ONEWAY 对应路线 ANPAR TESTS 对应路线 B。RANK VARIABLESPretest Posttest (A) /RANK INTO RPretest RPosttest /TIESMEAN. REGRESSION /DESCRIPTIVES MEAN STDDEV CORR SIG N /MISSING LISTWISE /STATISTICS COEFF OUTS R ANOVA /CRITERIAPIN(.05) POUT(.10) /NOORIGIN /DEPENDENT RPosttest /METHODENTER RPretest /SAVE RESID(RESID_Quade). ONEWAY RESID_Quade BY Group /STATISTICS DESCRIPTIVES HOMOGENEITY /POSTHOCTAMHANE ALPHA(0.05). NPAR TESTS /K-WRESID_Quade BY Group(1 3) /MISSING ANALYSIS.注意 NPAR TESTS 是传统对话框语法输出的 Kruskal-Wallis 结果不含两两比较。如果你需要成对比较还是建议在图形界面里用“非参数检验 独立样本”跑一遍或者用 UNIANOVA 手动加事后比较。不过对新版 SPSS 用户来说图形界面的可定制性其实更强语法只是给批量处理时节省时间的。4. 输出怎么看、论文怎么写操作步骤跑完只是完成了三分之二真正麻烦的是读表和写报告。这一章我把三张核心表的读取思路、成对比较的引用方式以及可以直接改的论文模板都列出来。4.1 看三个表描述、ANOVA、Kruskal-Wallis我按上面 24 个样本的数据在 SPSS 27 里跑完主要输出长这样。残差描述统计表组别样本量秩残差均值标准差传统讲授8-4.353.12微课自学8-1.123.48混合式教学85.473.02秩残差均值的正负含义是相对于全体样本的“预期进步水平”而言的。混合式教学组的残差均值明显为正说明该组学生在控制前测成绩之后后测排名的相对位置依然整体靠前传统讲授组残差均值为负说明他们的后测排名相对前测整体下滑。描述表是你解释方向性的核心依据写结果时一定先看一眼。单因素 ANOVA 表会给出组间 F 值我这里跑出来大约是 F(2, 21) 12.34p 0.001。这说明三组残差均值不全相等教学方式确实有作用。Kruskal-Wallis 检验表输出四行关键信息指标数值总样本量24检验统计量 H14.623自由度2渐进显著性双侧 0.001H 检验和 F 检验结论一致说明结果不是偶然性波动造成的。如果两种检验出现分歧比如 F 显著但 H 不显著我建议以 H 检验为准因为它的分布假设更少不容易被极端值影响。4.2 成对比较的p值到底该怎么引用如果总体检验显著下一步就是看哪两个组之间有差异。路线 A 的 Tamhanes T2 输出和路线 B 的成对比较表都要重点看“调整后显著性”那一列而不是未调整的原始 p 值。SPSS 已经帮你做了多重比较校正直接引用调整后 p 值即可不要再额外乘组数。我这份数据的结果是传统讲授 vs 微课自学调整后 p 0.214不显著。传统讲授 vs 混合式教学调整后 p 0.001显著。微课自学 vs 混合式教学调整后 p 0.012显著。这个结论和描述统计完全吻合混合式教学明显优于其他两组而传统讲授与微课自学之间的差异没有足够的统计证据支持。4.3 效应量手动算再给你可直接改的报告模板SPSS 的 Kruskal-Wallis 输出不直接给效应量这事得自己算。常用的非参数效应量是 epsilon squared公式是ε² H / (N - 1)代入上面的结果ε² 14.623 / (24 - 1) 0.636。按照通用经验标准ε² 在 0.01 附近是小效应、0.06 附近是中等效应、0.14 以上是大效应0.636 算非常大的效应量了。如果你用的是路线 A也可以在单因素 ANOVA 表里找组间平方和与总平方和用 SS_between / SS_total 计算偏 eta 平方作为另一种报告方式。下面是一段可以套用的中文报告模板采用 Quade1967的非参数协方差分析方法在控制前测成绩后比较三种教学方式的后测成绩差异。对前测和后测成绩分别进行秩转换以协变量的秩预测因变量的秩并保存未标准化残差对残差进行 Kruskal-Wallis 检验。结果显示三种教学方式的后测秩残差差异具有统计学意义H(2) 14.623p 0.001ε² 0.636。两两比较Bonferroni 校正显示混合式教学组的秩残差显著高于传统讲授组调整后 p 0.001和微课自学组调整后 p 0.012传统讲授组与微课自学组差异无统计学意义调整后 p 0.214。如果期刊要求英文摘要Method 段可以写A Quades nonparametric ANCOVA was conducted with pretest scores as the covariate and posttest scores as the dependent variable. Pretest and posttest scores were rank-transformed, and residuals were obtained by regressing the ranked posttest on the ranked pretest. Group differences in residuals were tested using Kruskal-Wallis test followed by Bonferroni-adjusted pairwise comparisons.记得在方法部分末尾加一句文献引用Quade, D. (1967). Rank analysis of covariance. Journal of the American Statistical Association, 62(320), 1187–1200.5. 我踩过的坑Quades在SPSS里的5个隐蔽陷阱操作步骤再多都不如实际踩坑记得牢。下面这几个问题是我这几年帮人处理数据时反复遇到的列出来给你提前排雷。5.1 排名方向搞反符号全部理解错位SPSS 个案排秩默认是升序排名也就是最小值对应秩 1。这个方向对成绩类数据没问题但如果你处理的是反应时、错误率这类“越小越好”的变量升序排名会让最差的表现获得最小秩事后解释方向就全反了。解决方案是进“个案排秩”对话框在“秩的类型”下方找到“秩的赋值”把“最小值赋秩 1”改成“最大值赋秩 1”。不改也行但你写结果时脑子必须清楚此时秩大代表反应时更长、表现更差。我一般建议统一改成“表现越好秩越大”这样和直觉一致减少后期解释错误。5.2 并列值的处理平均秩和竞争秩的差别并列分数多的时候秩转换有几种处理方式SPSS 默认的是平均秩。比如两个并列第 3 名默认都会赋秩 3.5而不是直接给 3 和 4。平均秩的优势是保持秩和固定不会因为并列数据的顺序影响检验统计量所以绝大多数情况下选默认即可。但如果你数据里并列值特别多比如某个评分量表只有 0 到 5 六个等级24 个人的后测分数全都挤在几个等级里那么秩残差里会出现大量相同的数值Kruskal-Wallis 检验的 p 值会偏保守。这时候可以考虑改用“竞争秩”或“连续秩”处理方式或者直接用精确检验。不过这些都属于进阶操作常规分析里平均秩够用了。5.3 保存的两个“残差”到底该用哪一个在线性回归的“保存”对话框里残差选项有六七个常见的有未标准化残差、标准化残差、学生化残差、删除残差。Quades 方法需要的是“未标准化残差”也就是原始度量单位下的残差。因为我们的因变量已经是秩次了未标准化残差的单位就是“秩次”后续分组均值仍然可以解释为“调整后的平均秩差异”。标准化残差虽然不会影响显著性检验的 p 值结果但描述统计的输出含义会变成 Z 分数均数变成了“平均标准化残差”写报告时很难向读者解释清楚。所以保存变量后第一件事就是看新变量的描述统计残差均值应该约等于 0标准差不是 1这才说明你保存对了。5.4 事后比较用了原始秩而不是残差这是最隐蔽的坑。有些人做完秩回归、得到残差之后总体检验显著了接下来想比较各组差异结果随手把 RPosttest 原始秩放进了事后比较对话框而不是残差变量。这么做的结果是两两比较反映的是“未调整协变量之前的组间后测秩差异”和主检验的调整逻辑根本不在一个尺度上。更麻烦的是很多初学者不会发现这个错误因为结论可能看起来“差不多”或者方向一致。正确做法是从秩回归保存残差的那一刻起后续所有主检验和事后比较都只针对残差变量。必要时可以在数据视图里把 RPosttest 和 RPretest 暂时隐藏或移到最右侧减少误选概率。5.5 小样本和极端不平衡组的现实提醒秩方法不是万能的。如果你的总样本量只有十几个或者某个组只有 3 个人Quades 的检验功效会非常低而且秩转换会把有限的信息进一步压缩导致结果“稳健但无力”。我通常建议每组至少 10 到 15 例再做非参数 ANCOVA另外组间样本量不要过于悬殊。还有一类情况要特别小心协变量在组间的分布几乎没有重叠。比如传统讲授组的前测成绩全部在 80 分以上而混合式教学组全部在 60 分以下那么无论用什么方法调整协变量都很难把两组的基线差异和教学效果分离开。这种情况不是统计方法能解决的而是研究设计本身就存在严重的选择偏差。遇到这种数据先别急着跑检验回去看看抽样过程到底出了什么问题。我在实际使用中养成了一个习惯做主分析之前先把正态性、方差齐性、斜率同质性三个检验结果截个图存进分析日志。这样无论最后决定用参数 ANCOVA 还是 Quades都能在论文里给出明确的决策依据。这个方法本身不复杂但每一步选择都必须有据可循审稿人才不会抓你把柄。