目录
一、算法作用
1、剔除相关性和降维:因子分析主要是根据相关性大小大小把原始变量分组,使得组内的变量间相关性较高,不同的组变量间的相关性较低,通过将原始变量提取出少量的公共因子,通过少量的公共因子来解释原来多变量代表的问题。
2、对变量或样本分类处理:在得出因子的表达式之后,可以把原始变量的数据代入表达式得出因子得分值,根据因子得分在因子所构成的空间达到分类的目的。
二、案例
1、关于数据
本次案例使用的数据来自陈哲老师《活用数据》STP分析案例解释中的部分数据,数据在
博文python因子分析中使用的数据-数据集文档类资源-CSDN下载
数据是来源于对客户生活状态9个方面的问题调查统计数据,9个问题之间从问题描述看可能存在相关性,数据之间存在相关性会造成重叠信息扩大化,增加分类的偏差,因此需要剔除语句之间的相关,剔除的方法就是本文要使用的因子分析。
读入数据
import pandas as pd
file = "data_of_life_atitude.xlsx"
f= pd.read_excel(file,header=1)#从第二行开始读数据,因为第一行是变量名称不能进行标准化
2、数据标准化
在处理数据之前一般会对数据进行预处理,将不同规格的数据转换到同一规格,使用的最多的方式是Z分数标准化,即减去均值除以方差的方式。在python中可以直接调用StandarScaler
from sklearn.preprocessing import StandardScaler
data = StandardScaler().fit_transform(data)
3、适用性检验
适用性检验主要是检验数据是否可以使用因子分析,因为因子分析的前提是原始维度之间具有相关性,因此适用性检验就是检验原始维度之间是否具有相关性,如果不相关则不适合做因子分析。
3.1 KMO和Bartlett球形检验
主要用的到的方法是KMO和Bartlett球形检验,其中Bartlett球形检验用于检验变量之间是否相关独立,如果p值小于0.05则适合做因子分析;
KMO用于检验变量之间的相关性取值在0-1之间,值越大相关性越强。
可以直接在python因子库中调用,使用之前需要先安装对应的库。
from factor_analyzer import FactorAnalyzer, calculate_kmo, calculate_bartlett_sphericity
kmo = calculate_kmo(f)
bartlett = calculate_bartlett_sphericity(f)
if kmo[1] >=