Python实现因子分析(附案例实战)

因子分析

因子分析(Factor Analysis)是一种数据简化的技术。它通过研究众多变量之间的内部依赖关系探求观测数据中的基本结构,并用少数几个假想变量来表示其基本的数据结构。这几个假想变量能够反映原来众多变量的主要信息。原始的变量是可观测的显在变量,而假想变量是不可观测的潜在变量,称为因子。

例如,在企业形象或品牌形象的研究中,消费者可以通过一个由24个指标构成的评价体系评价百货商城的24个方面的优劣。但消费者主要关心三个方面,即商店的环境、商店的服务和商品的价格。因子分析方法可以通过24个变量找出反映商店环境、商店服务水平和商品价格的3个潜在的因子,对商店进行综合评价。

这3个公共因子可以表示为:

Python实现因子分析(附案例实战)

1.因子分析与主成分分析的区别

  • 主成分分析仅仅是变量变换,而因子分析需要构造因子模型。
  • 因子分析:潜在的假想变量和随机影响变量的线性组合表示原始变量。
  • 主成分分析:原始变量的线性组合表示新的综合变量,即主成分。

因子分析数学模型

假设有P个变量X,有m个因子(m≤p),则因子分析的数学模型可以表示如下:

Python实现因子分析(附案例实战)

2.因子旋转

若因子分析中得出的各个因子有明确的含义,则因子分析的模型会更加易于解释和有实际意义。在因子分析中可以对因子载荷矩阵进行旋转,使每个变量仅在一个公共因子上有较大的载荷,而在其余的公共因子上的载荷比较小。通过旋转,因子可以有更加明确的含义。常用的一种方法是方差最大旋转。

3.因子得分及其计算

前面我们主要解决了用公共因子的线性组合来表示一组观测变量的有关问题。如果要使用这些因子做其他的研究,比如把得到的因子作为自变量来进行回归分析,对样本进行分类或评价,就需要计算每个个体在每个因子上的得分。

要计算因子得分,需要估计以下表达式:

Python实现因子分析(附案例实战)

4.因子分析的步骤

因子分析解决的3个基本问题:

  • 因子载荷阵A的估计
  • 当因子难以得到合理的解释时,对因子载荷阵进行正交变换,即因子旋转。对因子的实际意义做出合理的解释。
  • 给出每个变量(或样品)关于m个公共因子的得分,通常表示为原始变量的线性组合,即因子得分函数。对公共因子做出估计。

因子分析的步骤:

(1)根据问题选取原始变量。

(2)求其相关阵R,探讨其相关性,

(3)从R求解初始公共因子F及其因子载荷矩阵A(主成分法)。

(4)因子旋转,分析因子的含义。

(5)计算因子得分函数。

(6)根据因子得分值进行进一步分析(例如综合评价)。

5.因子分析与主成分分析的区别和联系

(1)因子分析、主成分分析都是重要的降维方法(即数据简化技术),因子分析可以看作主成分分析的推广和发展。

(2)主成分分析不能作为一个模型来描述,它只能作为一般的变量变换,主成分是可观测的原始变量的线性组合。因子分析需要构造因子模型,公共因子是潜在的不可观测的变量,一般不能表示为原始变量的线性组合。

(3)因子分析是用潜在的、不可观测的变量和随机变量的线性组合来表示原始变量,即通过这样的分解来分析原始变量的协方差结构(相依关系)。

6.因子分析案例实战

本次实战数据是一份关于水果茶调查问卷中的一道量表题数据 ,选项共有9个维度,值范围为1-5

Python实现因子分析(附案例实战)

首先导入数据

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示

导入数据
data = pd.read_csv('data.csv')
data.head()

适用性检验

适用性检验主要是检验数据是否可以使用因子分析,因为因子分析的前提是原始维度之间具有相关性,因此适用性检验就是检验原始维度之间是否具有相关性,如果不相关则不适合做因子分析。

KMO和Bartlett球形检验
主要用的到的方法是KMO和Bartlett球形检验,其中Bartlett球形检验用于检验变量之间是否相关独立,如果p值小于0.05则适合做因子分析;KMO用于检验变量之间的相关性取值在0-1之间,值越大相关性越强。

from factor_analyzer import FactorAnalyzer, calculate_kmo, calculate_bartlett_sphericity
kmo = calculate_kmo(data)
bartlett = calculate_bartlett_sphericity(data)
print(f'KMO:{kmo[1]}')
print(f'Bartlett:{bartlett[1]}')

Python实现因子分析(附案例实战)

我们发现KMO值为0.845大于0.6,且 Bartlett值为0

