因子分析详解:从理论到MATLAB实战
内容摘要:
本文系统解析因子分析的核心原理与MATLAB实战,涵盖数学模型、载荷矩阵估计、因子旋转及得分计算。通过上市公司盈利能力、消费者偏好等案例,演示数据标准化、因子提取与解释的全流程,并提供完整代码实现。深入对比因子分析与主成分分析的异同,助力读者掌握高维数据降维与潜在结构挖掘的关键技术。
关键词:因子分析 因子载荷 因子旋转 MATLAB实现 主成分分析—
1. 因子分析概述
因子分析(Factor Analysis)是一种多元统计方法,旨在通过研究变量间的内部依赖关系,提取潜在公共因子以简化数据结构。由心理学家Spearman于1904年提出,广泛应用于心理学、经济学、生物学等领域。其核心目标是通过少数几个不可观测的公共因子(Latent Factors)解释原始变量的主要信息,解决高维数据分析中的维度灾难问题。
与主成分分析(PCA)的区别:
- 目标不同:PCA是变量变换,因子分析是构建潜在因子模型。
- 解释性:因子分析强调因子含义的可解释性,PCA侧重信息保留。
- 数学基础:PCA基于协方差矩阵分解,因子分析基于变量协方差结构建模。
2. 因子分析数学模型
2.1 基本模型
设原始变量为 X 1 , X 2 , … , X p X_1, X_2, \dots, X_p X1,X2,…,Xp,标准化后为 Z 1 , Z 2 , … , Z p Z_1, Z_2, \dots, Z_p Z1,Z2,…,Zp,因子分析模型可表示为:
Z i = a i 1 F 1 + a i 2 F 2 + ⋯ + a i m F m + U i ( i = 1 , 2 , … , p ) Z_i = a_{i1}F_1 + a_{i2}F_2 + \dots + a_{im}F_m + U_i \quad (i=1,2,\dots,p) Zi=ai1F1+ai2F2+⋯+aimFm+Ui(i=1,2,…,p)
其中:
- 公共因子: F 1 , F 2 , … , F m F_1, F_2, \dots, F_m F1,F2,…,Fm( m < p m < p m<p),解释变量间的共同变异。
- 特殊因子: U i U_i Ui,表示变量特有变异,满足 U i ∼ N ( 0 , σ i 2 ) U_i \sim N(0, \sigma_i^2) Ui∼N(0,σi2)。
- 因子载荷: a i j a_{ij} aij,反映变量 Z i Z_i Zi 与因子 F j F_j Fj 的相关性。
矩阵形式为:
Z = A F + U Z = AF + U Z=AF+U
其中 Z Z Z 为标准化变量向量, A A A 为因子载荷矩阵, F F F 为公共因子向量, U U U 为特殊因子向量。
2.2 模型假设
- 公共因子与特殊因子独立: Cov ( F , U ) = 0 \text{Cov}(F, U) = 0 Cov(F,U)=0。
- 公共因子协方差矩阵为单位阵: Cov ( F ) = I m \text{Cov}(F) = I_m Cov(F)=Im。
- 特殊因子协方差矩阵为对角阵: Cov ( U ) = diag ( σ 1 2 , … , σ p 2 ) \text{Cov}(U) = \text{diag}(\sigma_1^2, \dots, \sigma_p^2) Cov(U)=diag(σ12,…,σp2)。
2.3 核心指标
- 变量共同度: h i 2 = ∑ j = 1 m a i j 2 h_i^2 = \sum_{j=1}^m a_{ij}^2 hi2=∑j=1maij2,反映公共因子对变量 Z i Z_i Zi 的解释程度。
- 因子贡献率: S j = ∑ i = 1 p a i j 2 S_j = \sum_{i=1}^p a_{ij}^2 Sj=∑i=1paij2,衡量因子 F j F_j Fj 的重要性,等价于特征值 λ j \lambda_j λj。
3. 因子载荷矩阵的估计方法
3.1 主成分分析法
基于相关系数矩阵 R R R 的特征分解,提取前 m m m 个主成分作为公共因子:
- 特征分解: R = Q Λ Q T R = Q \Lambda Q^T R=QΛQT,其中 Λ = diag ( λ 1 , … , λ p ) \Lambda = \text{diag}(\lambda_1, \dots, \lambda_p) Λ=diag(λ1,…,λp)。
- 载荷矩阵: A = ( λ 1 η 1 , … , λ m η m ) A = (\sqrt{\lambda_1} \eta_1, \dots, \sqrt{\lambda_m} \eta_m) A=(λ1η1,…,λmηm), η j \eta_j ηj 为特征向量。
MATLAB代码示例:
[vec, val, con] = pcacov(R); % 特征分解
A = vec(:,1:m) * diag(sqrt(val(1:m))); % 构造载荷矩阵
3.2 主因子法
通过约相关系数矩阵 R ∗ = R − D R^* = R - D R∗=R−D( D D D 为特殊方差矩阵)估计载荷矩阵:
- 初始估计:假设 h i 2 = max j ≠ i ∣ r i j ∣ h_i^2 = \max_{j \neq i} |r_{ij}| hi2=maxj=i∣rij∣ 或复相关系数平方。
- 特征分解:对 R ∗ R^* R∗ 进行分解,得到载荷矩阵。
特点:适用于特殊方差已知或可估计的场景。
3.3 极大似然估计法
假设数据服从多元正态分布,通过最大化似然函数迭代求解载荷矩阵和特殊方差。
优点:统计性质优良;缺点:计算复杂度高。
4. 因子旋转
为提高因子解释性,对载荷矩阵进行正交旋转(如方差最大法),使因子结构更清晰。
4.1 方差最大法(Varimax)
目标:最大化因子载荷平方的方差,使每列载荷值两极分化。
旋转矩阵:
Q = ( cos ϕ − sin ϕ sin ϕ cos ϕ ) Q = \begin{pmatrix} \cos \phi & -\sin \phi \\ \sin \phi & \cos \phi \end{pmatrix} Q=(cosϕsinϕ−sinϕcosϕ)
通过优化 ϕ \phi ϕ 使旋转后载荷矩阵的方差最大。
MATLAB实现:
[b, T] = rotatefactors(A, 'method', 'varimax'); % 旋转载荷矩阵
4.2 案例:消费者偏好分析
对5项食品评价指标进行因子分析,旋转后载荷矩阵如下:
指标 | 旋转因子1(常闭因子) | 旋转因子2(滞缺因子) |
---|---|---|
味道 | 0.027 | 0.9854 |
价格 | 0.8734 | 0.0034 |
风味 | 0.1329 | 0.9705 |
快餐 | 0.8178 | 0.4035 |
能量 | 0.9734 | -0.0179 |
结论:因子1反映价格与能量属性,因子2反映味道与风味属性。
5. 因子得分计算
5.1 巴特莱特因子得分
通过加权最小二乘法估计因子得分:
F ^ = ( A T D − 1 A ) − 1 A T D − 1 Z \hat{F} = (A^T D^{-1} A)^{-1} A^T D^{-1} Z F^=(ATD−1A)−1ATD−1Z
其中 D D D 为特殊方差对角矩阵。
5.2 回归法
利用回归系数矩阵估计因子得分:
F ^ = Z R − 1 A \hat{F} = Z R^{-1} A F^=ZR−1A
MATLAB代码示例:
coef = inv(R) * A; % 得分系数矩阵
score = Z * coef; % 计算因子得分
6. 因子分析步骤
- 数据标准化:消除量纲影响。
- 计算相关系数矩阵:评估变量相关性。
- 提取公共因子:根据特征值或累积贡献率选择因子数。
- 因子旋转:优化载荷矩阵结构。
- 解释因子:结合业务背景命名因子。
- 计算因子得分:用于后续分析(如回归、聚类)。
7. 实战案例:上市公司盈利能力分析
7.1 数据与指标
16家上市公司的4项盈利指标:销售净利率、资产净利率、净资产收益率、销售毛利率。
7.2 分析步骤
- 标准化数据:消除量纲差异。
- 计算相关系数矩阵:验证变量相关性。
- 提取主因子:选择累积贡献率>85%的因子(前2个)。
- 因子旋转:方差最大法优化解释性。
- 计算综合得分:
F = 0.531 Z 1 + 0.1615 Z 2 − 0.1831 Z 3 + 0.5015 Z 4 F = 0.531Z_1 + 0.1615Z_2 - 0.1831Z_3 + 0.5015Z_4 F=0.531Z1+0.1615Z2−0.1831Z3+0.5015Z4
结果:烟台万华、五粮液等公司盈利能力领先,方正科技、湖北宜化等排名靠后。
8. MATLAB核心函数详解
8.1 pcacov
:主成分分析
[vec, val, con] = pcacov(R); % R为相关系数矩阵
% vec: 特征向量,val: 特征值,con: 贡献率
8.2 rotatefactors
:因子旋转
[b, T] = rotatefactors(A, 'method', 'varimax');
% b: 旋转后载荷矩阵,T: 正交变换矩阵
8.3 factoran
:因子分析(需谨慎使用)
[Lambda, Psi, T, stats, F] = factoran(X, m, 'rotate', 'varimax');
% Lambda: 旋转载荷矩阵,F: 因子得分
9. 总结
- 因子分析优势:降维、提取潜在结构、提升模型解释性。
- 关键步骤:因子提取、旋转、得分计算。
- 应用场景:消费者行为研究、财务指标分析、社会科学调查。
相关文章:
因子分析详解:从理论到MATLAB实战
内容摘要: 本文系统解析因子分析的核心原理与MATLAB实战,涵盖数学模型、载荷矩阵估计、因子旋转及得分计算。通过上市公司盈利能力、消费者偏好等案例,演示数据标准化、因子提取与解释的全流程,并提供完整代码实现。深入对比因子分…...

