简介:面向数理统计课程学习者与SPSS入门者的主成分分析大作业范例,以2019年15个省市的九项经济指标评价为案例,解决多元指标降维与地区经济综合评价的实操问题。文档完整走通数据标准化、相关系数矩阵计算、KMO与巴特利球形度检验、主成分提取、贡献率判断到综合得分排序的全流程,并配有SPSS各对话框的操作截图与结果解读,可对照复现并理解特征值大于1的选取依据。压缩包共1个doc文件,约821KB,为一份15页的完整实验报告,涵盖研究背景、原理公式推导、实验步骤与结果分析,适合作为课程作业模板或方法复习笔记。已有2017人学习下载,可供中初级统计学习者参考。
1. 十五个地区、九项指标压成两个主成分:一份数理统计大作业里最实的那部分
十五个地区、九项经济指标摆在一起,任何一句直观结论都能被另一组数字推翻:总量大的地方人均未必高,零售额高、财政收入未必跟得上。数理统计课里用来治这个毛病的方法叫主成分分析,它把九个方向的差异压到两三个互相正交的方向上,谁在哪个方向上占优,一眼就能看出来。这套方案用 SPSS 走完标准化、KMO 与巴特利球形度检验、成分提取、系数还原、综合得分排序的整条链路,最后落成一张能解释、能排名的地区经济指标评价表。真正难的地方不在点菜单,而在累计贡献率卡在 84.494% 这个不上不下的位置时,决定只保留两个主成分,并且把这个决定讲圆。它适合正在写数理统计大作业、需要一份跑得通又有解释力的多元统计案例的人,也适合想把降维流程固定成模板、换一批数据就能直接套的读者。
2. 评价体系与数据口径:十五个地区、九项指标怎么定下来
主成分分析最容易翻车的地方不在算法,而在数据进来之前就已经埋好了。同样是九个指标,口径差一年、单位差一个量级、逆向指标忘了反号,后面的特征值、载荷、排序全都会跟着歪,而且歪得毫无提示。这一章讲的是动手之前必须敲定的三件事:选哪些指标、怎么把口径对齐、凭什么判断这批数据适合做降维。
2.1 评价对象与指标体系的取舍
评价对象定的是十五个省级地区,样本量 n=15,指标数 m=9。这个比例要先说清楚,因为它是这套方案先天带着的约束。统计学上一般建议样本量至少达到指标数的五倍以上,15 比 9 只有 1.67 倍,相关矩阵的估计会偏乐观,KMO 值也容易被抬高。课程作业和课程设计的场景下这个规模是可以接受的,但论文里必须如实写一句样本量的局限,而不是假装没这回事。答辩时老师问“你这十五个样本够不够”,你能答出“不足,所以额外做了 KMO 和巴特利检验来佐证适配性”,这一分就稳了。
九项指标不是拍脑袋凑的,按经济含义可以分成三层。第一层是总量规模:地区生产总值、社会消费品零售总额、第三产业增加值、规模以上企业总资产、地方财政收入,这五项刻画的是一个地区的经济体量和产业厚度。第二层是效率与结构:人均地区生产总值、农林牧渔总产值、固定资产投资较上年增长,反映的是发展水平和增长动能。第三层是民生就业:失业人员。三层结构的意义在于,后面第一主成分载荷高的是哪几项、第二主成分载荷高的是哪几项,你能立刻给出一个经济学解释,而不是对着数字硬编。
这里有一个必须在数据阶段处理掉的问题:失业人员是逆向指标。失业人数越多,经济状况越差;而其余八项都是正向指标,数值越大越好。如果不做同向化处理,直接扔进相关矩阵,这个变量在成分矩阵上的载荷符号会和其他变量反着走,第一主成分的解释就会变成“经济规模与失业人数的某种诡异组合”,解释不通。我一般的做法是在原始数据表里先把失业人员取相反数,生成一个新变量参与分析,而不是在 SPSS 里靠“反正载荷是负的,我口头解释一下”糊过去。口头解释在答辩现场是撑不住追问的。
指标数量本身也要克制。九项里已经有五项高度相关(总量类指标彼此相关系数常在 0.9 以上),这正是主成分分析擅长处理的场景。但如果再往里塞十项八项,样本量又不变,相关矩阵会接近奇异,特征值出现接近零的情况,碎石图上就会出现一条紧贴横轴的长尾,看起来“主成分很多”,实际上全是噪声。
2.2 数据口径统一与缺失值处理
口径统一包含三个维度,缺一不可。时间上,所有指标必须取自同一年度的统计资料,不能生产总值用当年数、财政收入用上一年数,否则指标之间的关系里混进了时间差,主成分就不干净了。空间上,十五个地区的行政层级要一致,都是省级口径,不能混进副省级市或者地级市的数据,量级差一个数量级,第一主成分会被那个特大城市单独拽走。单位上,绝对量统一到亿元,人均量统一到元,增速统一到百分数,就业人数统一到万人。单位不统一不影响主成分分析的最终结果,因为标准化会把量纲消掉,但它影响的是你读描述统计时能不能一眼看出异常值。
缺失值是这个规模的数据集里最要命的东西。SPSS 因子分析对话框的“选项”里默认给的是“成列排除个案”,意思是某个案例只要有一项指标缺失,整行数据就被剔除。n=15 的样本,掉一行就是掉一个地区,掉三行相关矩阵就没什么可信度了。所以正确顺序是先做数据核查:把十五行九列摊在表格里,逐列看最大值最小值和中位数,凡是某一列的极值离群得离谱,先回原始资料核对是录入错误还是口径错误。核对完了仍有缺失,再考虑用该指标的均值或者同层级地区的均值补,并在论文里注明补了几处、补在哪。指望 SPSS 的成列排除帮你兜底,是最容易在答辩时被问住的地方——老师只要问一句“为什么你的样本是十三个地区”,整套流程就得重来。
还有一类隐性异常值需要注意:某个地区的某项指标远高于其余十四个。这在总量类指标里很常见,一个经济规模数倍于其他地区的样本,会让第一主成分几乎完全由它单独决定,载荷全部堆在总量指标上,第二主成分才勉强挤出一丝结构信息。遇到这种情况通常的做法是保留,因为它是真实存在的经济现象,但要在结论里点明“第一主成分主要反映经济总量,且受样本中体量最大地区的影响明显”,把解释的边界划清楚。
2.3 数据适不适合做主成分:把判断放在动手之前
主成分分析不是万能钥匙,它对数据有前置要求:变量之间得有一定程度的相关性。九项指标如果彼此都不相关,相关矩阵接近单位阵,特征值全在 1 附近,降维就没意义了。判断这件事有两个工具,都藏在 SPSS 因子分析对话框的“描述”按钮里。
第一个是相关系数矩阵。勾上“系数”,输出一张 9×9 的矩阵。看的时候不用逐格读,扫一眼有没有大量 0.5 以上的格子就行。总量类的五项指标之间大概率是 0.8 往上,人均地区生产总值和总量类指标的相关性会低一些,失业人员和各项指标多半是负相关(如果之前做了同向化,就是正相关)。只要矩阵里不是一片接近 0 的白板,主成分分析就有戏。
第二个是 KMO 和巴特利球形度检验。KMO 衡量的是变量间的偏相关性,取值 0 到 1,越接近 1 说明共同因子越多、越适合做降维。行业里常用的经验门槛是 0.7 以上效果较好,0.5 以下不建议做。巴特利球形度检验的原假设是“相关矩阵为单位阵”,也就是变量之间毫无关系,所以我们要的是 P 值小于 0.05 来拒绝它。这两个指标必须一起看:KMO 高但巴特利不显著的情况极少见,KMO 低于 0.5 而巴特利显著的情况倒是有,那说明相关性存在但不够集中,这时要么合并指标,要么删掉几个和其他变量都沾不上边的变量重跑。
如果检验没过怎么办,这一步要提前想好退路,不要等结果出来再慌。常见的处理有三条:删掉相关系数普遍低于 0.3 的变量;把含义相近的几个总量指标合成一个(比如把第三产业增加值和地区生产总值合成一个比值);实在不行就换方法,用熵值法或者 TOPSIS 做综合评价,那类方法对变量相关性没有要求。这三条退路写在方案里,本身就是一份方案完整度的体现。
3. 方法设计与数学链路:从标准化到综合得分的四步推演
把 SPSS 当黑匣子点完菜单,输出一堆表格,然后挑几个数字抄进论文,这是最常见的交作业方式,也是最经不起问的方式。主成分分析的每一步都有明确的数学含义,弄清楚“为什么除以特征值的平方根”“为什么权重的分母是累计贡献率而不是 100”,比记住菜单在哪一栏重要得多。这一章把整条链路拆开,并用一段可运行的代码把 SPSS 的每一个输出对回去。
3.1 主成分的数学定义与三条硬约束
设标准化之后的指标向量为 Z = (z₁, z₂, …, z₉),注意这里说的是标准化之后,因为九个指标单位不同,直接线性组合没有意义。第 j 个主成分写成:
Fⱼ = aⱼ₁z₁ + aⱼ₂z₂ + … + aⱼ₉z₉
其中的系数向量 (aⱼ₁, …, aⱼ₉) 不是随便取的,它必须同时满足三条约束。第一条,每个主成分的系数平方和等于 1,也就是 aⱼ₁² + aⱼ₂² + … + aⱼ₉² = 1,这条保证了主成分是标准化变量的单位长度线性组合,不同主成分之间才能比大小。第二条,任意两个主成分之间不相关,协方差为零,它们承载的信息不重叠。第三条,主成分的方差依次递减,第一主成分方差最大、代表性最强,往后逐个递减。
这三条合在一起,等价于对相关矩阵做特征分解:特征值就是各主成分的方差,特征向量就是系数向量。所以“求主成分”这件事,在计算上就是“求相关矩阵的特征值和特征向量,然后按特征值从大到小排个序”。SPSS 的“总方差解释”表里第二列那个“特征值”,和代码里 np.linalg.eigh 返回的是同一个东西。
理解了这一层,很多事情就顺了。为什么第一主成分载荷高的那几个变量可以打包命名成一个综合概念?因为它们在该特征向量上的分量绝对值大,说明这个方向上的变异主要由它们贡献。为什么两个主成分能替代九个变量?因为前两个特征值加起来占了总方差的绝大部分,剩下的七个方向上是零碎噪声。这些解释在论文里各写一段,比只贴一张表要扎实得多。
3.2 特征值、贡献率与主成分个数的判定规则
主成分保留几个,是整套流程里唯一需要人做判断的地方,也是答辩必问的地方。三条常用规则要一起摆出来,然后明确说清你用了哪条、为什么。
第一条是 Kaiser 准则:保留特征值大于 1 的主成分。逻辑是,标准化之后每个原始变量的方差都是 1,一个主成分的方差如果连一个原始变量都比不上,那它就没有替代价值。SPSS 的“提取”对话框默认勾的就是“基于特征值大于 1”,本例中前两个成分的特征值超过 1,第三个掉到 1 以下,所以提取两个。
第二条是累计贡献率准则:保留到累计方差贡献率达到 85% 或 90% 为止。本例第一主成分贡献 58.97%,第二主成分贡献 25.524%,累计 84.494%。这个数字很微妙,它离 85% 只差 0.5 个百分点,按严格阈值应该再取一个主成分,按 Kaiser 准则则停在两个。
第三条是碎石图拐点:把特征值按成分序号画成折线,找从陡峭转为平缓的那个转折点。本例的碎石图上前两个点下降很陡,从第三个开始基本贴着横轴走,拐点清晰落在第二个成分之后。
三条规则里两条指向两个主成分,一条指向三个,这时候的处理方式不是回避,而是明写取舍:第三个成分的特征值略高于 0.9,单独解释的方差不足 10%,加入后对排序结果的影响很小,且会显著增加解释成本,因此按 Kaiser 准则和碎石图拐点保留两个主成分,累计解释 84.494% 的总方差,接近常用的 85% 参考线。这样写,老师追问“为什么不是三个”时有答案,追问“84.494% 是不是偏低”时也有答案。
顺带说一个容易忽略的点:累计贡献率的分母是全部九个特征值之和,标准化之后这个和恒等于指标数 9。所以第一个主成分贡献 58.97%,意味着它一个人吃掉了 9 个方差中的 5.3 个。心里有这个换算,看到任何一个贡献率数字都不会发懵。
3.3 综合得分函数:权重不是拍脑袋来的
算出 F1 和 F2 之后,还要合成一个综合指标 F 才能排序。这里的权重来源非常明确:用各主成分的方差贡献率做加权,且分母是累计贡献率,不是 100%。公式是:
F = (58.97 / 84.494) × F1 + (25.524 / 84.494) × F2
算一下系数,第一主成分权重约 0.698,第二主成分权重约 0.302,两者相加正好等于 1。为什么除以 84.494 而不是 100?因为被丢掉的那 15.506% 的信息没有进入 F1 和 F2,如果按 100 做分母,两个权重加起来只有 0.845,综合得分会被整体压缩,虽然排序不变,但得分之间的差距失去了比例意义,还容易被误读成“模型只解释了 84.5% 所以得分要打折”。用累计贡献率做分母,本质是把两个主成分的方差重新归一化,让它们在被保留的这个子空间里构成一个完整的权重体系。
F1 和 F2 本身是标准化变量的线性组合,所以它们的均值都是 0,综合得分 F 的均值也是 0,有正有负。这一点必须在论文里说清楚,否则读者看到某个地区的得分是 −0.62,会以为这个地区经济是负增长。正确的解读是:综合得分衡量的是该地区在十五个样本中的相对位置,大于 0 表示高于样本平均水平,小于 0 表示低于平均水平,绝对值大小反映偏离程度,不能跨样本比较,也不能解释成绝对的经济规模。
3.4 用一段代码把整条链路复现一遍
SPSS 的输出是一堆表格,肉眼对不上代码里的每一步。下面这段代码把从原始指标到排序结果的完整过程走一遍,跑通之后,SPSS 每一张输出表都能在里面找到对应行,理解成本会低很多。
import numpy as np import pandas as pd # 读入原始指标表:行索引是地区编号,九列是九项指标 df = pd.read_csv("region_indicators.csv", index_col=0) # 逆向指标同向化:失业人员越多经济越差,取相反数后再参与分析 df["失业人员"] = -df["失业人员"] # 第 1 步 标准化:等价于 SPSS 里勾选「将标准化得分另存为变量」 # ddof=1 用的是样本标准差,和 SPSS 的描述统计口径保持一致 Z = (df - df.mean()) / df.std(ddof=1) # 第 2 步 相关系数矩阵,9 乘 9 R = np.corrcoef(Z.T) # 第 3 步 特征分解。eigh 返回的是升序,必须自己倒过来 eigvals, eigvecs = np.linalg.eigh(R) order = np.argsort(eigvals)[::-1] eigvals, eigvecs = eigvals[order], eigvecs[:, order] # 第 4 步 贡献率与累计贡献率,对应「总方差解释」表的第三、四列 contrib = eigvals / eigvals.sum() cum_contrib = np.cumsum(contrib) print("前三个特征值:", eigvals[:3].round(3)) print("累计贡献率:", cum_contrib[:2].round(5)) # 应接近 0.84494 # 第 5 步 取前两个主成分,系数 = 载荷 / 特征值的平方根 k = 2 coef = eigvecs[:, :k] / np.sqrt(eigvals[:k]) # 第 6 步 主成分得分,对应 SPSS 里算出来的 F1、F2 F = Z.values @ coef # 第 7 步 综合得分:权重 = 单个贡献率 / 累计贡献率,分母不是 100 w = contrib[:k] / cum_contrib[k - 1] score = F @ w result = pd.DataFrame( {"F1": F[:, 0].round(3), "F2": F[:, 1].round(3), "综合得分": score.round(3)} ) result["排名"] = result["综合得分"].rank(ascending=False).astype(int) print(result.sort_values("综合得分", ascending=False))几个参数需要单独交代。ddof=1决定用的是样本标准差还是总体标准差,n=15 的情况下两者差异不小,SPSS 的描述统计默认走样本标准差,代码这边对齐才能和输出表逐位对上。k=2就是 3.2 节那个判断的落地,改 k 值会连带改变权重向量w的维度,不能只改一处。eigvecs[:, :k]取的是前 k 列特征向量,因为前面已经按特征值降序重排过,这两列对应的就是贡献最大的两个方向。最容易错的是第 5 步的除根号:很多人直接把成分矩阵的载荷当系数用,得出来的 F1 会是正确值的 sqrt(λ) 倍,排序虽然不变,但得分数值和 SPSS 对不上,一看就露馅。
跑完这段代码,把contrib[:2]和 SPSS 总方差解释表里的 58.97、25.524 对一下,把coef和成分矩阵除根号的结果对一下,把result的排名和论文里的排序表对一下。三处都对上,说明整条链路理解到位了。
4. SPSS 操作实现:从描述统计到综合得分的六个落地步骤
代码跑通解决的是理解问题,交作业要交的是 SPSS 输出。这一章按实际操作顺序把六个步骤走一遍,每一步说清楚点哪里、为什么这么点、点错了会出什么结果。菜单路径以中文版 SPSS 为准,不同版本菜单位置略有差异,但对话框里的选项名称基本一致。
4.1 第一步:描述统计里那个“将标准化得分另存为变量”
路径是【分析】→【描述统计】→【描述】。把九个原始变量全部放进右侧“变量”框,然后勾选左下角的“将标准化得分另存为变量(Z)”,确定。回到数据视图,会多出九列 Z 开头的变量,这就是标准化后的数据,每一列的均值是 0、标准差是 1。
这一步有个坑值得说清楚。因子分析本身是基于相关系数矩阵工作的,而相关系数矩阵的计算过程里已经包含了标准化,所以严格来说,即使不手动标准化,直接拿原始变量做因子分析,结果也完全一样。那为什么还要做这一步?因为它让标准化从一个抽象概念变成数据视图里看得见的九列数字,你可以在论文里放一张标准化前后的对比,也可以在算 F1、F2 的时候直接引用这九列,省去反复解释“这里的 x 是标准化后的 x”。教学场景下这一步的价值大于计算价值。
同时输出的“描述”表要看一眼。SPSS 给出每个变量的最小值、最大值、均值和标准差。人均地区生产总值这一项的标准差通常明显大于其他项,说明各地区在这个指标上的相对差异更大,这个观察可以写进论文的数据描述部分,为后面第二主成分的解释埋伏笔。
注意:标准化之后再做因子分析,变量框里放的应该是 Z 开头的九列,而不是原始九列。如果放错,结果不会变,但你算 F1 的时候用原始数据乘系数,得分就全错了。这是实际交付里出现频率很高的一类错误。
4.2 第二步:因子分析对话框里的五处设置
路径是【分析】→【降维】→【因子】。把标准化后的九个变量放进右侧变量框,然后依次设置五个子对话框。这五处的设置决定了后面能不能算出正确的综合得分,逐项对照下表。
| 对话框 | 需要勾选或选择的项 | 为什么这么设 |
|---|---|---|
| 描述 | 初始解;系数;KMO 和巴特利球形度检验 | 初始解给出公因子方差,系数输出相关矩阵,KMO 和巴特利是适配性检验的唯一依据 |
| 提取 | 方法选主成分;分析选相关性矩阵;输出选未旋转因子解和碎石图;提取基于特征值大于 1 | 主成分法才对应主成分分析,协方差矩阵会把量纲带进来,碎石图用于人工核对拐点 |
| 旋转 | 最大方差法,输出旋转后的解 | 旋转只服务于载荷的可解释性,不参与系数与得分计算,这一点后面单独说 |
| 得分 | 勾选显示因子得分系数矩阵 | 有了系数矩阵才能反推 F1、F2,否则只能拿载荷硬凑 |
| 选项 | 缺失值选成列排除个案;系数显示格式选按大小排序 | 成列排除是缺省行为,但要清楚它的代价;按大小排序让载荷矩阵一眼能看出归属 |
五处里最容易被误解的是“旋转”。最大方差法(Varimax)的作用是把载荷矩阵往两端推,让每个变量尽量只在少数几个主成分上有高载荷,方便命名。旋转不会改变总方差解释里各成分的特征值和贡献率,但它会重新分配各成分解释的方差份额,旋转后的载荷不能直接除以原特征值的平方根去还原系数。所以正确的做法是:用未旋转的成分矩阵算系数和得分,用旋转后的成分矩阵写解释和命名,两套结果各司其职。把这两件事混在一起,算出来的综合得分和 SPSS 的得分变量对不上,是最难排查的一类错。
“选项”里的成列排除个案要不要改?n=15 的情况下不建议改。改成“成对排除”会让不同变量对之间的样本量不一致,相关矩阵各行基于不同的样本算出,数学上不自洽。宁可回到数据阶段把缺失补掉。
4.3 第三步:从成分矩阵到系数矩阵,除以特征值的平方根
“成分矩阵”表里给出的是九个变量在两个主成分上的载荷,数值范围通常在 −1 到 1 之间,本质上是变量与主成分的相关系数。它不能直接当权重用,必须转成特征向量。
转换公式很直接:第 i 个变量在第 j 个主成分上的系数 aᵢⱼ = Vᵢⱼ / √λⱼ,其中 Vᵢⱼ 是成分矩阵里的载荷,λⱼ 是该主成分对应的特征值。本例第一主成分的特征值约为 5.307(因为 5.307/9 ≈ 58.97%),第二主成分约为 2.297(2.297/9 ≈ 25.52%),开根号之后分别约 2.304 和 1.516。
SPSS 里的操作是:把成分矩阵的两列数据复制到一个新建的数据集,命名成 V1、V2,再新建两个空变量 a1、a2,用【转换】→【计算变量】逐格算。a1 的表达式是V1 / SQRT(5.307),a2 是V2 / SQRT(2.297)。注意特征值要从总方差解释表里抄准,抄错一位小数,后面所有得分都会偏。
算完 a1、a2,顺手验算一下:每一列的系数平方和应该等于 1。九个系数的平方加起来如果离 1 有明显距离,说明特征值抄错了或者某个载荷复制漏了,这一步的自检花不了两分钟,但能拦住后面几小时的无用功。
4.4 第四步:算 F1、F2 与综合指标 F 并排序
有了系数矩阵,两个主成分的得分就是标准化变量与系数的线性组合:
F1 = a1₁×Z₁ + a1₂×Z₂ + … + a1₉×Z₉ F2 = a2₁×Z₁ + a2₂×Z₂ + … + a2₉×Z₉
在 SPSS 里同样用【转换】→【计算变量】完成,表达式里把九个标准化变量分别乘上对应的系数再相加。九个变量乘以两个主成分,一共十八项乘积,手工输入容易漏项,建议在表达式框里分两行展开、逐项核对变量名和系数是否配对。
然后算综合指标:F = 0.698×F1 + 0.302×F2。这两个权重来自 58.97/84.494 和 25.524/84.494,写进表达式时保留三位小数足够,保留太多位没有意义,因为原始贡献率本身就只报到小数点后三位。
算出 F 之后,用【数据】→【排序个案】按 F 降序排,或者干脆把结果复制到 Excel 里排。排序结果就是论文里那张核心表:十五个地区、两列主成分得分、一列综合得分、一列排名。表头要写清楚得分的含义是相对位置,不是绝对水平。
4.5 第五步:论文里该放哪几张表、哪几张图
输出一大堆,全塞进论文会显得没有取舍,全不放又撑不起一份完整的大作业。按下面的清单挑,每一张都有明确的论证任务。
| 输出项 | 在方案里的作用 | 是否必放 |
|---|---|---|
| 描述统计表 | 说明各指标的量级差异和离散程度,为标准化提供理由 | 必放 |
| 相关系数矩阵 | 证明变量之间存在可降维的相关性 | 必放,可只放上三角 |
| KMO 和巴特利球形度检验 | 适配性检验的正式依据,答辩必看 | 必放 |
| 总方差解释表 | 支撑保留两个主成分的决策,含特征值和累计贡献率 | 必放 |
| 碎石图 | 拐点的可视化佐证,与总方差解释表互为印证 | 必放 |
| 成分矩阵(未旋转) | 计算系数的原料 | 必放 |
| 旋转后的成分矩阵 | 主成分命名和经济学解释的依据 | 建议放 |
| 系数矩阵 a1、a2 | 中间过程,体现实算而非套软件 | 建议放 |
| 综合得分与排序表 | 方案的最终结论 | 必放 |
图不用多,碎石图一张就够。有人喜欢再放一张载荷图或者得分散点图,那是加分项,但前提是能解释清楚坐标轴含义,解释不清不如不放。
5. 常见问题与排查:这套流程最容易翻车的五个地方
主成分分析的报错很少,绝大多数问题都以“结果看起来怪怪的”形式出现,没有红色提示,全靠人来判断。下面五条是这类作业里出现频率最高的问题,按现象、原因、解决三段写,遇到时可以直接对照排查。
5.1 数据准备阶段的两个坑
现象一:成分矩阵里“失业人员”这一项的载荷符号和其他八项全部相反,第一主成分没法命名成一个有意义的经济概念,硬解释就变成“经济规模越大失业越多”,自己都不信。原因很明确,逆向指标没有做同向化处理,变量的变化方向和其他指标拧着,特征向量在该分量上取了负号。解决办法是在原始数据表里对失业人员取相反数,生成一个新变量,用它替代原变量重跑整条流程,而不是靠“载荷为负说明负相关”口头圆过去。如果数据表已经进了 SPSS,用【转换】→【计算变量】新建一个失业人员_逆 = -失业人员也能达到同样效果,但要记得相关系数矩阵、成分矩阵、得分全部重算一遍,不能只重算最后一步。
现象二:总方差解释表里第一个主成分的贡献率高得离谱,比如 85% 以上,成分矩阵上几乎所有变量载荷都在 0.95 附近,看起来“降维效果极好”。原因通常不是模型好,而是没有基于相关矩阵分析。如果在“提取”对话框里把“分析”选成了“协方差矩阵”,量纲没有被消掉,方差最大的那个变量(通常是地区生产总值这类绝对量)会独占第一主成分,其他变量全被压成噪声。解决办法是回到“提取”把分析改成“相关性矩阵”,同时确认变量框里放的是标准化后的数据。这个错误之所以危险,是因为它让结果看起来更漂亮,不仔细核对根本发现不了。
顺带一条相关的:如果手工标准化之后又用协方差矩阵分析,等于标准化白做,因为协方差矩阵会把刚统一的标准差再乘回去,结果和用原始数据做协方差分析完全一致。
5.2 结果解读阶段的三个坑
现象三:算出来的 F1、F2、F 和 SPSS 在“得分”里保存的因子得分对不上,差一个固定倍数。原因多半出在第三步:直接用成分矩阵的载荷当系数乘标准化变量,没有除以特征值的平方根。载荷是相关系数,系数是特征向量,两者差一个 √λ 的倍数。解决办法是回到 4.3 节,把成分矩阵每列除以对应特征值的平方根再重算。另一种可能是勾了旋转之后拿旋转后的载荷去算系数,那属于概念性错误,旋转后的载荷不再对应原来的特征向量,必须换回未旋转的成分矩阵。
现象四:累计贡献率卡在 84% 出头,第三个成分的特征值是 0.9 左右,Kaiser 准则说取两个,85% 准则说取三个,论文里两个标准都写了,自相矛盾。原因是两条判定规则在小样本场景下经常打架,这不是数据问题,是规则本身的局限。解决办法是明确选一条作为主判据,另一条作为佐证,并写出取舍理由。本例的写法是:按 Kaiser 准则和碎石图拐点保留两个主成分,累计解释 84.494%,虽略低于 85% 的参考线,但第三个成分单独贡献不足 10%,对排序结果影响有限。这段话写进论文,追问就变成了送分题。
现象五:综合得分排序里第一名和最后一名差距很大,但中间三四个地区的得分挤在小数点后两位,排名看起来像掷骰子。原因是主成分得分本身就是相对位置的度量,它的单位是标准差,样本量只有十五个时,中间段的区分度天然有限。解决办法不是调参数硬拉开差距,而是改变结论的表述方式:把十五个地区分成三个梯队(综合得分明显为正、接近零、明显为负),在梯队内部说明不分先后,或者补充第二主成分得分的差异作为区分依据。论文里写“某地区排名第五”容易被追问稳定性,写“某地区处于第二梯队前列,其优势主要体现在第二主成分代表的维度上”就稳得多。
6. 验收与答辩:怎么证明这两个主成分真的站得住
整套流程跑完,输出表一大堆,最后能不能过,取决于你能不能在十分钟里回答四个问题。把这四个问题当成验收清单,逐条对一遍,缺哪条补哪条。
| 验收项 | 检查内容 | 不合格的表现 |
|---|---|---|
| 数据可追溯 | 九个指标的年份、口径、单位、缺失处理方式能一句话说清 | 被问“这个数哪来的”答不上来 |
| 适配性有依据 | KMO 值、巴特利 P 值、相关系数矩阵三者齐备且结论一致 | 只有 KMO 没有巴特利,或者值不达标还硬做 |
| 成分数有理由 | 特征值、贡献率、碎石图拐点三个证据指向同一结论 | 只写“SPSS 默认取两个” |
| 得分可复现 | 系数矩阵、F1、F2、F 的计算链条能当场推一遍 | 只会点菜单,说不出除以根号那一步 |
答辩现场最常被问的其实是概念题,不是操作题。“主成分分析和因子分析有什么区别”这一问命中率极高。SPSS 的菜单叫“因子分析”,实际用的是主成分提取法,两套方法在提取阶段几乎一样,区别在于因子分析假设存在不可观测的公共因子和独特因子,需要做因子旋转和因子得分估计,而主成分分析只是对原始变量做正交变换,主成分是原始变量的精确线性组合,不存在误差项。回答时把这个区别讲清,再补一句“本例用的是主成分法提取、未旋转解计算得分,所以结论可以直接表述为原始九项指标的线性组合”,这个回答基本就到位了。
第二常问的是“你的综合得分有负值,怎么解释”。答案在 3.3 节已经备好了:得分是相对位置的度量,均值为 0,负值表示低于十五个样本的平均水平,不代表经济负增长,也不能跨样本比较。第三常问的是“第一主成分你命名成什么”。命名要给依据:GDP、社会消费品零售总额、第三产业增加值、规模以上企业总资产、地方财政收入这五项在第一主成分上载荷高,所以命名为经济总量与产业规模因子;人均地区生产总值、失业人员、农林牧渔总产值在第二主成分上载荷高,命名为发展水平与就业结构因子。命名不是文字游戏,是载荷结构的翻译。
还有一个容易被忽略的验收动作:把最终排序表和原始数据表并排放着看一遍,找出排名前三和排名后三的地区,回到九项原始指标里逐项确认它们的强项和弱项是不是和综合得分一致。我吃过一次亏,排序出来后直接写结论,后来核对原始数据才发现某个地区因为一项指标录入时多打了一个零,硬生生被顶到前面去了。从那以后每次交这类作业,我都会把原始数据、中间结果、最终排序三张表并排摊开对一遍,三张表能互相对上,才算这套方案真的交付了。希望帮到你。
本文还有配套的精品资源,点击获取