Original: https://blog.csdn.net/m0_64336780/article/details/127382936
Author: 艾派森
Title: Python实现因子分析(附案例实战)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/726961/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 机器学习实战——房价预测完整案例(建议收藏慢慢品)

    文章目录 1. 获取数据 * 1.1 查看数据结构 2. 划分测试集 3. 可视化获取更多信息 4. 寻找相关性 5. 属性组合 6. 数据处理 * 6.1 数据清洗 6.2 处理…

    Python 2023年7月31日
    0166
  • stm32F103C8T6通过写寄存器点亮LED灯

    因为我写寄存器的操作不太熟练,所以最近腾出时间学习了一下怎么写寄存器,现在把我的经验贴出来,如有不足请指正 我使用的板子是stm32F103C8T6(也就是最常用的板子),现在要通…

    Python 2023年6月6日
    065
  • 随笔荟萃 | sincerity

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 Original: https://blo…

    Python 2023年9月28日
    046
  • python脚本crontab执行坑

    大概会出现这样的情况。 Python xxx.py 跑的好好的。然后用crontab去执行Python就会发现报错。比如我遇到的这种报错是 主要是有诸多的报错,最开始没有注意到这个…

    Python 2023年10月31日
    037
  • Python笔记(4)——元组(Python编程:从入门到实践)

    Python笔记(4)——元组(Python编程:从入门到实践) 【元组】:这里介绍了什么是元组的部分知识 元组 元组:不可变的列表。 元组一经创建不能被修改。 表示:用 圆括号(…

    Python 2023年10月29日
    038
  • django中聚合函数查询和分组聚合查询

    聚合函数:Max,Min,Count首字母都要大写,且后面的参数加 ‘ ‘ 号,不然会报错,还有就是,如果是Count(‘ )的话,需要加个别名…

    Python 2023年6月11日
    067
  • 图像轮廓处理

    1、轮廓提取 轮廓提取是提取出图像的外部轮廓特征,轮廓可能是边缘的一部分。 2、轮廓提取方法及Python实现 2.1 掏空内部点法 掏空内部点法的原理非常简单:如果原图中有一点为…

    Python 2023年10月24日
    043
  • tracing

    tracing:通过元数据span context (traceid spanid 父级spanid span_context )传播达到跟踪链路,具体来说 【服务调用者】在请求h…

    Python 2023年6月6日
    049
  • 跟我学Python图像处理丨带你掌握傅里叶变换原理及实现

    摘要:傅里叶变换主要是将时间域上的信号转变为频率域上的信号,用来进行图像除噪、图像增强等处理。 本文主要讲解图像傅里叶变换的相关内容,在数字图像处理中,有两个经典的变换被广泛应用—…

    Python 2023年10月21日
    044
  • 数值分析基础-pandas(2)

    1、对以下数据使用pandas进行数据提取或者数据筛选。df=pd.DataFrame({“id”:[1001,1002,1003,1004,1005,10…

    Python 2023年8月22日
    050
  • dataframe.to_sql() 一次性插入过多报错

    利用to_sql()方法 将dataframe 中的数据插入数据库;之前用的都没问题,这次突然报错, system error: 10054 远程主机强迫关闭了一个现有的连接。 刚…

    Python 2023年5月24日
    058
  • Numpy练习(50-100)

    参考Numpy50-100题目,有一两个没有调试出来,有的理解也不透彻。 有理解错误的地方望评论指正。 ps:编译器使用的Jupyter,有时候编译跟pycharm不同,大家可以参…

    Python 2023年8月27日
    033
  • 图像超分——Real-ESRGAN快速上手

    契源 想必每个自媒体行业从业者都面临过这样一种情况:从网络上找到一张素材做封面,然而素材图片往往太模糊。那么,有没有办法对其进行高清修复呢?这就是计算机视觉领域的子领域 图像超分所…

    Python 2023年9月30日
    039
  • python中numpy的基本用法

    一.数组的创建 首先导入模块 import numpy as np 1. Numpy提供了array()函数,用来创建数组,创建一维和二维数组,多维数组的创建形式是一样的 arr1…

    Python 2023年8月23日
    038
  • plt.函数

    1 plt.figure () :创建画布 plt.figure(num=None, figsize=None, facecolor=None, edgecolor=None, c…

    Python 2023年9月30日
    035
  • # yyds干货盘点 # Python多进程中传入的target参数函数带括号和不带括号的区别

    大家好,我是皮皮。 一、前言 昨天在Python钻石交流群【Annabel lee】问了一个​ ​Python​​多进程的问题,下图是讨…

    Python 2023年5月24日
    062
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球