SPSS主成分分析实操:从原理到结果解读与综合得分计算
2026/9/16 8:19:46 网站建设 项目流程

算起来这已经是SPSS实操系列的第五篇了。前面几篇聊了数据整理、描述统计、差异检验这些基础操作,今天终于轮到降维这个重头戏——主成分分析。

主成分分析(PCA,Principal Component Analysis)是目前论文和实际项目里出场率极高的一种多元统计方法。你手里攥着十几二十个高度相关的变量,直接放进回归模型容易炸出多重共线性,放进聚类又容易让某些维度被重复加权,这时候PCA就派上用场了:它用少数几个互不相关的综合变量,去替掉原来那一大堆相关变量,同时尽可能保留原始数据里的信息。

这篇文我尽量把操作逻辑和SPSS的具体实现讲透。不管是写本科毕业论文、做问卷效度分析,还是工作中搭指标体系、做用户画像,只要你有降维需求,这篇都值得好好看一遍。我会把菜单操作、参数选择、结果解读、常见翻车现场全串一遍,看完你应该能自己跑完一整套分析,并且看得懂每张表在说啥。

1. 先搞懂主成分分析到底在干什么

1.1 一个能听懂的生活类比

我经常跟人打这个比方:你要给班里几十个同学的综合表现打分,手上有语文、数学、英语、物理、化学、生物、历史、地理八门课成绩。如果直接用这八门课做总分排名,等于默认每门课权重相同,可语文和数学能一样重要吗?你要是把八门课都塞进回归模型,又会发现数学和物理高度相关,信息重复了。

主成分分析的思路,就是帮你从这八门课里提炼出两三个"看不见的综合能力"。比如第一个主成分可能对应"数理逻辑能力"(数学、物理、化学在上面载荷都高),第二个主成分可能对应"语言表达能力"(语文、英语在上面载荷高),第三个可能对应"记忆背诵能力"(历史、地理载荷高)。这样一来,你原来要处理八门课,现在只需要处理两三个综合得分,信息损失还很小。

这就是PCA的本质:通过线性变换,把一组可能存在相关性的变量,转换为一组线性不相关的变量,转换后的这组变量就叫主成分。每个主成分都是原始变量的线性组合,第一个主成分捕获的方差最大,第二个次之,以此类推。数学上,主成分就是原始变量协方差矩阵的特征向量,对应的特征值就是该主成分解释的方差大小。这些细节SPSS全帮你算了,不用手推,但要理解逻辑。

1.2 主成分分析和因子分析别搞混

我见过太多人把主成分分析和因子分析当成一回事,甚至SPSS菜单里都没有单独的"主成分分析"入口,它藏在"分析 → 降维 → 因子"里,这更助长了混淆。

这两者的区别,一句话版本是:主成分分析是"变量压缩",目的是用少数综合变量代表多数原始变量,它是数学变换,没有模型假设;因子分析是"寻找潜在结构",它假设原始变量背后存在不可观测的公共因子,是统计建模。

实操中的差别在于:PCA提取出来的成分是原始变量的精确线性组合,能直接计算每个样本的成分得分;因子分析的因子得分则带有估计性质,而且因子分析通常会做旋转(比如最大方差旋转)来让载荷矩阵结构更清晰、更"好解释"。如果你只是想把20道题的问卷压成几个维度,或者给后续回归/聚类做预处理,做PCA就够用了;如果你是做量表开发、想验证构念效度,那更适合做探索性因子分析(EFA)。

有个细节要知道:在SPSS的"因子分析"对话框里,只要提取方法选"主成分",得到的结果从数学上讲就是PCA的结果。所以你在SPSS里跑"因子分析-主成分提取",写论文时既可以按主成分分析的逻辑写,也可以按探索性因子分析的逻辑写,但要用对术语,别混着说。

1.3 为什么问卷数据特别适合用主成分分析

问卷量表题项往往有这几个特点:题项数量多、彼此相关性强、背后有潜在维度。比如一个"顾客满意度"量表,可能从产品质量、价格感知、服务态度、购物体验四个维度设计了20道题。直接用这20道题当20个独立变量做后续分析,会有两个麻烦:一是维度太多,模型复杂;二是同一维度下的题目相关性太高,容易有多重共线性。

这时候先用主成分分析做降维,把20道题压缩成4个左右的主成分,每个主成分代表一个隐含维度,再用这4个主成分去做回归、聚类、综合评分,整个分析链条就顺了。这也是主成分分析在问卷数据里最常见的三种用途:一是做维度探索,看题项是否可以归为几个类别;二是做结构效度分析的前置步骤或辅助验证;三是作为后续建模的预处理,消除共线性后果。

