📑 查看全课大纲(第 13 / 20 节)

因子分析正交模型与因子载荷求解

约 62 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · 多元统计分析

因子分析是多元统计中探索变量内在结构、提取潜在公共因子的核心技术。与主成分分析(PCA)不同,它从可观测变量中提炼不可直接观测的公共因子,以解释变量相关性、简化数据结构。本节将介绍因子分析的基本思想、正交模型、因子载荷的统计意义,并讲解主因子法求解载荷矩阵的过程与Python实现。

💡 核心导读

  • 因子分析核心:从可观测变量的相关性中,寻找少数支配性潜在公共因子。
  • 正交因子模型:变量表示为公共因子线性组合加特殊因子,满足正交性假设。
  • 因子载荷意义:反映变量与公共因子的相关性,平方和对应共同度与方差贡献。
  • 主因子法求解:通过约相关阵特征分解,得到方差贡献最大化的载荷矩阵。
  • Python实战:用主成分法(主因子特例)估计载荷、共同度,验证模型拟合效果。

一、因子分析的基本思想与模型

1.1 从主成分分析到因子分析

主成分分析将 pp 个原始变量 X1,X2,,XpX_1, X_2, \dots, X_p 线性变换为 mm (m<pm < p) 个互不相关的主成分 F1,F2,,FmF_1, F_2, \dots, F_m,实现降维去相关,模型形式为: Fj=k=1pajkXk,j=1,,mF_j = \sum_{k=1}^p a_{jk}X_k, \quad j=1,\dots,m

因子分析则从相反角度出发:假设每个可观测变量 XiX_i 受少数不可观测的公共因子 F1,F2,,FmF_1, F_2, \dots, F_m 和仅作用于自身的特殊因子 εi\varepsilon_i 共同影响,模型形式为: Xi=k=1maikFk+εi,i=1,,pX_i = \sum_{k=1}^m a_{ik}F_k + \varepsilon_i, \quad i=1,\dots,p 其中 aija_{ij} 称为因子载荷,表示第 ii 个变量在第 jj 个公共因子上的权重。

1.2 因子分析的起源:Spearman的智力研究

因子分析思想最早由Charles Spearman于1904年提出。他在学生成绩研究中发现,不同科目成绩的相关系数存在稳定比例关系,推测存在一个潜在公共因子(一般智力g)影响所有科目成绩,即单因子模型: Xi=aiF+εiX_i = a_i F + \varepsilon_i 其中 FF 为公共因子,aia_i 为科目对智力的依赖程度,εi\varepsilon_i 为特殊因素。该模型可很好解释观察到的相关规律,后被推广为多因子模型。

1.3 R型正交因子分析模型

标准R型正交因子分析模型的矩阵形式为: X=AF+ε\mathbf{X} = \mathbf{A} \mathbf{F} + \boldsymbol{\varepsilon} 其中:

  • X=(X1,X2,,Xp)\mathbf{X} = (X_1, X_2, \dots, X_p)^\toppp 维标准化可观测向量(均值0,方差1);
  • F=(F1,F2,,Fm)\mathbf{F} = (F_1, F_2, \dots, F_m)^\topmm 维公共因子向量,m<pm < p
  • ε=(ε1,ε2,,εp)\boldsymbol{\varepsilon} = (\varepsilon_1, \varepsilon_2, \dots, \varepsilon_p)^\toppp 维特殊因子向量;
  • A=(aij)p×m\mathbf{A} = (a_{ij})_{p \times m}因子载荷矩阵

模型满足三个基本假设:

  1. 公共因子与特殊因子不相关:Cov(F,ε)=0\text{Cov}(\mathbf{F}, \boldsymbol{\varepsilon}) = \mathbf{0}
  2. 公共因子标准化且互不相关:E(F)=0,Var(F)=ImE(\mathbf{F}) = \mathbf{0}, \quad \text{Var}(\mathbf{F}) = \mathbf{I}_m
  3. 特殊因子互不相关:Var(ε)=Dε=diag(σ12,σ22,,σp2)\text{Var}(\boldsymbol{\varepsilon}) = \mathbf{D}_\varepsilon = \text{diag}(\sigma_1^2, \sigma_2^2, \dots, \sigma_p^2)σi2\sigma_i^2特殊方差

在此假设下,标准化变量的相关矩阵可分解为: R=AA+Dε\mathbf{R} = \mathbf{A} \mathbf{A}^\top + \mathbf{D}_\varepsilon 该分解式是因子分析的核心,也是求解载荷矩阵的出发点。

