因子分析详解:从理论到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 会将该操作放入任务队列中,继续…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