热搜词里有个问题问得特别好:"SPSS多维度题项效度分析需要分维度做吗"。我的经验是:先全校数据一起跑一遍PCA,看能不能自然分出理论维度;若能自然分出来,说明结构效度的基础不错,再按维度单独算信度和效度指标;若全校跑出来聚不到一起,问题就比较严重,要么是题项设计有偏差,要么是样本量不足,这时候硬分维度意义也不大。后面我专门写一节讲这个。

2. 做之前的数据整理与检查

2.1 数据清洗和缺失值处理

很多人拿到问卷数据,直接全选变量点"确定",结果跑出来要么报错,要么结果非常离谱。实际上,主成分分析对数据质量的要求还真不低,尤其是缺失值和异常值。

第一步是确认变量类型和测量尺度。主成分分析要求所有进入分析的变量都是连续型或有序分类变量,而且是数值型。你要是把"性别"这种二分变量和"满意度评分"放一起做PCA,数学上虽然能算,但解释起来会非常拧巴——连续变量和分类变量的方差贡献没法公平比较。所以在录入SPSS时,变量视图里"测量"列的设置务必正确,标准做法是所有进入PCA的题项都设为"度量"或至少"有序"。

第二步是处理缺失值。问答题、漏答题都会产生缺失。如果缺失比例很低(5%以内),可以直接用列删法或配对删除;如果缺失比例偏高,不要急着删样本,用SPSS里的"多重插补"先把缺失值补上再做分析。多提一嘴,插补完的数据SPSS会生成一个"合并结果"数据集,填好缺失后要先另存一份,再跑PCA。别在原数据上插补完直接分析,那样插补产生的多条记录会被当成独立样本。

第三步是检查反向题。量表里经常有反向计分的题目,你没做反向编码就直接进PCA,这些题和其他题的载荷会呈现系统性负号,看着特别奇怪。统计软件不会帮你判断题意,反向题必须先在数据里做变换(比如5点量表用6减原值),再参与分析。

2.2 样本量、相关性和适用性预检

在跑PCA之前,最值得做的预检有两个:

第一个是看样本量。经验法则是:样本数至少是题项数的5到10倍,且绝对数最好不要少于100。比如有20道题,200个以上的样本是比较安全的。这个标准没有绝对硬性规定,但样本太少时PCA结果极不稳定,换个样本可能主成分就变了。

第二个是看变量之间的相关性。PCA本质上是在利用变量间的相关性做压缩,如果原始变量之间完全不相关,PCA就毫无意义——压缩不了任何信息。数据跑出来如果变量间相关矩阵里大多数相关系数都特别小(比如都在0.1以下),那大概率不合适做PCA。

相关性的正规检验就是后面结果里的KMO检验和Bartlett球形检验。KMO值反映的是变量间偏相关性大小,取值范围0到1,0.9以上极好,0.8以上良好,0.7以上可以接受,0.6以下基本不建议做。Bartlett球形检验的P值要小于0.05,才说明变量间存在足够的相关性。这两个指标在SPSS里默认就会输出,不用单独操作。

还有一点要提前想好:要不要做标准化。PCA对量纲很敏感,如果变量单位差异极大(比如一个是"费用",从几十到几万;一个是"评分",从1到7),不标准化的话,量纲大的变量会主导第一主成分。SPSS的"因子分析"菜单里,默认"分析"方式就包含"相关系矩阵",这个选项本质上是做了Z-score标准化后再分析的,所以一般不用额外操心。但如果你是直接用Syntax里"协方差矩阵"方式跑,就要注意量纲问题了。

3. SPSS里一步步操作

3.1 打开菜单:分析 → 降维 → 因子

这一小节是纯操作导航,跟着做就行。打开SPSS数据文件后,依次点击:分析(Analyze)→ 降维(Dimension Reduction)→ 因子(Factor)。

在弹出的"因子分析"对话框中,把左侧你想做分析的变量选入右侧"变量"框。比如问卷有20个题项,变量名一般是Q1、Q2到Q20,全选进去。

这里有个操作细节容易被忽略:因子分析对话框底部有"选择"框,可以设置只对某一部分样本做分析。如果你只想对某个分组(比如男生组)单独做PCA,不要在这里用"选择"变量硬切,更推荐先用"数据 → 选择个案 → 如果条件满足"来筛选样本,或者用"数据 → 拆分文件"按分组运行分析。特别是"拆分文件"这个功能,配合因子分析可以一次性输出各组的PCA结果,热搜词里有人专门搜这个,确实好用,但注意拆分完要记得关闭拆分,不然后面跑什么都是分组的。

