因子分析详解:从理论到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 会将该操作放入任务队列中,继续…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
