带本科班的多元统计分析上机课,每次讲到“均值向量和协方差阵的检验”这一节,教室里总是一片哀嚎。不是这部分理论有多难,而是大家翻开SPSS根本不知道点哪里——菜单里搜不到“Hotelling T2”,也找不到“Box M”,学了一堆检验统计量,上机时全对不上号。这篇就把这两个检验在SPSS里的完整操作流程、输出结果怎么读、实验报告怎么写得明明白白,课程要交上机报告、考研复试复习、或者工作里需要做多变量组间比较的同学,都可以直接照着做。
1. 先搞清楚这两个检验到底在干嘛
1.1 为什么不能老老实实做一堆单变量t检验
很多初学者拿到多组多变量的数据,第一反应是对每个变量单独做个t检验或者方差分析,然后挨个汇报p值。这个思路看起来没毛病,实际上一错错俩。
第一,第一类错误会失控。假设数据有5个变量,每个变量在0.05水平下做检验,就算所有变量真的没有组间差异,至少有一个变量被误判为显著的概率是多少?算一下:1减(0.95的5次方),约等于0.226。也就是说你有超过两成的概率会“发现”一个根本不存在的差异。变量越多,这个概率越离谱。
第二,也是最容易被忽视的——单变量检验彻底丢掉了变量之间的相关结构。多元分析里变量很少是孤立的,比如身高和体重、语文和数学成绩,本身就有相关性。单变量检验把每个变量当成独立个体,相当于把一个整体的问题拆碎了看,信息损失得很厉害。均值向量检验就是把所有变量当做一个整体,在考虑变量相关性的前提下,一次性回答“这组数据的均值向量是否等于某个指定向量”或者“几组数据的均值向量是否相等”。
1.2 均值向量检验到底在检验什么
均值向量检验,说得直白点,就是把单变量里的t检验和F检验推广到多个变量的场景。
单样本情形下,检验的是k个变量的均值向量是否等于某个已知向量。比如你测了一批学生的语文、数学、英语成绩,想知道这三科的平均分向量是否等于80、75、85这个标准向量——这就是一个典型的一元推广。
两组独立样本的情形,检验的是两个总体的均值向量是否相等。这个和Hotelling T2检验直接对应,T2统计量的本质是组间均值差异的马氏距离,而不是简单的欧氏距离。欧氏距离只考虑每个变量差异的大小,马氏距离还额外考虑了变量之间相关性带来的“冗余信息”,相关性高的变量会被自动降权,避免重复计算。
三组及以上的情形,就进入多元方差分析的范畴,SPSS里叫MANOVA。这时候检验的不再是两个向量是否相等,而是所有组的均值向量是否完全相同。输出结果里那一堆Pillai's Trace、Wilks' Lambda、Hotelling's Trace、Roy's Largest Root,都是不同的统计量,对应不同的检验方法,虽然算法不同,但回答的是同一个问题。
1.3 协方差阵检验是干什么用的
协方差阵检验这一块,很多教材讲得云里雾里,但它实际应用场景非常明确:多元方差分析、判别分析、还有线性混合模型里,都有一个“各组协方差阵相等”的假设前提。协方差阵不相等,就好比不同组的数据不仅“重点”不一样,连“散布形状”都不一样,这时候用一个共同协方差阵去拟合所有组,结果自然不可靠。
SPSS里最常用的协方差阵齐性检验是Box's M检验。它的原理用大白话讲,就是先分别估计每组的协方差阵,再估计一个合并的协方差阵,如果各组协方差阵差别很大,合并估计就会损失过多信息,检验统计量就会变大,p值变小,拒绝原假设。
这里必须提前打个预防针:Box's M检验极其敏感,样本量一大,甚至各组协方差阵只有微小差异都会导致显著,所以很多统计学家并不建议把它当做一个严格的“合格/不合格”标准,更多是作为参考。后面实操部分我会详细说怎么看这个结果。
2. 上机之前,数据准备阶段最容易踩的坑
2.1 数据结构必须整理成什么样
SPSS做多元检验,数据格式有硬性要求:每一行是一个样本(被试),每个变量占一列,分组信息单独占一列。这就是所谓的长型数据格式。
很多同学拿到的数据是宽型的,尤其是问卷数据,可能每个人一行,但分组信息散落在不同变量里,或者不同组的被试放在不同Sheet里。这种数据进SPSS之前必须整理成统一格式:变量名列放观测值,分组列用数字编码(比如1、2、3,而不是“实验组”“对照组”这样的字符串,虽然SPSS也支持字符串分组变量,但数字编码更稳妥,不容易在后续操作里出幺蛾子)。
数据清洗也是不能跳过的步骤。检查有没有极端离群值录入错误、缺失值是否被标记为系统缺失(点号表示)而不是0。特别提醒一句:缺失值不要轻易填0,更不要用均值填充后直接做多元检验,因为多元分析对协方差结构很敏感,错误的填充方式会显著改变变量间的相关性。如果缺失样本占比不大,直接删掉那一行样本;如果嫌浪费,用多重插补后再导出成SPSS数据文件,也比粗暴填均值靠谱。
2.2 样本量和变量数的关系
多元检验对样本量有比较苛刻的要求,原理上要求样本量大于变量个数,否则协方差阵的估计会退化,检验根本做不出来。实际操作里,我一般建议每组样本量至少是变量数的5到10倍,最低不能低于变量数加20。
举个例子,你要比较3个组的均值向量,每个组测了6个变量,那么每组至少要有30到60个样本,低于这个数即使SPSS能算出结果,检验功效也会很弱,真实存在的差异很可能检验不出来。如果实在凑不够样本,宁可减少分析变量,也不要硬塞。
2.3 多元正态性先过一遍
均值向量检验的理论推导建立在多元正态分布的前提上,但实际应用里完全的正态几乎不存在,大家更关心的是“偏离得有没有那么离谱”。SPSS里没有专门为多元正态性设计的一键菜单,但有个非常实用的替代方案:计算每个样本的马氏距离,然后看马氏距离是否符合卡方分布。
操作上,可以用线性回归里的保存功能:Analyze → Regression → Linear,把要分析的变量放进因变量列表,自变量列表留空(或者放一个常数变量),点击Save按钮,在Distances下面勾选Mahalanobis,SPSS就会生成一个新变量,就是每个样本的马氏距离。然后把马氏距离做一个Q-Q图,用SPSS的PPLOT语法指定卡方分布(自由度等于变量个数),如果散点大致落在对角线上,就可以认为多元正态性基本没问题。
这个方法可能有些同学觉得陌生,但它是国际期刊论文里很常见的一种多元正态性诊断方式,比逐个变量看直方图可靠得多,因为它同时考虑了变量间的相关结构。
3. 均值向量检验在SPSS里怎么操作
3.1 单样本均值向量的检验,菜单里根本搜不到Hotelling
不少同学在SPSS里搜“Hotelling”,结果什么都搜不到,就以为软件不支持这个检验。其实SPSS确实没有单独的“Hotelling T2检验”对话框,但有一个等价的办法——用一般线性模型(GLM)的截距检验来实现。
具体步骤是:Analyze → General Linear Model → Multivariate,把要检验的多个变量全部选入“因变量”列表,因子框留空不填,点开Options,在Display区域勾选“Intercept”(有些版本里默认就勾上了),确定运行。
这里解释一下原理:SPSS的GLM在没有任何因子变量时,相当于把所有样本当成一组,截距项检验的就是这组样本的均值向量是否全部为0。如果你要检验均值向量是否等于某个非零向量,比如想检验三科成绩是否等于(80, 75, 85),需要先用Transform → Compute Variable,对每个原始变量减去对应的目标值,生成三个新变量,再用新变量去做上述GLM操作。
看结果的时候,直接看SPSS输出里的“截距”那一行,Pillai's Trace、Wilks' Lambda等几个统计量的显著性检验结果,就是多元Mean向量检验的结果。如果p值小于0.05,拒绝原假设,说明均值向量不等于目标向量。
3.2 两组独立样本的均值向量比较
两组数据是最常见的情形,比如实验组和对照组,各测了若干个指标,想知道两组整体上有没有差异。
操作上同样是:Analyze → General Linear Model → Multivariate,把指标变量放入因变量列表,把分组变量放入固定因子框,然后确定运行。SPSS会输出四行检验统计量:Pillai's Trace、Wilks' Lambda、Hotelling's Trace、Roy's Largest Root。这四行对应的p值通常非常接近,一般以Wilks' Lambda为主,因为它是最经典、文献里最常报告的。
这里要说一个很多人不知道的对应关系:两组的情况里,这四个多元统计量本质上都是Hotelling T2的不同变形,Wilks' Lambda和T2之间还有精确的数学转换关系。所以你可以放心,虽然菜单里没写Hotelling T2,但你已经做完了等价检验。
如果整体检验显著,下一步通常还想知道具体是哪个变量有组间差异。这时候看输出里的“检验主体间效应”表格(Tests of Between-Subjects Effects),这个表格会对每一个因变量单独做F检验,相当于单变量方差分析的结果。要注意的是,这个表只是事后探索性分析,汇报的时候要说明它是整体显著后的后续检验,不能把它的p值当成独立假设检验来解读。
3.3 三组及以上用MANOVA,统计量怎么选
三组及以上情形,操作和两组基本一样:Analyze → General Linear Model → Multivariate,因变量放指标,固定因子放分组变量。输出里同样有四个多元统计量,但在样本量不均衡或者变量数较多的情况下,四个统计量的p值会出现差异。
这时候怎么选?我的经验是:如果各组样本量大致相当,Wilks' Lambda最稳妥;如果样本量比较小,或者数据可能偏离多元正态,优先看Pillai's Trace,它是最稳健的一个,对正态性偏离和协方差阵不齐的容忍度最高。Hotelling's Trace通常和Wilks' Lambda结论一致;Roy's Largest Root是基于最大特征根的检验,当多个组别中有两组差异特别大时它功效很高,但整体检验功效在复杂情况下会弱一些,一般不怎么作为首选。
结论显著后,SPSS默认只输出“哪些变量组间有差异”的单变量F检验。如果你还需要知道“究竟是哪两组之间有差异”,得回去再做一次单变量的单因素方差分析配合事后多重比较,比如Tukey或者Bonferroni,这一步SPSS不会自动帮你做,很多实验报告就漏在这里。
4. 协方差阵齐性检验的SPSS实现
4.1 Box's M检验藏在哪个菜单里
协方差阵齐性检验,在SPSS里不是没有,而是藏得比较深,而且不同版本的菜单位置不太一样。
比较新版本的SPSS,可以用Analyze → General Linear Model → Multivariate,把变量放好后,点击Options按钮,在Display区域勾选“Box's M test for equality of covariance matrices”,确定运行。注意这个选项只在你指定了至少一个固定因子时才会出现,没有分组变量时是灰色的。
如果你用的版本里这个选项找不到,或者说你懒得翻菜单,还有一个几乎全版本通用的做法:用判别分析“借”这个检验。操作是Analyze → Classify → Discriminant,把分组变量选入Grouping Variable并定义范围(比如1到3),把指标变量选入Independents,然后打开Statistics按钮,勾选Box's M,确定运行。输出结果中会有一个“协方差矩阵的检验”的表格,就是Box's M检验。
两种方法算出结果完全一样,只是入口不同。我用后面这种方式更多,因为它在老版本和新版本里都存在,不容易踩版本的坑。
4.2 Box's M输出结果怎么看
SPSS输出中会给出一个表格,包含Box's M统计量、F值、第一自由度和第二自由度以及Sig值。需要注意,上面行是近似F值,旁边可能还有一个基于不同校正公式的F值,两者差别通常很小。
判断规则很简单:Sig值大于0.05,说明没有足够证据拒绝各组协方差阵相等的原假设,认为协方差阵齐性成立;Sig值小于0.05,说明拒绝原假设,协方差阵不齐。
但这里必须强调两点。
第一,Box's M检验高度依赖多元正态性。如果数据本身不满足多元正态,检验结果很容易假阳性——也就是说协方差阵其实没多大问题,但因为数据偏态,检验告诉你“不齐”。所以做协方差阵检验之前,最好先做一下前面说的多元正态性检查。如果正态性都不满足,Box's M的结果不能作为唯一依据。
第二,样本量很大时,Box's M会过度敏感。样本量上千以后,协方差阵微小的、实际无伤大雅的差异都会导致显著。这时候我通常会再看一个辅助指标:协方差阵的行列式值或者各组协方差阵的对数行列式。如果各组对数行列式差异不大,即使Box's M显著,也可以认为偏离程度在可接受范围内,后面的多元方差分析照常做,但结果解读时要说明这一点。
4.3 协方差阵不齐,后续分析怎么调整
如果检验结果明确是协方差阵不齐,而且不是样本量和正态性的副作用,那后面的多元方差分析结果就需要谨慎处理。
SPSS的GLM Multivariate里,Options对话框中还有一个“基于修正模型的检验”之类的选项,实际上就是针对方差不齐的稳健校正。更重要的是,如果只是两组比较,可以改用更稳健的统计量,比如Brown-Forsythe检验或者Welch修正,SPSS的单变量方差分析里可以直接选,多元情形下则优先报告Pillai's Trace,因为它在协方差阵不齐时相对最稳健。
另一种思路是改用不做协方差阵假设的方法,比如基于距离的置换检验(PERMANOVA),或者对数据进行某种变换(取对数、Box-Cox变换)改善协方差阵的齐性。这块已经超出了SPSS默认菜单的范围,但如果你做毕业设计或者发论文,遇到协方差阵严重不齐的情况,这些方法是解决问题的正路。
5. 常见报错和结果误读速查手册
5.1 结果里出现警告“矩阵奇异”,怎么处理
做GLM多元分析时,经常有同学发现结果表里某些统计量显示为“.”或者直接报错“矩阵奇异”。这是因为协方差阵的逆矩阵算不出来,本质原因通常有两个:
一是变量之间存在高度共线性。比如你同时放了“总分”和“语文分”“数学分”几个变量,总分等于部分之和,变量间出现完全线性相关,协方差阵就是奇异的。解决办法是去掉冗余变量。
二是样本量不够。样本量小于或等于变量个数时,协方差阵的估计本身就不可靠,很容易出现奇异。解决办法是增大样本量或者精简变量。
5.2 结果显著不等于差异“大”
多元检验给出p小于0.05,只能说明检测到了统计显著的差异,完全没说明差异的大小。一个样本量很大的研究,哪怕组间差异小到毫无实际意义,p值也可能非常小。反过来,样本量小的时候,明明两组差异肉眼可见,p值却可能不显著。
所以在写实验报告的时候,光汇报p值是不够的。均值向量检验之外,建议顺便报告一个效应量。偏eta方(Partial Eta Squared)是SPSS多元分析输出里自带的一个指标,位于主体间效应检验表里,数值范围在0到1之间,一般认为0.01算小效应、0.06算中等效应、0.14以上算大效应。报告格式可以写成:Wilks' Lambda = 0.62,F(6, 73) = 4.28,p = 0.001,偏eta方 = 0.24。这样信息才算完整。
5.3 实验报告和论文里该汇报哪些内容
结合我批改实验报告的经验,一份能拿高分的均值向量和协方差阵检验报告,至少要包含这么几块内容:
第一,研究问题和假设,要说清楚检验的是哪个均值向量、协方差阵齐性检验服务什么前提;第二,数据描述,包括样本量、变量名称、分组情况、缺失值处理方式;第三,前提检验结果,多元正态性诊断和协方差阵检验的结论;第四,多元检验的结果,包括统计量、自由度、p值和效应量;第五,如果整体显著,补上单变量事后检验的结果。
最容易被忽略的是协方差阵检验的结果和多元正态性的诊断过程。很多同学直接跳过前提检验,上来就汇报均值检验结果,这在严格的老师那里是要扣分的,因为统计检验的正确性完全建立在这些前提之上。
5.4 一个完整的操作流程清单
最后整理一个我自己上机时用的流程清单,基本可以应对大多数实验课的要求:
准备好长型数据文件,分组变量用数字编码。先做描述统计,确认没有录入错误和极端异常值。用回归保存马氏距离,对马氏距离做卡方Q-Q图检查多元正态性。用GLM Multivariate做均值向量检验,选择Pillai's Trace为主要报告统计量。在GLM或判别分析中勾选Box's M,检查协方差阵齐性。如果前提检验不满足,记录偏离程度,选择更稳健的统计量或者对数据做变换。最后整理结果,写清楚检验的统计量和p值,补上效应量和单变量事后检验。
按这个顺序走一遍,基本上不会漏掉关键步骤。
最后再分享一个小经验:上机实验最怕的不是统计方法不会,而是数据整理阶段没做好。我见过太多同学因为分组变量编码混乱、缺失值处理不干净,导致后面所有结果都带着问号。做多元分析之前,花30分钟把数据结构理清楚了,后面实操就是按部就班的事。均值向量和协方差阵检验这块,第一次操作觉得绕,做过一遍之后就发现,SPSS的菜单设计其实是按照“先做前提检验、再做核心检验、最后补后续分析”的逻辑来的,这个流程思维比记住某个按钮在哪更重要。