做问卷分析的人,电脑里基本都有一个SPSS,而SPSS里有一道绕不过去的坎,叫主成分分析。我见过不少同学在第一步就卡住:“主成分分析去哪里找?Analyze菜单里怎么没有PCA这个选项?”然后有人就会告诉他,在Factor对话框里。于是又有了第二个问题:“我明明要做主成分分析,为什么跑到因子分析里面去?”这个困惑太常见了,因为SPSS确实没有单独的“主成分分析”对话框,它是作为因子分析过程中的一种提取方法存在的。这篇就沿着操作这条路,把适用场景、菜单位置、结果解读、得分计算,以及大家反复问的“它和因子分析到底有什么区别”完整讲一遍。你也别急着闭眼照做,先看完开头的适用边界,再动手点菜单,不然很容易跑出一堆垃圾结果还自信满满,那才是真的白忙。
1. 先别急着点菜单:主成分分析的适用边界与数据前提
1.1 主成分分析在做什么:一句话拆解降维逻辑
主成分分析的本质,是对一组彼此相关的变量做线性变换,生成一组互不相关的新变量。这句话听起来绕,换个说法你就明白了:你手里有一堆指标,这些指标之间往往信息重叠,比如“销售额”和“客户满意度”可能都受同一种经营能力影响。主成分分析要做的是把这堆指标压成少数几个综合变量,让新变量尽量保留原始数据中的波动信息。
这里的关键词是“波动”,准确说是方差。主成分分析找的第一个方向,是使所有样本投影过去之后方差最大的那个方向,也就是第一个主成分PC1。第二个主成分PC2则与PC1正交,并且在剩余方差里占最大比例,依此类推。说白了,PCA不是“删变量”,而是“重组变量”。它并没有把某个指标丢掉,而是把所有指标按权重组合成新变量,再告诉你前几个新变量已经能代表大部分信息。
所以,什么时候该用主成分分析?典型场景有三类:一是做综合评价,比如把多个经济指标压缩成一个综合得分,给城市或公司排名;二是解决多重共线性,后续想回归但自变量高度相关,先用主成分提取出互不相关的综合变量再回归;三是大规模问卷数据处理,把几十个题项压缩成几个维度,方便后续分析。反过来,如果你的数据里变量之间本来就不怎么相关,那主成分分析基本没有意义,因为它就是靠变量间的相关性来提炼公共信息的。
1.2 数据到底要满足什么条件,KMO不过关时怎么办
主成分分析在SPSS里跑起来很容易,但结果靠不靠谱,前提条件必须过硬。很多人不看数据直接点按钮,跑出KMO只有0.4,还硬着头皮解释,这就是典型的本末倒置。
首先,参与分析的变量必须是数值型。问卷里的五点量表、七点量表,SPSS里按数值变量处理没问题;但如果你把“性别”“学历”这种分类变量放进去,分析结果会很尴尬。行业里的经验标准是:样本量最好不低于变量数的5倍,总样本量100以下时要非常谨慎。比如你有20个题项要降维,300份问卷算是比较稳的底子,100份就可能出现结果不稳定、换个样本跑出来完全不同的情况。
其次,你要关注KMO和Bartlett球形检验。SPSS的因子分析对话框里勾选KMO后,会输出一个KMO值和Bartlett检验P值。KMO取值范围0到1,一般高于0.8视为良好,0.7到0.8可以接受,低于0.6说明变量间的偏相关太高,不太适合做。Bartlett检验的P值应小于0.05,表示相关矩阵不是单位矩阵,变量之间存在足够的相关性。
如果KMO不达标,别急着下结论“数据不行”。先做三件事:第一,检查有没有反向计分的题项没有反转,方向不一致的题项会破坏相关结构;第二,看有没有载荷过低或者共同度低于0.3的变量,把它们删掉再跑一次,KMO经常能救回来;第三,确认样本量确实够用,如果样本不到50份,KMO再好看也要打个问号。顺带说一句,有些人一上来就问“多维度量表的效度分析需不需要分维度做”,这其实是个方法论问题,后面第6部分我会专门展开,这里你先记住:主成分分析不等于效度分析的唯一工具,这点很重要。
2. SPSS里的主成分分析藏在哪:完整菜单操作与Syntax
2.1 数据准备:变量格式、缺失值、要不要标准化
在动手点菜单之前,数据表要先整理好。SPSS的数据视图里,通常是一行一个被访者或一个样本,一列一个变量。比如你有20道问卷题,就是20列,变量名建议用简短英文或拼音,避免中文变量名在某些版本里显示异常。
缺失值是另一个坑。SPSS因子分析默认采用列表删除法,也就是某个样本只要有一个变量缺失,整个样本就会被剔除。如果你的问卷有漏填比较多,样本量会肉眼可见地缩水。这时候我会先去处理缺失值,用均值替换、多重插补,或者至少看一下缺失比例再决定,而不是直接拿默认设置跑。
然后是要不要标准化的问题。很多教程会先告诉你做标准化,再用标准化后的数据做主成分分析。实际上,SPSS里默认分析的是相关矩阵,而不是协方差矩阵,相关矩阵本身就相当于把所有变量都标准化到均值0、标准差1了。所以,只要你的变量用同一套量纲的Likert量表,直接用原始数据跑就行,不用手动标准化。只有当你选的是协方差矩阵,或者变量之间单位严重不一致且你有意保留原始方差占比时,才需要额外处理。
2.2 一步步点出来:Factor对话框的真正用法
流程如下:
- 菜单栏依次点击 Analyze → Dimension Reduction → Factor。
- 把要分析的变量从左侧选入 Variables 列表框。
- 点击 Descriptives,勾选 KMO and Bartlett's test of sphericity,这是你判断数据适配性的核心输出。
- 点击 Extraction,Method 保持默认的 Principal components,这就是主成分分析。Display 区域勾选 Unrotated factor solution 和 Scree plot。Extract 区域默认是 Eigenvalues over 1,也就是特征根大于1的成分才保留,一般先按这个跑。
- 点击 Rotation,如果是单纯做主成分降维,选 None 就可以;如果后面想更清楚地解释成分含义,可以选 Varimax。这里先不急,第5部分我会细说旋转。
- 点击 Scores,勾选 Save as variables,Method 选 Regression,这样SPSS会在数据表里追加主成分得分变量,后续做回归或者综合排名都会用到。
- 点击 Options,缺失值默认 Exclude cases listwise,先不动;下方可以勾选 Suppress small coefficients,绝对值低于0.4的载荷不显示,表格看起来更清爽。
- 点 OK,去看输出。
操作并不复杂,但有几个选项很容易被忽略。比如很多人不知道 Scores 面板里保存的是“成分得分”,跑完发现数据表多了几列FAC1_1、FAC2_1,不知道那是什么,这就是得分变量。还有 Extraction 里的 Eigenvalues over 1 和 Fixed number of factors 的区别,前者是自动按特征根选成分个数,后者是你自己指定要提取几个主成分。我一般建议先跑一次默认特征根方案,观察碎石图和累计方差贡献率,再决定是否需要手动固定个数。
2.3 用Syntax跑更快:给批量操作和复现留条路
SPSS的菜单操作适合新手,但如果你是那种要处理几十个变量、或者想给结果留个操作记录的,我建议直接用语法窗口跑。打开 File → New → Syntax,粘贴下面这段,把变量名换成你自己的:
FACTOR /VARIABLES var1 var2 var3 var4 var5 var6 var7 var8 /MISSING LISTWISE /ANALYSIS var1 var2 var3 var4 var5 var6 var7 var8 /PRINT INITIAL KMO EXTRACTION /PLOT EIGEN /CRITERIA MINEIGEN(1) ITERATE(25) /EXTRACTION PC /ROTATION NOROTATE /SAVE REG (ALL) /METHOD=CORRELATION.重点看两行:/EXTRACTION PC表示提取方法为主成分(Principal Components);/SAVE REG (ALL)表示用回归法保存所有主成分得分。跑完后数据视图会多出FAC1_1、FAC2_1等变量。这段语法的好处是可复现,以后换一批数据,或者改样本范围,直接改变量名重跑一遍,不会漏掉选项。对写论文来说,把Syntax附在附录里,也能证明操作规范。
3. 跑完看哪几个表:KMO、总方差解释、碎石图和成分矩阵逐个拆
3.1 KMO与Bartlett球形检验:只看数值还不够
跑完主成分分析后,输出窗口会有一串表格,很多人的习惯是直接滑到总方差解释表,这其实错了。第一个要看的,是 KMO and Bartlett's Test 这张表。
KMO值我前面提过,大于0.8很好,0.7以上可以接受,0.6以下慎重。但我在这里想多说一句:KMO只告诉你数据“能不能做”,不告诉你“做了之后是不是你想要的结构”。有时候整体KMO挺好,但提取出来的主成分含义模糊,每个成分上都有好几个变量交叉载荷很高,这时候问题往往出在变量设计上,而不是统计方法上。
Bartlett球形检验的P值小于0.05,说明相关矩阵和单位矩阵差异显著,存在可提取的因子结构。如果P值很大,数据可能更像一团散沙,此时就算强行提取出几个主成分,可解释性也会很差。所以这一步别偷懒。
还有一个细节:SPSS输出的表格标题是KMO and Bartlett's Test,里面的“Bartlett's Test of Sphericity”有个容易拼错的词,Sphericity,不是Sphere,很多人在报告里写错。论文里学名是“Bartlett球形检验”,口头说“巴特利特”都可以。
3.2 成分个数怎么定:特征根、累计贡献率和碎石图的关系
主成分分析最关键的决策是保留几个主成分。SPSS默认按特征根大于1提取,这是Kaiser准则,意思是保留那些信息量至少相当于一个原始变量的成分。这个法则在教科书里通行,但实际分析时不能只盯这一条。
第二个依据是累计方差贡献率。Total Variance Explained 表里有一列“累积%”,社会学科研究通常要求提取出的主成分累计贡献率至少在60%到70%以上;工科或者物理化学类数据,因为变量相关性更强,累计贡献率往往要求85%以上。如果你提取了5个成分,累计贡献率才勉强到65%,这时候要考虑是否变量之间存在较大的独有方差无法被公共成分解释,或者变量本身质量一般。
第三个依据是碎石图(Scree Plot),横轴是主成分序号,纵轴是特征根。碎石图的判断原则是找“陡峭曲线开始变平缓的拐点”,拐点之前对应的是值得保留的成分,拐点之后基本上是碎石一般的小特征根。举个例子,第一主成分特征根4.5,第二主成分2.8,第三主成分1.2,第四主成分0.7,后面都在0.5以下,那拐点大概率在第3和第4之间,保留3个主成分比较合适。
我个人的习惯是,把特征根大于1、累计贡献率和碎石图三个结果放在一起看,如果一致,直接用;如果不一致,优先以碎石图和可解释性为准。特别是当样本量不大时,特征根经常会把一些业务上没意义的成分也拉进来,这时候你要谨慎。
3.3 成分矩阵与旋转:变量和主成分之间的“相关系数表”
Component Matrix 就是成分矩阵,里面每个数字是变量与该主成分之间的相关系数,也叫载荷。载荷绝对值越高,说明这个变量和对应主成分关系越紧密。比如PC1上所有题项载荷都在0.7以上,PC2上只有特定几个题项载荷高,那PC1可以解释为“整体因子”,PC2可能对应某个子维度。
以下是一份我用模拟数据跑出的示意成分矩阵,仅用于展示怎么看表:
| 变量 | PC1 | PC2 | 共同度 |
|---|---|---|---|
| 题项A | 0.78 | -0.21 | 0.65 |
| 题项B | 0.82 | 0.15 | 0.70 |
| 题项C | 0.74 | -0.33 | 0.66 |
| 题项D | 0.31 | 0.79 | 0.72 |
| 题项E | 0.28 | 0.84 | 0.78 |
从这张示意表能看出,题项A、B、C在PC1上载荷高,题项D、E在PC2上载荷高,所以前三个变量构成一个维度,后两个变量构成另一个维度。最后一列“共同度”表示每个变量的方差有多少被提取出的主成分解释,0.6以上算可接受,低于0.3说明这个变量跟整体结构没什么关系,考虑删掉再跑。
如果你在Rotation里选了Varimax,SPSS还会输出旋转后的成分矩阵,事后看,旋转的作用是让每个变量尽量只在一个主成分上有高载荷,减少“一个变量在两个成分上都高”的模糊情况。但要注意,旋转会重新分配各成分的解释力度,所以旋转后的方差贡献率和之前不一样,报告时别把两列数据搞混了。
4. 把结果存下来:主成分得分的保存、回归法与综合得分计算
4.1 保存主成分得分:Scores面板里的三个方法怎么选
主成分分析不只是为了看看哪些变量聚在一起,很多时候你要拿到每个样本的“主成分得分”,用于后续计算综合排名或进入回归模型。SPSS的Scores面板里提供了三种方法:Regression、Bartlett、Anderson-Rubin。
回归法(Regression)是默认选择,也是日常使用最多的一种。它的原理是用回归思想估计每个样本的成分得分,计算相对简单,结果和因子分析中回归法得分类似。Bartlett法的特点是得分更无偏,但SPSS论文里提到得少。Anderson-Rubin法保证不同主成分的得分之间不相关且均值为0,适合后续强假设的统计模型。
对大多数研究场景,选Regression就够用了。操作上,只要在Scores面板勾选Save as variables,SPSS就会在数据视图新增FAC1_1、FAC2_1这样的变量,每个变量的均值接近0,标准差接近1。注意这里是“接近”,不是严格等于,尤其在样本较小时会有轻微偏差。
4.2 计算综合得分:为什么不能直接加总,权重怎么给
很多人拿了FAC1_1和FAC2_1,下一步直接Compute一个变量等于两个得分相加,这种做法不严谨。原因很简单:PC1和PC2对方差贡献不一样,PC1通常承载了更多信息,理论上权重应该更高,直接把二者加总等于默认它们同等重要,这不符合主成分分析的逻辑。
正确的综合得分计算公式是:
综合得分 = (λ1 × F1 + λ2 × F2 + ... + λk × Fk) / (λ1 + λ2 + ... + λk)
其中λi是第i个主成分的特征根,Fi是第i个主成分的得分变量。如果用总方差解释表里的“方差百分比”做权重,分母就应该用累计方差贡献率,分子相应使用各成分的方差百分比乘以得分。两种算法最终结果的相对排名是一致的,只要保证分子分母的量纲对应即可。
在SPSS里可以这样写:
COMPUTE total_score = (L1 * FAC1_1 + L2 * FAC2_1) / (L1 + L2). EXECUTE.这里的L1、L2要替换成你在总方差解释表里读到的初始特征根或者方差贡献率。还有一种做法是不除以分母,直接加权求和,对“排名”没有影响,但如果你想把综合得分控制在一定量纲内,除以累计贡献率更规范。
4.3 得分的实际用途:回归、聚类与样本对比
保存下来的主成分得分,最大价值在于后续分析。最常见的用途是替代原始变量做回归,解决多重共线性问题。比如原始自变量有10个,互相之间相关度高,你直接扔进回归模型,VIF值可能高得吓人。这时候提取3个主成分,用FAC1_1、FAC2_1、FAC3_1作为新自变量去做线性回归,变量之间彼此正交,共线性问题自然消失。
第二个常见用途是聚类分析。拿到主成分得分以后,用层次聚类或K均值聚类对样本分群,数据维度从几十个压缩到几个,聚类结果会更稳定,展示也更清晰。聚类的距离计算在低维空间里更有意义,高维数据下算什么欧氏距离,全是噪声。
第三个用途是横向对比。比如你要给几个分支机构打综合绩效分,就用主成分分析把若干个绩效指标压成一个综合得分,再按得分排序。但这里要特别提醒:综合得分只是一个“相对排序工具”,它不代表绝对的优劣,得分是负数也不代表绩效“为负”,只是因为所有样本的得分都被标准化到均值0附近,负分只是低于平均水平的意思。我见过不少人把负分解读成亏损,那是完全错误的理解。
5. 容易翻车的几个细节:样本量、旋转、多重共线性处理的实战经验
5.1 样本量不足时,主成分结果有多脆弱
主成分分析的稳定性非常依赖样本量。如果你只有60个样本,却有15个变量,跑出来的载荷矩阵可信度极低。一个直观的测试办法是:把样本随机分成两半,分别跑主成分分析,如果两次得到的成分结构和载荷排序差别很大,说明数据不足以支撑稳定结果。这个稳定性检验不需要什么特殊软件,SPSS里用 Select Cases 随机抽样就行。
样本量不足的另一个信号是KMO还算可以,但总方差解释表里单个主成分贡献率很高,另外所有后续成分特征根都很接近1,比如0.98、0.96、0.94。这时候SPSS只按大于1提取就只保留了一个主成分,但碎石图看起来拐点又不明显,说明数据内部的结构并不牢固,加几个样本结果可能就变了。
如果无法增加样本,最实用的办法是删变量。先看共同度,低于0.3的变量删除;再看变量之间的相关矩阵,如果两个变量相关系数超过0.9,保留其中一个,删除另一个,因为完全冗余的信息只会让主成分结构往错误方向倾斜。变量少一点,样本量相对足够,结果往往更干净。
5.2 旋转看起来高大上,用不好反而让结果难解释
旋转分两种,正交旋转(Varimax是代表)和斜交旋转(Direct Oblimin等)。主成分分析里最常用的是最大方差法(Varimax),它让每个变量在每个主成分上的载荷变得更“两极化”,高载荷更高,低载荷更低,这样主成分的业务含义更清晰。
但是,旋转不是万能的。如果你的目标是计算综合得分进行后续回归,我建议不做旋转。因为旋转会改变主成分得分的方差结构,综合得分权重体系也跟着变,有时候PC1在旋转后解释率骤降,整个排序逻辑就变了。如果是为了探索问卷结构,让每个主成分能对应到一组题项上,那可以旋转,但要在报告中明确说明你用了什么旋转方法。
还有一个细节:旋转后SPSS会输出“旋转平方和载入”,里面每个成分的方差贡献率和旋转前不同,累计贡献率不变。很多人只看“初始特征根”那列,或者只复制“提取平方和载入”那列,漏掉了旋转后的列。论文里如果你报告了旋转后的成分矩阵,那方差解释比例最好也用旋转后的,避免信息来源不一致。
5.3 碰到完全相关的变量时,先做这个动作
主成分分析喜欢变量之间有相关性,但不喜欢“完全相关”。比如两份问卷题项措辞完全相反,或者某两个变量本质上是用不同公式计算出来的同一个量,它们之间的相关系数可能是1。这时候相关矩阵的行列式可能为0,也就是矩阵奇异,SPSS会报“The matrix is not positive definite”之类的错误,或者结果里出现乱七八糟的负特征根。
处理方式很简单:跑分析前,先看 Correlation Matrix,把相关系数达到0.9以上的变量找出来,凭业务经验保留一个,删除另一个。这个动作叫共线性筛查,虽然听起来只是预处理,但它能救回不少无效分析。很多人以为主成分分析天生能处理所有共线性问题,这是误解,它处理的是“中等强度相关性”,而不是“完全线性相关”。
另外,反向计分题如果没有反转,也容易让某些变量之间出现系统性的负相关,造成提取出的第一个主成分呈现“一半正载荷一半负载荷”的两极分化。遇到这种情况,第一步不是删变量,而是确认所有反向题已经用 Recode into Different Variables 做了反向处理。
6. 主成分分析和因子分析的区别:为什么总被混用,你该选哪个
6.1 目标不同:方差最大 vs 协方差解释
主成分分析和因子分析在SPSS里共用同一个菜单,很多人就默认它们是一回事,这是最大的误解。两者在数学目标上根本不同:主成分分析的目标是最大化提取的总方差,它把变量线性组合成新的综合变量,信息不损失太多;因子分析的目标是用少数潜在因子解释变量之间的相关结构,它假设变量背后存在不可观测的潜在因子,还要估计误差项。
打个比方,主成分分析像“信息压缩器”,不管业务含义,先把数据里方差最大的方向抓住;因子分析像“结构探测器”,它关心的是观测变量背后的潜在维度到底是什么。前者输出的是成分得分,精确可复现;后者输出的是因子载荷和因子得分,而且还要做因子旋转来找解释。如果你想做综合评价、降维、计算排名,主成分分析更合适;如果你想做问卷结构效度检验、验证理论维度,因子分析更合适。
6.2 当心这个经典误会:论文里写着主成分分析,输出却是因子分析
我在评阅论文和审稿时经常看到一个场景:作者在方法部分写“使用SPSS进行主成分分析”,但打开SPSS语法,Extraction Method 却是 Principal Axis Factoring,也就是主轴因子法,这是地地道道的因子分析。这两个概念混用,明眼人一看就知道作者不太清楚自己在跑什么。
为什么容易混?因为SPSS的路径本来就叫Factor(因子分析),而主成分分析隐藏在它的Extraction下拉菜单里。如果操作时没把Method从“主成分”改到其他方法,默认就是主成分。但如果你用了什么“智能选择”,或者被教程误导选了“Principal Axis Factoring”,你做的就不是主成分分析了。
所以报告里写清楚三点:提取方法是什么、是否旋转、如何确定保留成分数。如果是主成分分析,就说“采用主成分提取法”;如果是因子分析,就说“采用主轴因子法/最大似然法”。数据输出也一样,主成分分析看“成分矩阵”,因子分析看“因子矩阵”,用词别乱。
6.3 问卷效度分析要不要分维度做,一次说清楚
很多人在做多维度量表效度分析时,纠结要不要把每个维度拆开单独做主成分分析或因子分析。我的建议是这样的:
先区分两个问题。如果你做的是探索性因子分析,目的是看每个题项是否归属于预设维度,那么标准做法是把所有题项一次性放进分析,让统计结果告诉你结构是什么。如果整体跑出来维度结构清晰,每个题项载荷都在预设维度上,那就直接报告整体结果。如果整体跑出来一团乱,你再去按维度分开做,那属于“事后挽救”,不是不可以,但报告里一定不能隐瞒你整体跑过的事实,否则有“钓鱼式分析”的嫌疑。
但如果你做的是主成分分析,目的是把一个多维度的综合指标压缩成一个综合得分,比如把经济效益、社会效益、环境效益十几个指标浓缩成一个总效益指数,这时候整体做主成分是合理的,不需要分维度。因为你的目标不是验证维度结构,而是构造综合指标。要不要分维度,取决于你分析的目的,而不是别人说了什么。
我在实际项目里的习惯是:先把研究目的写清楚,再决定方法。要做结构效度,就用因子分析流程,分不分维度要有理论依据,而不是因为整体结果不好看才分。要做综合评价,就用主成分分析,整体做,取综合得分。明确了线后,你在SPSS里的每一步操作都会有意义。主成分分析这个工具,会参数只是及格,能想清楚什么时候该用它、什么时候该避开它,才算是真正掌握了。