因子分析python实操

参考文章:https://blog.csdn.net/qq_41081716/article/details/103332472

1.kmo检验和bartlett球形检验

#因子分析
df2 = data.iloc[:,[364,365,366,367,368,369,370,371]]
df2 = df2.astype(float)  #df2的dtype是object,如果不转成float,相关系数矩阵是出不来的
df2_corr = df2.corr()
print("\n相关系数:\n",df2_corr)
kmo = calculate_kmo(df2)  # kmo值要大于0.7
bartlett = calculate_bartlett_sphericity(df2)  # bartlett球形度检验p值要小于0.05
print("\n因子分析适用性检验:")
print('kmo:{},bartlett:{}'.format(kmo[1], bartlett[1]))    #不知道为什么是kmo[1]和bartlett[1],但查了好多人都是这么做的,姑且就当他是对的吧  实验:print(kmo[0])和print(kmo)的效果是一样的,出来一个数组,我不太明白里面的含义;而print(kmo[2])则out of range了
print(bartlett[1]<0.05)   #输出为True则通过球形检验。

2.获取因子载荷矩阵

fa = FactorAnalyzer(rotation=None, n_factors=8, method='principal')
fa.fit(df2)
fa_8_sd = fa.get_factor_variance()   #fa_8_sd是一个array嵌套三个array,这三个小array中分别就是下面的特征值、方差贡献率、方差累计贡献率,感兴趣可以自己print看看
fa_8_df = pd.DataFrame(
    {'特征值': fa_8_sd[0], '方差贡献率': fa_8_sd[1], '方差累计贡献率': fa_8_sd[2]})
 
#各个因子的特征值以及方差贡献率
print("\n",fa_8_df)

解释一下Factoranalyzer,可以结合help来食用。
rotation:因子旋转的方法,=None就是不进行因子旋转,'varimax’为方差最大旋转法,此外还有’quartimax’及’equamax’等多种方法,在另一篇文章中略有介绍。
n_factors : int, optional
The number of factors to select.
Defaults to 3.
n_factors参数是公共因子的数量,默认为3。

method : {‘minres’, ‘ml’, ‘principal’}, optional
The fitting method to use, either MINRES or
Maximum Likelihood.
Defaults to ‘minres’.
method参数大概影响的是拟合的方式?也就是我们另一篇文章中提到过的
在这里插入图片描述
一般选择’principal’,即上图所述的主成分分解。

| impute : {‘drop’, ‘mean’, ‘median’}, optional
| If missing values are present in the data, either use
| list-wise deletion (‘drop’) or impute the column median
| (‘median’) or column mean (‘mean’).
impute参数如英文所示,影响缺失值的处理方法。
差不多就是这样了,其他参数一般用不上,需要了再自己help看看。

以上代码输出结果:
在这里插入图片描述
可以看到kmo值和bartlett球形检验是通过的,并且0~4一共五个因子的方差累计贡献率在0.85以上,所以等等设定公共因子数量为5个。


#公因子数设为5个,重新拟合
fa_5 = FactorAnalyzer(rotation=None, n_factors=5, method='principal')
fa_5.fit(df2)
 
#查看公因子提取度
print("\n公因子提取度:\n",fa_5.get_communalities())
 
#查看因子载荷
print("\n因子载荷矩阵:\n",fa_5.loadings_)
 
#使用最大方差法旋转因子载荷矩阵
fa_5_rotate = FactorAnalyzer(rotation='varimax', n_factors=5, method='principal')
fa_5_rotate.fit(df2)
 
#查看旋转后的因子载荷
print("\n旋转后的因子载荷矩阵:\n",fa_5_rotate.loadings_)
print(data.columns[364:372])

输出结果:
在这里插入图片描述

查看公因子的提取度,发现当使用5个公因子时,5个公因子对8个维度的解释率都超过0.6,说明提取的5个公因子对原始维度有一定的解释力。
而旋转之后得到的因子载荷矩阵,据说是系数>0.5才能取?

因子得分的部分很简单,参考开头那篇文献即可,并配合自己的代码中的注释。但要注意的是我的代码是先对各个得分进行标准化后,再加权计算得到综合得分,因此是魔改版本。所以总的来说还是参考开头文献。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中进行因子分析可以使用多种库,比如: 1. `factor_analyzer`:这是一个专门用于因子分析Python库,它提供了主成分分析、最大方差旋转、最小残差旋转等多种因子分析方法。 2. `scikit-learn`:这是一个广泛使用的Python机器学习库,其中包含PCA方法,可以用于主成分分析。 3. `statsmodels`:这是一个用于统计建模的Python库,它提供了因子分析和主成分分析的功能。 下面以 `factor_analyzer` 库为例,演示如何进行因子分析: 首先需要安装 `factor_analyzer` 库: ``` pip install factor_analyzer ``` 然后,假设我们有一个数据集 `data`,其中包含了若干个变量,我们想对这些变量进行因子分析,可以按照以下步骤进行: ``` python from factor_analyzer import FactorAnalyzer import pandas as pd # 读取数据 data = pd.read_csv('data.csv') # 构建因子分析模型 fa = FactorAnalyzer(n_factors=3, rotation='varimax') # 运行因子分析 fa.fit(data) # 查看因子载荷 print(fa.loadings_) ``` 在上面的代码中,我们首先使用 `pandas` 库读取了数据集 `data`,然后使用 `FactorAnalyzer` 类构建了一个因子分析模型,其中 `n_factors` 参数指定了因子的个数,`rotation` 参数指定了旋转方法。接着,我们使用 `fit` 方法对数据进行因子分析,最后使用 `loadings_` 属性查看因子载荷。 除了上面的示例,`factor_analyzer` 库还提供了很多其他的参数和方法,比如可以使用 `scree plot` 方法选择因子个数,可以使用 `Cronbach's alpha` 方法计算内部一致性等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值