二、因子载荷矩阵的统计意义

2.1 因子载荷 aija_{ij}

因子载荷 aija_{ij} 本质是 XiX_iFjF_j 的相关系数。由于 XiX_iFjF_j 均已标准化,二者协方差等于相关系数: Cov(Xi,Fj)=Cov(k=1maikFk+εi,Fj)=aijVar(Fj)+Cov(εi,Fj)=aij\begin{aligned} \text{Cov}(X_i, F_j) &= \text{Cov}\left( \sum_{k=1}^m a_{ik}F_k + \varepsilon_i, F_j \right) \\ &= a_{ij}\text{Var}(F_j) + \text{Cov}(\varepsilon_i, F_j) = a_{ij} \end{aligned} 因此 aija_{ij} 反映了 XiX_iFjF_j 的依赖程度,绝对值越大,二者关系越密切。

2.2 变量共同度 hi2h_i^2

变量 XiX_i 的方差可分解为公共因子解释部分和特殊因子解释部分: Var(Xi)=j=1maij2+σi2\text{Var}(X_i) = \sum_{j=1}^m a_{ij}^2 + \sigma_i^2 定义共同度 hi2=j=1maij2h_i^2 = \sum_{j=1}^m a_{ij}^2,表示 XiX_i 方差中能被所有公共因子解释的比例。由于 XiX_i 标准化后方差为1,因此 1=hi2+σi21 = h_i^2 + \sigma_i^2hi2h_i^2 越接近1,公共因子解释力越强。

2.3 公共因子的方差贡献 gj2g_j^2

定义第 jj 个公共因子的方差贡献 gj2=i=1paij2g_j^2 = \sum_{i=1}^p a_{ij}^2,即载荷矩阵第 jj 列元素的平方和,反映 FjF_j 对所有变量的总影响力。gj2g_j^2 越大,该因子越重要。通常按 gj2g_j^2 降序排列公共因子,贡献率为 gj2/i=1phi2g_j^2 / \sum_{i=1}^p h_i^2

三、主因子法求解因子载荷矩阵

因子分析的核心是估计 A\mathbf{A}Dε\mathbf{D}_\varepsilon,主因子法是最常用的估计方法之一,思路与主成分分析类似但出发点不同。

3.1 约相关阵

由模型分解式 R=AA+Dε\mathbf{R} = \mathbf{A}\mathbf{A}^\top + \mathbf{D}_\varepsilon,移项得约相关阵R=RDε=AA\mathbf{R}^* = \mathbf{R} - \mathbf{D}_\varepsilon = \mathbf{A}\mathbf{A}^\top 约相关阵的对角线元素为变量共同度 hi2h_i^2(而非原始相关矩阵的1),非对角线元素与原始相关系数一致,是一个非负定矩阵。

3.2 主因子法的求解思路

主因子法的目标是找到载荷矩阵 A\mathbf{A},使得公共因子按方差贡献从大到小排列,且满足 R=AA\mathbf{R}^* = \mathbf{A}\mathbf{A}^\top

根据矩阵特征分解理论,A\mathbf{A} 的第 jj 列等于约相关阵 R\mathbf{R}^* 的第 jj 大特征值的平方根乘以对应的单位特征向量,即: aj=λj  tj\mathbf{a}_j = \sqrt{\lambda_j^*} \; \mathbf{t}_j 其中 λj\lambda_j^*R\mathbf{R}^* 的第 jj 大特征值,tj\mathbf{t}_j 是对应的单位特征向量。

最终因子载荷矩阵为: A=[λ1t1,λ2t2,,λmtm]\mathbf{A} = \left[ \sqrt{\lambda_1^*}\mathbf{t}_1, \sqrt{\lambda_2^*}\mathbf{t}_2, \dots, \sqrt{\lambda_m^*}\mathbf{t}_m \right]

3.3 特例:主成分法

实际应用中,约相关阵 R\mathbf{R}^* 是未知的(需先估计特殊方差)。最简单的初始估计是假设所有变量的共同度 hi2=1h_i^2=1,即 Dε=0\mathbf{D}_\varepsilon=\mathbf{0},此时 R=R\mathbf{R}^*=\mathbf{R},约相关阵退化为原始相关矩阵,这种方法称为主成分法