3.2 关键参数怎么选

进入因子分析对话框以后,有四个按钮要重点配置:描述、提取、旋转、得分。

"描述"按钮里勾选:统计量里的"初始解";相关矩阵里的"系数"、"显著性水平"、"KMO和Bartlett的球形度检验"。系数和显著性用来检查变量相关矩阵,KMO和Bartlett是PCA是否适用的核心检验。

"提取"按钮是这个环节的重点。方法选"主成分";分析选"相关性矩阵";输出里勾选"未旋转的因子解"和"碎石图";提取里选"基于特征值"且特征值大于1。如果你想指定提取固定个数的主成分,比如理论模型是3个维度,就选"因子的固定数量",数字填3。特征值大于1是默认最常用的自动筛选规则,但不一定最佳,有时候特征值1.1的成分解释意义很弱,0.98的成分反而解释性很强,这时候手动指定个数更合理。

"旋转"按钮,这部分我建议PCA默认选"无"。旋转是因子分析常用的手段,是为了让因子载荷两极分化、好解释。但主成分分析的核心目标是提取综合变量、最大程度保留方差,旋转反而会改变各成分的方差占比结构,没有必要。当然,如果你实际上是在做探索性因子分析(EFA),那就勾选"最大方差法"旋转,这也是问卷效度分析里最常被要求的做法。

"得分"按钮勾选"保存为变量",方法选"回归"。这样SPSS会在数据视图里生成几列新变量,比如FAC1_1、FAC2_1,这就是每个样本在各主成分上的得分。如果你还想输出成分得分系数矩阵,方便手算综合得分,可以在"得分"按钮下方勾选"显示因子得分系数矩阵"。

3.3 用Syntax跑一遍,效率更高

菜单点来点去确实直观,但如果你要反复调参、或者有多批数据要跑,我建议用Syntax语法窗口。打开方式是:文件 → 新建 → 语法,或者直接在一个输出结果上右键"编辑 → 在语法中打开"。

这里给出一段完整的PCA语法,和上面菜单操作的参数完全对应:

FACTOR /VARIABLES Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 /MISSING LISTWISE /ANALYSIS Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 /PRINT INITIAL CORRELATION SIG KMO EXTRACTION /PLOT EIGEN /CRITERIA MINEIGEN(1) ITERATE(25) /EXTRACTION PC /ROTATION NOROTATE /SAVE REG(ALL) /METHOD=CORRELATION.

简单解释几个关键行:EXTRACTION PC指定提取方法为主成分;ROTATION NOROTATE是不旋转;MINEIGEN(1)指特征值大于1提取;SAVE REG(ALL)是保存所有主成分得分到数据视图。语法跑完后再回头看数据视图,会多了FAC1_1、FAC2_1这几个新变量。

用Syntax的最大好处是记录留存和复现。你论文的附件里可以放一段语法文件,评审或导师想验证结果时可以直接重跑,比截图菜单操作更透明也更专业。

4. 结果表格逐个解读

4.1 KMO和Bartlett检验怎么看

跑完之后,第一个要看的输出就是"KMO 和 Bartlett 的检验"表。这张表建立在你对PCA的适用性能不能过关的结论上,规范写法是:KMO = 0.832,Bartlett球形检验近似卡方 = 1245.63,df = 190,Sig. < 0.001。

细节是:KMO值只是"可以接受"和"不可接受"的红线,不要把它当成越高越厉害的主成分本身质量的指标。KMO高只说明变量间相关性足够,适合进行因子/主成分提取。有人KMO 0.97,结果提取出两个特征值大于1的成分,两个成分加起来只解释61%的方差,照样不算好;也有人KMO只有0.68,但提取的第一个主成分就解释掉58%的方差,后面再用也顺。当然,KMO低于0.6时我强烈不建议强行跑PCA,这个数之下变量间相关性太弱,主成分会变成各变量"轮流坐庄",解释力极差。

如果KMO不达标,问题的根源通常是样本量不足或变量间相关性太弱。常见补救方式:增加样本量;剔除与所有其他变量相关性都极低的题项(在相关矩阵里找,相关性普遍低于0.3的变量优先剔除);合并含义相近的题项(但这要在问卷设计阶段做,分析阶段合并要慎重)。