【组态PLC】基于三菱西门子S7-200PLC和组态王液料混合系统组态设计【含PLC组态源码 M016期】
控制要求 总体控制要求:如面板图所示,本装置为三种液体混合模拟装置,由液面传感器SL1、SL2、SL3,液体A、B、C阀门与混合液阀门由电磁阀YV1、YV2、YV3、YV4,搅匀电机M,加热器H,温度传感器T组成。…...
js:根据后端返回的数组取出每一个数组的keyword字段然后拼接成一个逗号分隔的字符串
问: 现在有一个el-select, 后端接口返回数据为keyword:xxx,referenceNum:1,tagId:132sf32fasdfaf组成的数组, 现在select是多选, 但是但我选择多个下拉框选项后,后端需要前端返回的数据tagIds字段需要时一个字符串…...
基于大模型的肺纤维化预测及临床方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 二、大模型技术概述 2.1 大模型的基本原理 2.2 大模型在医疗领域的应用现状 三、肺纤维化相关知识 3.1 肺纤维化的病因与发病机制 3.2 肺纤维化的临床症状与诊断方法 3.3 肺纤维化的治疗现状与挑战 四、大模型…...
7. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--路由
路由是API网关的核心功能,对系统性能和可靠性至关重要。路由通过定义规则,将客户端请求准确地转发到相应的后端服务,确保请求能够正确处理,简化了微服务架构中的服务调用逻辑。有效的路由配置能够提高系统的灵活性和可维护性。 一…...