主成分法的载荷求解与主成分分析的特征分解完全等价,虽可能高估共同度,但因简单易用,是实际中最常用的因子载荷估计方法之一。

四、Python实战:主成分法估计因子模型

下面用Python演示主成分法估计因子载荷、共同度与特殊方差,并验证模型重构效果。

import numpy as np

np.random.seed(42)
R = np.array([
    [1.00, 0.80, 0.75, 0.20, 0.15],
    [0.80, 1.00, 0.82, 0.25, 0.18],
    [0.75, 0.82, 1.00, 0.18, 0.22],
    [0.20, 0.25, 0.18, 1.00, 0.70],
    [0.15, 0.18, 0.22, 0.70, 1.00]
])

eigenvals, eigenvecs = np.linalg.eigh(R)
idx = np.argsort(eigenvals)[::-1]
eigenvals = eigenvals[idx]
eigenvecs = eigenvecs[:, idx]

m = 2
Lambda = eigenvecs[:, :m] * np.sqrt(eigenvals[:m])

communalities = np.sum(Lambda**2, axis=1)
psi = 1.0 - communalities

R_approx = Lambda @ Lambda.T + np.diag(psi)
residual_norm = np.linalg.norm(R - R_approx)

print("前 2 主因子特征值:", np.round(eigenvals[:2], 4).tolist())
print("主因子载荷矩阵形状:", Lambda.shape)
print("5 个变量的共同度 (Communalities):", np.round(communalities, 4).tolist())
print("5 个变量的特殊方差 (Uniqueness):", np.round(psi, 4).tolist())
print("因子模型重构残差矩阵范数:", round(float(residual_norm), 8))

运行结果

前 2 主因子特征值: [2.7935, 1.4883]
主因子载荷矩阵形状: (5, 2)
5 个变量的共同度 (Communalities): [0.8404, 0.8891, 0.8518, 0.8485, 0.852]
5 个变量的特殊方差 (Uniqueness): [0.1596, 0.1109, 0.1482, 0.1515, 0.148]
因子模型重构残差矩阵范数: 0.28820724

结果解读:两个公共因子可解释原始变量85.64%的方差,第一因子主要支配前3个变量(因子1载荷约0.86-0.90),第二因子主要支配后2个变量(因子2载荷约0.78-0.80);所有变量共同度均在0.84以上,说明公共因子对各变量解释力较强;残差很小,因子模型对相关矩阵的重构效果理想。

📝 动手练一练

  1. 共同度计算
    正交因子模型中,标准化变量 X3X_3 的共同度 h32=0.75h_3^2 = 0.75,求其特殊方差 σ32\sigma_3^2 并说明含义。 参考答案:由 1=h32+σ321 = h_3^2 + \sigma_3^2,得 σ32=0.25\sigma_3^2 = 0.25,说明公共因子可解释 X3X_3 75%的方差,解释力较强。

  2. 载荷的意义
    标准化变量 X2X_2 与公共因子 F4F_4 的载荷 a24=0.92a_{24} = 0.92,说明二者的关系。 参考答案:因子载荷即变量与因子的相关系数,故 Corr(X2,F4)=0.92\text{Corr}(X_2, F_4) = 0.92,二者高度正相关,F4F_4X2X_2 的解释力很强。

本章小结

本节核心内容包括:

  • 因子分析本质是寻找可观测变量背后的少数潜在公共因子,简化数据结构、解释变量相关性。
  • 正交因子模型 X=AF+ε\mathbf{X} = \mathbf{A}\mathbf{F} + \boldsymbol{\varepsilon} 满足公共因子不相关、特殊因子不相关、二者互不相关的假设。
  • 因子载荷 aija_{ij} 是变量 XiX_i 与公共因子 FjF_j 的相关系数;行平方和为共同度 hi2h_i^2,列平方和为因子方差贡献 gj2g_j^2
  • 主因子法通过约相关阵的特征分解求解载荷矩阵,主成分法是其特例(假设特殊方差为0)。
  • Python中可通过numpy的特征分解实现主成分法因子分析,通过残差验证模型拟合效果。

— 小象教研组

配套学习资源与课件
  • 第6章课件:因子分析
    下载
  • 多元统计分析参考讲义与常用函数(多元分析与主成分常用函数速查)
    下载
  • 课程配套数据集(全课程实战数据包)
    下载
  • 课程全套源代码(课程相关代码汇总)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信二维码:扫码添加课程顾问微信扫码添加顾问