4.2 公因子方差和总方差解释

公因子方差表(Communalities)里有"初始"和"提取"两列。初始列都是1,表示每个变量的全部方差都被纳入分析;提取列表示该变量被提取出的主成分所解释的方差比例。比如Q1的提取值是0.762,代表这个题项的信息有76.2%被保留了下来。如果某个题项的提取值特别低,比如低于0.4,说明该题项与主成分的整体结构非常不协调,考虑剔除后重跑。

总方差解释表是判断主成分个数的核心依据。表里有三块内容:初始特征值、提取载荷平方和、旋转载荷平方和(如果你没旋转,第三块可以忽略)。每一行对应一个主成分,按特征值从大到小排列。比如第一个主成分特征值6.328,方差百分比31.64%,累计31.64%;第二个特征值2.114,方差百分比10.57%,累计42.21%……以此类推。

这里补充一个常见认知误区:很多教材说要累计方差贡献率达到80%以上才算好,但实际上在问卷数据分析里,社科领域累计方差贡献率达到60%到70%就可以接受。要求80%以上通常是想做严格的结构效度验证时才会考虑的,不必盲目追求高比例。你提取了4个主成分,累计解释65.3%,在多数情况下是可以接受的,关键还是看提取的成分有没有解释意义。

4.3 碎石图、成分矩阵与成分得分

碎石图长得很像山体滑坡的横截面,横轴是主成分序号,纵轴是特征值大小。特征值从大到小快速下降后,曲线趋于平缓。曲线由陡变缓的那个拐点,就是应该保留的主成分数量的参考位置。拐点之前对应的是"主要成分",拐点之后对应的是"碎石",没有太多提取价值。这个方法主观性不低,和特征值大于1的结果交叉验证下,结论更稳妥。

成分矩阵(Component Matrix)是PCA最核心的结果表格,展示每个原始变量与每个主成分之间的相关系数,也就是因子载荷。载荷绝对值越高,说明该变量与这个主成分的关系越紧密。对应载荷超过0.5的变量是解释该主成分含义的主力,实务中一般要求不少于3个高载荷变量才能给这个主成分起一个靠谱的名字。比如第一个主成分上,Q1到Q6的载荷都在0.6以上,而这些题项内容都和"服务质量"有关,那第一个主成分就可以命名为"服务感知质量因子"。

高通热搜词里有"主成分分析算法python",我多说一嘴:用Python的sklearn做PCA时,对应的.components_矩阵就是SPSS里的成分矩阵来源,但Python默认输出的是按列方向和SPSS有符号差异的,两边的载荷可能正负号相反,这在数学上等价(一个成分乘以-1不改变解释力),别被吓到。

5. 结果怎么用:得分、综合排名与后续分析

5.1 保存在数据里的主成分得分是什么

当你勾了"保存为变量",SPSS会在数据视图里新增几列,变量名通常叫FAC1_1、FAC2_1等。这几个新变量就是每个样本在各主成分上的得分。

主成分得分的原理是:SPSS会根据成分得分系数矩阵,把每个样本的标准化原始值进行加权求和,得到每个主成分的得分。这个得分是标准化的,均值为0,标准差约等于1,正数表示该样本在这个主成分上高于平均水平,负数表示低于平均水平。

这个得分有几个用途。最常用的就是拿去做回归分析、聚类分析或判别分析。比如你提取了4个主成分,下一步想做聚类,就可以把FAC1_1到FAC4_1当作聚类变量放进K-Means聚类,既避免了原变量维度太高,又规避了共线性对聚类距离的扭曲。

这里提醒一句:主成分得分的变量名是SPSS自动生成的,连续做两次分析,第二次生成的变量名会变成FAC1_2、FAC2_2,不会覆盖前面的结果。所以建议在语法里用/SAVE REG(ALL)保存完,尽快把新变量重命名和添加变量标签,不然等数据乱了你根本分不清FAC1_3是哪次跑的。

5.2 如何计算综合得分做排名

有时候光有主成分得分还不够,你想做一个综合排名,比如把20个指标压缩成一个总得分,给各个产品(或门店、班级)排序。这时候可以用方差贡献率作为权重,计算加权综合得分。

具体操作:在SPSS里打开"转换 → 计算变量",目标变量命名"综合得分",数字表达式填:

(FAC1_1 * 32.14 + FAC2_1 * 21.58 + FAC3_1 * 15.32) / (32.14 + 21.58 + 15.32)

