1. 先把主成分分析这件事想明白再动手
很多人打开SPSS就直接点菜单,结果跑出一屏表格不知道从哪看起,最后只能硬凑一段结论交差。我在带新人的时候反复强调一件事:主成分分析的输出不是"跑出来"的,而是"读出来"的。你得先知道它到底在干嘛,才知道屏幕上那堆数字哪个重要、哪个可以忽略。
主成分分析的底层逻辑其实特别朴素。假设你手上有一份问卷,里面有十几个题项都在从不同角度描述同一件事,比如消费能力、学习动机、服务满意度。这些题项彼此之间往往会高度相关,信息有大量重叠。如果直接把十几个变量一股脑丢进回归或者聚类模型,会带来两个麻烦:一是变量之间的共线性让系数变得不稳定,二是维度太高不便于解释和可视化。主成分分析要做的就是把这些纠缠在一起的变量,重新组合成少数几个彼此不相关的新变量,也就是主成分,并且尽量保留原来的信息量。
这里的关键词是"重新组合"和"不相关"。新变量是原来所有变量的线性组合,比如第一主成分 = a1×题项1 + a2×题项2 + …… + ak×题项k,系数由数据自身的协方差结构决定,不是我们拍脑袋定的。第一主成分方向上数据的投影方差最大,也就是它抓住的信息最多;第二主成分在与第一主成分正交的前提下抓剩余方差里最大的那一块,以此类推。正因为每一步都要求正交,所以生成的主成分之间相关系数为零,天然不存在共线性问题。
那它适合谁用?我总结下来主要有三类场景。第一类是问卷类研究,题项多、维度不清晰,想先降维看结构,这时候主成分分析常常作为探索性分析的第一步。第二类是综合评价,比如给多个城市的服务能力排名,指标有十来个,量纲还不一致,用主成分综合得分做排序比简单加权更客观。第三类是建模前的预处理,特征太多、样本相对偏少,先降维再建模能提升稳定性。如果你属于这三类,那这篇内容基本能覆盖你的需求。
不过我得先泼一盆冷水:主成分分析不是万能的。它对线性关系敏感,如果原始变量之间是非线性的,效果会打折扣;它对量纲敏感,不标准化直接跑,方差大的变量会主导结果;它生成的主成分有时候很难解释,可能出现"第一主成分在所有变量上载荷都差不多"这种尴尬局面。这些坑后面会逐条拆开讲。
1.1 主成分分析和因子分析到底差在哪
这是被问得最多的问题,没有之一。SPSS里这两个功能甚至共用同一个菜单入口,新手特别容易混。表面上看它们都在降维,但内在假设不一样。
主成分分析是纯粹的数学变换,不假设背后存在潜在结构,它把原始变量的方差重新分配到几个新变量上,目标是用尽量少的主成分解释尽量多的总方差。因子分析则假设你观测到的变量是由少数几个不可直接观测的潜在因子生成的,每个变量 = 因子载荷 × 公因子 + 独特因子,它关心的是变量之间的共同变异。
造成的结果差异也很明显。主成分分析里,主成分能解释的总方差之和等于原始变量方差之和,信息是"守恒"的;因子分析里,公因子只解释共同方差,独特方差被单独划出去,所以累计方差贡献率通常比主成分分析低。
实操上怎么选?如果你的目标是给样本打分排序、做综合评价,选主成分分析,因为它能直接保存成分得分。如果你的目标是想找出背后有几个潜在维度、验证问卷结构,因子分析更合适,尤其是做效度分析时。有些教程会建议"用主成分法抽取因子",这在探索性阶段也常见,但要清楚此时你做的其实介于两者之间,报告时最好说明清楚用了哪种抽取方法,别含糊带过。
1.2 主成分和热词里那些"效度分析"的关系
最近搜的人特别多的问题是"多维度题项效度分析要不要分维度做"。这个问题本身就折射出一个常见误区:把主成分分析当成了效度的唯一证据。实际上,主成分分析在效度检验里主要承担探索性角色,它能告诉你题项大致聚成了几块、每块包含哪些题项,但它不是效度分析的终点。结构效度通常还要看累计方差贡献率、每个题项在所属维度上的载荷是否够高、有没有严重的交叉载荷。至于要不要分维度做,我的经验是:如果你的量表本身有明确的理论维度划分,先整体做一次探索,看题项是否自然归到预期维度上;如果有题项跑错维度或者两头都占,再考虑分维度重新检查,而不是一上来就拆开做,拆开做会掩盖维度之间本该有的相关性。
2. 上手前的数据准备与前提检查
我见过太多人数据都没收拾干净就开跑,最后结果一团糟还怪软件。SPSS本身不挑食,你给它什么它算什么,但算出来的东西能不能用是另一回事。这一节把容易翻车的地方逐个说清楚。
2.1 变量类型与数据结构整理
主成分分析处理的是连续型或者近似连续的变量。用李克特五点量表测出来的题项虽然严格说是定序变量,但在实践里普遍当作连续变量处理,这是被广泛接受的通行做法,因为如果按定序变量处理,可用方法会非常受限。但要注意几个红线。
第一,二分变量(只有"是/否"两类)不适合直接做,因为其相关系数会被严重压缩,可以通过多分格相关系数间接处理或者干脆避开。
第二,名义变量绝对不能进,比如"性别""地区编号",这些没有大小顺序,做线性组合没意义。
第三,多个变量如果量纲差异巨大,比如一个变量单位是万元、另一个是百分比,必须先标准化或者依赖SPSS在相关矩阵上的分析方式自动实现标准化。
数据方向也要统一。比如有的题项是正向计分,有的反向计分,如果不在录入前或者分析前统一方向,主成分的载荷符号会很混乱,解释起来一头雾水。我的习惯是先在数据视图里把所有反向题重新编码,生成新变量,文件名后缀加个r,避免和原变量搞混。
缺失值也要处理。SPSS的主成分分析默认是成列删除或成对删除,成对删除会让不同变量对之间的样本量不一致,导致相关矩阵可能不是正定的,跑不出结果。数据缺失多的时候,我会用多重插补先补几轮,再把合并后的结果拿来分析,比直接删样本稳妥得多,尤其是样本本来就不大的时候。
2.2 KMO和Bartlett检验怎么读
这两个指标就是主成分分析的"准入考试"。KMO检验衡量的是变量之间的偏相关是否足够小,简单说就是你的数据有没有足够的共同变异值得降维。判断标准大致是这样的:
| KMO取值 | 适合程度 | 处理建议 |
|---|---|---|
| 大于0.9 | 非常适合 | 放心做 |
| 0.8到0.9 | 很适合 | 正常做 |
| 0.7到0.8 | 一般 | 可以做,注意解释 |
| 0.6到0.7 | 勉强 | 谨慎,考虑增删变量 |
| 小于0.6 | 不适合 | 换方法或重新设计题项 |
Bartlett球形度检验则是检验相关矩阵是否为单位矩阵。如果p值小于0.05,说明变量之间确实存在相关,适合降维;如果p值很大,说明各变量基本独立,做主成分分析意义不大。
有个细节值得提醒:KMO和Bartlett对样本量很敏感。样本特别大的时候,Bartlett几乎必然显著,别因为p值好看就觉得万事大吉;样本特别小的时候,KMO容易偏低,这时候不能简单放弃,可以尝试删掉明显不合群的题项后再看。我个人经验是每个变量至少对应5到10个样本比较稳妥,如果样本实在有限,变量数就要狠狠精简。
在SPSS里的操作是:分析 → 降维 → 因子分析,把变量放进去,点开"描述统计",勾选"初始解"和"KMO和Bartlett球形度检验",确定即可。
2.3 相关矩阵先看一眼不吃亏
分析结果里会输出一个相关系数矩阵,别跳过它。这一步很多新手直接划过,结果后面解释载荷的时候一头雾水。
看相关矩阵主要看三件事。第一,是不是大部分相关系数都在0.3以上,如果有大量接近0的相关系数,说明这些变量跟别人没什么共同点,降维之后它们可能单独成主成分或者被丢弃。第二,有没有相关系数超过0.8甚至0.9的变量对,这种情况属于高度冗余,建议保留其中一个或者合并,否则会出现"一个主成分只装这两三个变量"的情况。第三,相关系数的符号是否一致,大面积的负相关有时候意味着方向编码有问题。
我一般会先在"分析 → 相关 → 双变量"里跑一次完整的相关性分析,把显著性和系数都看清楚,再决定要不要进入降维环节。多花两三分钟,能省掉后面反复重跑的麻烦。
3. SPSS主成分分析完整操作流程
前面铺垫了这么多,现在正式动手。我把整个流程拆成参数设置、个数确定、载荷解读、得分构造四块,每一块都讲透,你对照着点就行。
3.1 菜单路径与每一项参数怎么设
入口是:分析 → 降维 → 因子分析。这个菜单名字叫因子分析,但里面可以选主成分作为抽取方法,别被名字吓到。
把要分析的变量全部选进"变量"框。右下角有几个按钮,逐个说。
"描述统计"里,勾选"单变量描述"可以看到均值和标准差,"初始解"会输出共同度,"KMO和Bartlett球形度检验"就是前面说的准入考试。相关性矩阵那块一般勾"系数"看相关矩阵就够了。
"抽取"页是核心。方法选"主成分",这一项选错整个结果性质就变了。分析选"相关性矩阵",这样SPSS会自动对变量做标准化,等价于对相关系数矩阵做特征值分解,避免了量纲干扰。输出勾选"碎石图"和"未旋转的因子解",碎石图是判断主成分个数的重要参考。抽取标准最常用的是"特征值大于1",也可以指定固定因子数。
"旋转"页,如果目的是降维后做综合评价,我一般不旋转,因为旋转后各主成分的方差会被重新分配,综合得分的权重就没那么好用了。如果是想看得更清楚变量的归属结构,选"最大方差法"旋转会舒服很多,这个后面还会细讲。
"得分"页,勾选"保存为变量",方法选"回归"。"回归"得到的得分标准化程度好,做后续比较方便。如果要用综合得分排名,就靠这一步生成的变量。
"选项"页,可以设置缺失值处理方式和系数显示格式,一般保持默认即可,但如果你希望载荷按大小排序输出,把"系数显示格式"里的"按大小排序"勾上,看结果能省不少力气。
3.2 特征值、方差贡献率与主成分个数
跑完以后,第一个要看的是"解释的总方差"表。这张表左侧是初始特征值,右侧是旋转后的情况。
解读逻辑是这样的:第一列是各主成分的特征值。特征值可以理解为该主成分承载的标准化方差量,全部特征值加起来等于变量个数(因为是在相关矩阵上分析)。第二列是方差贡献率,等于该特征值除以变量总数。第三列是累计贡献率。
判断保留几个主成分,常用三条依据并用:
一是特征值大于1,这是Kaiser准则。理由是单个主成分至少要解释一个原始变量的方差量才值得保留。
二是累计方差贡献率,社科研究里普遍要求达到60%以上,严格一点要求70%到80%。如果你的前几个主成分加起来才50%,说明原始变量之间共性太弱,硬降维会丢太多信息。
三是碎石图的拐点。把特征值按主成分序号画成折线,前面下降陡峭、后面趋于平缓的那个转折位置,通常就是该停的地方。比如从第1个到第3个骤降,第3个之后基本走平,那保留3个比较合适。
这三条经常打架。特征值大于1可能给出5个,碎石图看着像2个,累计贡献率说3个才到75%。我的处理原则是:以累计贡献率达到可接受水平为底线,以碎石图拐点为上限,在两者之间结合可解释性做取舍。如果保留4个能让每个主成分都有清晰含义,那就4个;如果第4个主成分什么都装不进去,那宁可去掉。
顺便说一个计算细节,如果你要手算某个主成分的方差贡献率:方差贡献率 = 特征值 / 变量个数。比如12个变量,第一个主成分特征值4.8,那么它的贡献率就是4.8/12 = 40%。这个算法在报告里写清楚,评审就不会挑刺。
3.3 成分矩阵怎么读,载荷怎么看
"成分矩阵"(未旋转)或"旋转后的成分矩阵",是解释每个主成分含义的依据。矩阵里的数字是载荷,代表某个原始变量与某个主成分的相关系数,取值范围在-1到1之间。
判断一个变量归属于哪个主成分,看它绝对值最大的那个载荷。常用门槛是0.5,严格一点用0.6,宽松一点0.4也有人用。但如果一个变量在两个主成分上的载荷都超过0.4,就出现了交叉载荷,这个变量归属不清,会拖累整个解释。
符号也要注意。载荷为正表示该变量与主成分同向变动;为负表示反向。同一主成分内部,如果一部分变量载荷为正、一部分为负,往往意味着这个主成分描述的是"对比"关系,比如"线上消费倾向减去线下消费倾向",解释时要老老实实说出来,别硬套一个正面标签。
我给主成分命名的方法是:挑出载荷绝对值排前几位的变量,看它们共享的语义主题。比如第一主成分里,"价格敏感""促销关注""比价频率"载荷都很高,那就叫"价格导向";第二主成分里"品牌信任""复购意愿""推荐意愿"高,就叫"品牌忠诚"。命名不求学术华丽,只求一说出来别人能懂。
共同度那一列也别漏。共同度表示某个变量被所有保留主成分解释的比例,范围0到1。如果某个变量共同度只有0.3,说明它大部分方差没被解释,这个变量在这次降维里基本是"废票",可以考虑剔除后重跑。我通常会检查一遍,把共同度低于0.4的变量挑出来,看看是有实际意义的少数派还是纯噪声。
3.4 保存得分并构造综合得分
这一块是很多人卡住的地方:SPSS保存出来的是一列一列的各主成分得分,怎么合并成一个能排序的综合得分?
标准做法是以各主成分的方差贡献率为权重做加权平均。假设你保留了m个主成分,第j个主成分的特征值为λj,那么综合得分F = (λ1×F1 + λ2×F2 + …… + λm×Fm) / (λ1 + λ2 + …… + λm)。用特征值做权重,本质上是让方差贡献大的主成分在综合里说话更响,这样得到的结果比等权平均更客观。
在SPSS里的操作路径有两条。一条是点"转换 → 计算变量",在目标变量框里输入综合得分名字,比如总分,在表达式里按上面的公式把各主成分得分变量写进去,特征值直接填数字。另一条是点"分析 → 降维 → 因子分析"里"得分"页勾选"保存为变量",同时也在"选项"里勾选"因子得分系数矩阵",然后手动用系数矩阵乘以标准化后的原始变量得到内部一致的得分。前者快,后者严谨,一般前者就够用。
生成综合得分之后,可以用"转换 → 等级"或者"数据 → 排序个案"来查看排名,也可以用描述统计看它的分布是否接近正态。如果分布严重偏斜,做后续回归前可能需要再标准化一次。
4. 结果解读的常见陷阱与排查
到这一步你的结果已经出来了,但能不能用还得过一遍筛子。下面这些坑我基本都踩过,列出来给你避雷。
4.1 交叉载荷和归属不清怎么办
交叉载荷是主成分分析里最闹心的问题。一个变量在多个主成分上载荷都不低,说明它同时跟几块信息相关,归属不明确。
处理顺序我一般是这样:第一步先看旋转后有没有改善,最大方差法旋转能让载荷向两端极化,很多交叉载荷在旋转后就清晰了。第二步,如果旋转后依旧交叉,看这个变量的语义是不是本来就横跨两个维度,如果是,可以考虑把它删掉,牺牲一点题项数量换结构清晰。第三步,如果删掉会影响内容效度,那就保留它,但在报告里说明它归属存在争议,并把它归到载荷更高的那个主成分下。第四步,检查是不是主成分个数设多了,有时候少保留一个主成分,交叉载荷会自然消失,因为那个多余的主成分本来就在勉强拆分本不该拆的信息。
这里要提醒一句:不要为了让结果好看而反复删题、反复重跑,把数据折腾到只剩自己满意的样子。这种做法一旦被追问就站不住脚。删题要有内容上的理由,比如"该题项表述模糊,受访者理解存在歧义",而不是"删了之后KMO变高了"。
4.2 主成分个数到底定几个
这个问题没有唯一答案,不同判断标准给的结果常常不一致。我给你一个实操中的决策顺序。
先看累计方差贡献率能不能达到你所在领域的惯用门槛。达不到,说明信息损失太多,要么增加主成分个数,要么承认降维效果有限,别硬撑。
再看每个候选主成分有没有实际含义。多保留一个主成分,结果解释不了一句话就说不清它代表什么,那这个主成分就应该砍掉。这一点比任何数学准则都重要,因为主成分分析最终是给人看、给人用的。
最后看稳健性。换个样本、或者用随机分半的方法重跑一次,如果主成分个数和结构基本稳定,那你的结论就站得住;如果一变样本结构就大变,说明结构本身不牢靠,报告时要坦诚说明局限。
4.3 常见报错与异常结果速查
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
| 提示矩阵不是正定矩阵 | 变量高度冗余或样本量严重不足,还有成对删除缺失值 | 剔除高相关变量对,改用成列删除,或补足样本 |
| KMO值低得离谱(小于0.5) | 变量间几乎没有共同变异,或变量太少 | 检查变量选取,补入同一维度的题项,或放弃降维 |
| 第一主成分解释了绝大部分方差 | 某个变量量纲过大没标准化 | 确认分析基于相关矩阵 |
| 所有载荷都很低 | 保留的主成分个数过少或原始变量本身不相关 | 增加主成分个数,重新审视数据 |
| 旋转不收敛 | 迭代次数不够或变量冗余严重 | 在"选项"里提高最大迭代次数,同时删冗余变量 |
| 保存的得分变量全是缺失 | 原始数据存在缺失且未处理 | 先做缺失值处理再重跑 |
补充一个心得:SPSS的错误提示有时候很含糊,遇到报错先别慌,把变量数逐步减少,用排除法定位是哪个变量惹的祸,比盯着提示文字琢磨快得多。
5. 从SPSS结果到业务结论的落地
结果跑通只是及格线,能把它变成有说服力的结论才算真正掌握。这一节说几个我常用的落地方法。
5.1 综合得分的实际应用场景
综合得分最直接的用法是排名和分层。比如评估多个地区的服务水平,把综合得分排序,得分高的地区说明它在被提取的几个主成分上整体表现好。要注意,综合得分是标准化的,均值为0,有正有负,负数不代表"差",只代表低于平均水平。
另一个用法是作为后续模型的输入变量。把综合得分代替原来的一堆题项放进回归或者判别分析,既能降低共线性,又能减少变量数量,模型更简洁。但这样做有个代价:主成分的解释性不如原始变量直观,回归系数的含义会变得抽象。如果研究成果面向非专业读者,这一点要提前考虑。
我还常用它做样本分群的前置步骤。先降维得到几个主成分,再把这些主成分作为聚类分析的输入,比直接对几十个原始题项聚类稳定得多,因为主成分之间不相关,避免了高相关变量在距离计算中被重复加权。
5.2 和Python实现结果对照验证
有时候SPSS的输出你不太放心,尤其是换了版本或者参数设得比较特殊,可以用Python对照一遍。sklearn里的PCA默认对数据进行中心化但不标准化,这一点和SPSS基于相关矩阵的分析不同,所以你需要先用StandardScaler标准化,再送进PCA,这样得到的主成分得分和SPSS的回归法得分在方向上会一致(符号可能整体相反,这是正常的,因为特征向量的方向本身不唯一)。
对照时主要比三样:特征值大小、各变量在主成分上的载荷比例关系、样本的综合得分排序。只要排序一致,就说明你的分析是稳的。如果排序差异很大,八成是标准化处理或者主成分个数不一致导致的,回头检查参数即可。这种交叉验证在做重要报告前做一次,心里会踏实很多。
不过要说明,Python和SPSS在旋转算法、缺失值处理上的实现细节未必完全一致,数值上出现小数点后的差异很正常,只要整体结构和大方向吻合,就不必纠结。
5.3 我自己踩过的那些坑
做这个分析这么多年,有几个教训印象特别深,分享出来让你少走弯路。
第一个坑是变量方向没统一。有一次问卷里混了反向计分题,我没注意,结果第一主成分的载荷一半正一半负,解释的时候怎么都圆不回来。后来养成习惯,录入完第一件事就是列一张表标出反向题,全部重编码后再动分析。
第二个坑是过度追求高累计方差贡献率。曾经为了让贡献率好看,硬保留到七八个主成分,结果每个主成分就装一两个变量,根本不是降维,是把变量换了个排列方式。降维的意义在于精简,保留太多就失去了初衷。
第三个坑是忽略业务解释。数值再漂亮,如果生成的主成分说不出一句人话,那这个结果对决策没有任何帮助。我现在每次定稿前都会自问一句:如果让我用一句话向同事解释每个主成分,我能不能说出来?说不出来就说明该调整了。
第四个坑是样本量。早期做小样本研究,二十几个样本跑十几个变量,结果极度不稳定,换一批样本就变样。后来我给自己定了个底线,变量数不要超过样本数的五分之一,实在不行就先把变量精简到位。
第五个坑是把主成分分析和因子分析的报告写混了。有一回我在报告里写"提取了3个公因子,采用主成分分析法",被评审直接指出来方法表述不规范。后来我改成明确写"采用主成分分析提取主成分,保留3个主成分",再也没被挑过。
如果你正准备做问卷类的降维分析,我建议的顺序是:先清洗数据、统一方向,再跑相关矩阵和KMO检验,然后用主成分法抽取、看碎石图和贡献率定个数,接着根据载荷解读每个主成分的含义,最后保存得分构造综合指标。整个过程慢一点没关系,关键是每一步都要能说出理由。真正拉开水平的不是会不会点菜单,而是能不能在结果不理想的时候判断出是数据问题、参数问题还是方法本身就不适用。