【GESP】C++二级模拟 luogu-b3995, [GESP 二级模拟] 小洛的田字矩阵
GESP二级模拟题,多层循环、分支语句练习,难度★✮☆☆☆。 题目题解详见:https://www.coderli.com/gesp-2-luogu-b3995/ 【GESP】C二级模拟 luogu-b3995, [GESP 二级模拟] 小洛的田字矩阵 | OneCoderGESP二级模拟题,多层循环、分…...
监督学习——基于线性回归的波士顿房价预测:理论、实践与评估
基于线性回归的波士顿房价预测:理论、实践与评估 文章目录 基于线性回归的波士顿房价预测:理论、实践与评估一、引言二、线性回归基础理论2.1 线性回归原理2.2 线性回归在房价预测中的应用逻辑三、波士顿房价数据集介绍3.1 数据集概述3.2 特征说明3.3 目标变量四、波士顿房价…...
Selenium 调用模型接口实现功能测试
要使用 Selenium 调用模型接口实现功能测试,可按以下步骤进行: 1. 环境准备 安装 Selenium:使用 pip install selenium 安装 Selenium 库。安装浏览器驱动:根据使用的浏览器(如 Chrome、Firefox 等)下载对应的驱动,并将其添加到系统的环境变量中。例如,Chrome 浏览器需…...
回调函数的用法
回调函数的基本用法 回调函数是一种被作为参数传递给另一个函数的函数,接收回调函数作为参数的函数在合适的时候会调用这个回调函数。回调函数为代码提供了更高的灵活性和可扩展性,下面为你详细介绍回调函数的基本用法。 基本概念 回调函数的核心在于函…...
springboot实现文件上传到华为云的obs
一、前言 有时在项目中需要使用一些存储系统来存储文件,那么当项目要接入obs作为存储系统时,就会利用obs来进行文件的上传下载,具体实现如下。 二、如何通过obs实现文件的上传下载? 1.添加相关的obs的maven依赖。 <dependency…...