式子里面的32.14、21.58、15.32就是前几个主成分各自的方差百分比(从"总方差解释"表里抄出来),分母是这几个主成分累计方差百分比的和。这样做的好处是给贡献大的主成分更高权重,比简单求几个FAC的平均值要合理得多。

但注意,综合得分只是相对排名,它本身没有绝对意义。而且不同分析批次提取的主成分方向可能不同(上面说过正负号可能翻转),所以综合得分只适合在同一批数据内部比较,不能跨批量对比。

6. 常见问题与避坑实录

6.1 KMO不达标、题项提取得差怎么办

这是被问爆的问题。KMO低于0.6,或者公因子方差表里有题项提取值低于0.3,该怎么办?

第一,先确认反向题编码了没。没有编码的反向题会让变量间出现大量负相关,KMO直接被拉垮。第二,检查相关矩阵,把那些和大多数变量都不相关的"孤儿题项"找出来单独看,如果确实和其他题项相关系数普遍低于0.2,果断剔除。第三,确认样本量是不是足够大,20道题只有70份问卷,本来就跑不出稳定结果。

剔除题项要遵循原则:一次只剔一个,看结果变化,别一口气删掉五六个题项,否则结果变化太大,你可能连哪个变量的作用都搞不清楚。每删一个题项记录一下KMO和累计方差贡献率的变化,这样最终报告里还可以附上"敏感性分析",非常加分。

6.2 多维度题项效度分析要不要分维度做

回到热搜词里那个高频问题。我的建议分两种情况:

如果是新开发量表、没有成熟的理论维度,先把所有题项一起做PCA或EFA,让数据自己说话,看能不能萃取出理论设想的维度数量;如果能,这个结果本身就是结构效度的重要证据。

如果量表是成熟量表、已经定好了维度,你要做的是验证性工作,常见做法是:整体先跑一次(所有题项一起),再按各个维度分别跑一次。整体跑主要看KMO和各维度之间是否有足够区分度;分维度跑是为了看每个维度内部题项的单维性——每个维度内的题项是否真的都聚集在一个主成分下。正常情况下,单维度的题项跑出来应该只提取出一个特征值大于1的主成分,且载荷都要在0.5以上。

有个误区要避开:有人只按维度分别跑,每个维度跑出一个主成分,就宣称"效度良好",这其实只证明了维度内部一致性,没证明维度之间的区分效度。正确姿势是整体和分维度都跑,结合起来看。

6.3 输出结果和论文汇报里的常见坑

最后整理一下我审论文时常看到的主成分分析汇报问题:

第一,主成分分析和因子分析术语混用。如果你用的是"主成分"提取,就别写"旋转后因子载荷"——没旋转就不存在旋转后载荷。如果你做了最大方差旋转,就别硬说是主成分分析,那已经属于因子分析范畴了。

第二,载荷值保留位数太随意。建议保留两位小数,不要用0.531这种占篇幅的三四位小数,除非投稿期刊有特殊格式要求。

第三,只给特征值和贡献率,不提累计贡献率。累计贡献率才是判断信息保留程度的关键指标,务必汇报。

第四,用了"保存为变量"的回归法得分,却在方法描述里写"用回归法提取主成分"。提取方法是主成分,得分方法是回归,这俩是两码事,别混。

第五,忽略样本量汇报。很多作者直接甩一张旋转成分矩阵,连N是多少都不说,这会让审稿人怀疑你的可靠性。汇报主成分分析结果时,样本量、KMO、Bartlett检验、提取方法、旋转方法、特征值准则、累计方差贡献率,这些一个都不能少。

我自己的习惯是:在论文方法部分写一段动不动就一百多字的标准描述,把上面这些全放进去,然后下面再放表。这样不仅自己写起来省事,审稿人也觉得规范。

说点实在的,PCA这东西,入门门槛确实不高——菜单点几下,结果就出来了。但我见过太多人卡在结果解读这一步:表出来了,不知道哪些该看、哪些该报告、哪些该删题。希望这篇操作文能帮你把整个过程串起来。我自己刚学PCA那会儿也犯过拿因子分析菜单做PCA、做完不保存得分、KMO 0.5还敢硬写论文的错,后来被导师一个一个问题揪出来,才慢慢把原理和操作理顺。如果你现在正被这个问题卡住,按文章里的步骤一步步走,多数情况下能顺下来。要是遇到KMO不达标、提取不出来、结果和理论对不上这类顽固问题,别急着怀疑自己,先回去看看数据清洗和反向题处理这两步是不是出了岔子,八成是那里埋的雷。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询