因子分析:数学建模竞赛中的"降维 + 评价"利器
一句话定位: 因子分析(Factor Analysis, FA)是一种从一堆高度相关的指标中,提取出少数几个"公共因子"的统计方法。它既能降维去冗余,又能把指标归类成构念,是评价类、聚类类赛题的高频建模工具——但用错一步,结论就会"假了"。本文把算法讲透,并附可直接套用的 Python 流程。 目录
一、为什么竞赛要用因子分析 全国大学生数学建模竞赛中,评价类问题几乎年年出现:给一堆指标(如水质、城市竞争力、上市公司绩效、区域创新能力),让你给对象排名或分类。这类题有四个典型痛点,因子分析正好对症:
[td]
二、核心概念 因子分析假设:我们观测到的 $$p$$ 个标准化指标,其实是由少数 $$m$$ 个不可直接观测的公共因子加上每个指标各自的特殊因子共同决定的。
图1 因子分析结构示意图F₁公共因子1F₂公共因子2X₁X₂X₃X₄X₅X₆载荷 aᵢⱼ(相关系数,粗细≈大小) 图1 因子分析结构示意图:观测变量经载荷连向潜在公共因子 ![]() 三、数学模型与关键公式3.1 基本模型 设标准化后的观测向量 $$\mathbf{X}=(X_1,\dots,X_p)^\top$$,公共因子 $$\mathbf{F}=(F_1,\dots,F_m)^\top$$,特殊因子 $$\boldsymbol{\varepsilon}=(\varepsilon_1,\dots,\varepsilon_p)^\top$$,则 $$X_i = a_{i1}F_1 + a_{i2}F_2 + \cdots + a_{im}F_m + \varepsilon_i,\qquad i=1,\dots,p $$ 等价于矩阵形式: $$\mathbf{X} = \mathbf{\Lambda}\mathbf{F} + \boldsymbol{\varepsilon} $$ 其中 $$\mathbf{\Lambda}$$为 $$p\times m$$ 因子载荷矩阵,$$E[\mathbf{F}]=\mathbf{0},\ \mathrm{Cov}(\mathbf{F})=\mathbf{I}_m$$,$$E[\boldsymbol{\varepsilon}]=\mathbf{0}$$,且$$\mathbf{F}$$与 $$\boldsymbol{\varepsilon}$$ 不相关。 3.2 协方差分解(模型的核心)由模型可得观测变量的协方差(标准化后即为相关矩阵 $$\mathbf{R}$$): $$\mathbf{\Sigma} = \mathrm{Cov}(\mathbf{X}) = \mathbf{\Lambda}\mathbf{\Lambda}^\top + \mathbf{\Psi},\qquad \mathbf{\Psi}=\mathrm{diag}(\psi_1,\dots,\psi_p) $$ $$\mathbf{\Lambda}\mathbf{\Lambda}^\top$$ 是公共因子贡献,$$\mathbf{\Psi}$ $是特殊方差(唯一性)。这正是 FA 与 PCA 的根本区别:FA 显式地把"误差方差"$$\Psi$$ 单独拆了出来。 3.3 公因子方差与方差贡献公因子方差(共同度): 共同度(变量 i 的共性方差):\[h_i^2 = \sum_{j=1}^{m} a_{ij}^2 = 1 - \psi_i\]因子 $j$ 的方差贡献:\[V_j = \sum_{i=1}^{p} a_{ij}^2\]累计方差贡献率:\[\frac{\sum_{j=1}^{m} V_j}{\sum_{i=1}^{p} h_i^2} \approx \frac{\sum_{j=1}^{m} V_j}{p}\] 实际选因子时,常要求累计方差贡献率 ≥ 80% 且每个指标的共同度 $$h_i^2$$ 不宜过低(一般 ≥ 0.4)。 3.4 因子旋转:让因子"可命名"初始载荷往往分散、难解释。通过正交旋转(保持因子不相关)让每个变量只在少数因子上有高载荷。最常用的是 Varimax(方差最大化旋转),其目标是最大化各列载荷平方的方差: $$\max \sum_{j=1}^{m} \left[ \frac{1}{p}\sum_{i=1}^{p} (\tilde a_{ij})^4 - \left(\frac{1}{p}\sum_{i=1}^{p} (\tilde a_{ij})^2\right)^2 \right] $$ 旋转不改变模型拟合优度与共同度,只改变载荷分布,方便命名(例如把 F1 命名为"规模因子"、F2 命名为"效率因子")。 3.5 因子得分与综合得分对每个样本估计其因子得分(回归法): $$\hat{\mathbf{F}} = \big(\mathbf{\Lambda}^\top\mathbf{\Psi}^{-1}\mathbf{\Lambda}\big)^{-1}\mathbf{\Lambda}^\top\mathbf{\Psi}^{-1}\mathbf{X} $$ 用各因子方差贡献作权重,得到综合得分(排名依据): $$S_k = \sum_{j=1}^{m} w_j\,\hat F_{kj}, \qquad w_j = \frac{V_j}{\sum_{j=1}^{m} V_j} $$ 3.6 做之前必须先做的两个检验 不是任何数据都适合因子分析。先过两关: Bartlett 球形检验: 原假设"相关矩阵 = 单位阵(变量独立)"。检验统计量 $$\chi^2 = -\left(n-1-\frac{2p+5}{6}\right)\ln|\mathbf{R}| $$ 要求 $p$ 值 < 0.05,才拒绝原假设、适合做 FA。 KMO 取样适切性量数: $$\mathrm{KMO} = \dfrac{\sum_{i\neq j} r_{ij}^2}{\sum_{i\neq j} r_{ij}^2 + \sum_{i\neq j} p_{ij}^2} $$ r{ij}为相关系数,p{ij}为偏相关系数。KMO ≥ 0.6 可用,≥ 0.8 很好。 四、标准算法流程(八步)
五、四张可视化图表图2 碎石图(Scree Plot)—— 决定保留几个因子 特征值按从大到小排列,落在"陡坡转平台"的拐点之后、且低于红线(特征值=1)的因子不再保留。本例保留 F1、F2。 因子序号特征值0123特征值 = 1保留F1(2.61)F2(1.74)F3(0.92)F4(0.41)F5(0.19)F6(0.13) 图2 碎石图:前两个因子特征值 > 1,构成拐点,予以保留 ![]() 图3 因子载荷热图(旋转后)—— 看指标归到哪个因子 颜色越深表示载荷绝对值越大。理想旋转结果:每列出现少数高载荷(深色),其余接近 0,从而清晰命名。 F₁(规模因子)F₂(效率因子)指标X₁X₂X₃X₄X₅X₆0.860.810.150.080.790.120.100.220.880.83−0.180.77强正强正弱负近0 ![]() 图3 旋转后载荷热图:X₁/X₂/X₅ 归 F₁,X₃/X₄/X₆ 归 F₂,命名清晰 图4 因子得分散点图(四象限)—— 样本分类把每个样本的两个因子得分画成散点,可直观做聚类/定位:右上"双高"、左上"效率型"、右下"规模型"、左下"双低"。 F₁ 得分 →F₂ 得分 ↑双高型效率型规模型双低型ABCDEFGH 图4 因子得分散点图:按双因子得分对样本做四象限定位与聚类 ![]() 六、Python 实战代码 推荐使用 factor_analyzer 库(专为因子分析设计,自动给出 KMO、Bartlett、载荷、方差贡献)。pip
七、竞赛案例:城市创新能力评价(简化) 假设有 6 个指标、8 个城市,指标为:R&D 经费投入(X₁)、每万人专利数(X₂)、高新技术企业数(X₃)、技术市场成交额(X₄)、产业结构高级化(X₅)、创新环境指数(X₆)。
八、常见误区与提分技巧[td]
九、赛场自查清单
本文公式与流程均依据多元统计分析标准教材(如 Johnson & Wichern《Applied Multivariate Statistical Analysis》、何晓群《多元统计分析》),可直接用于数学建模竞赛论文方法章节。图表为说明性示例数据,实战请替换为赛题真实数据。 — 写给认真备赛的你 · 祝建模顺利 — |

Powered by Discuz! X2.5 © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 ) 论坛法律顾问:王兆丰
GMT+8, 2026-8-23 03:41 , Processed in 0.314645 second(s), 36 queries .