南京布局产业园剖析:成都树莓集团的战略逻辑
在数字产业飞速发展的当下,成都树莓集团在南京布局产业园,这一举措蕴含着深刻的战略考量,是基于对市场环境、产业趋势以及自身发展需求的综合研判。 一、政策利好与发展机遇 南京作为长三角地区的重要城市,在数字经济发展方面享有…...

C++ QT 6.6.1 QCustomPlot的导入及使用注意事项和示例 | 关于高版本QT使用QCustomPlot报错问题解决的办法
C QT 6.6.1 QCustomPlot的导入及使用注意事项和示例 | 关于高版本QT使用QCustomPlot报错问题解决的办法 记录一下 qmake .pro文件的配置 QT core gui printsupportgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compil…...
【算法】哈希表详解
【算法】哈希表详解 1. 哈希表的基本概念2. 哈希表的优缺点3. 哈希表的实现方法4. 哈希表的应用场景5. 哈希表的性能优化6. 哈希表 vs 其他数据结构7. 总结 哈希表(Hash Table) 是一种高效的数据结构,用于存储键值对(Key-Value Pa…...

【红队利器】单文件一键结束火绒6.0
关于我们 4SecNet 团队专注于网络安全攻防研究,目前团队成员分布在国内多家顶级安全厂商的核心部门,包括安全研究领域、攻防实验室等,汇聚了行业内的顶尖技术力量。团队在病毒木马逆向分析、APT 追踪、破解技术、漏洞分析、红队工具开发等多个…...
Docker小游戏 | 使用Docker部署star-battle太空飞船射击小游戏
Docker小游戏 | 使用Docker部署star-battle太空飞船射击小游戏 前言项目介绍项目简介项目预览二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署star-battle网页小游戏下载镜像创建容器检查容器状态检查服务端口安全设置四、访问star-battle网页小游戏五、总…...

【EB-06】SystemCreator dbc转arxml
SystemCreator dbc转arxml 1. SystemCreator 意义2. SystemCreator使用方法2.1 实现步骤2.2 参考官方文档方法1. SystemCreator 意义 EB Tresos 对dbc直接导入的支持不是很完善,dbc也不是AUTOSAR标准的数据库文件,EB建议所有通信矩阵通过ARXML交互比较合理(AUTOSAR定义的)…...

(0)阿里云大模型ACP-考试回忆
这两天通过了阿里云大模型ACP考试,由于之前在网上没有找到真题,导致第一次考试没有过,后面又重新学习了一遍文档才顺利通过考试,这两次考试内容感觉考试题目90%内容是覆盖的,后面准备分享一下每一章的考题,…...
按键精灵鹰眼中控:ios多设备管理工具
在当今数字化时代,高效管理多设备已成为许多企业和个人的迫切需求。无论是游戏多开、自动化测试,还是电商运营,如何同时操作多台设备并确保精准执行,一直是一个难题。现在,按键精灵的鹰眼群控功能为您提供了完美的解决…...

__对于初学者的CCS 汉化
IDE:Code Composer Studio 20.0.2 CCS安装后默认是英文,目前最新的20版其Help工具栏是没有安装软件包的选项。不过,想要汉化还有更简单的方法 安装插件 在左边找到扩展,然后在框内搜索Chinese,可以找到两个语言插件&am…...

JavaScript 系列之:Ajax、Promise、Axios
前言 同步:会阻塞。同步代码按照编写的顺序逐行依次执行,只有当前的任务完成后,才会执行下一个任务。 异步:异步代码不会阻塞后续代码的执行。当遇到异步操作时,JavaScript 会将该操作放入任务队列中,继续…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...