数据分析系列之一因子分析讲解和案例

定义

是指从研究指标相关矩阵内部的依赖关系出发,把一些信息重叠、具有错综复杂关系的变量归结为少数几个不相关的综合因子的一种多元统计分析方法。基本思想是:根据相关性大小把变量分组,使得同组内的变量之间相关性较高,但不同组的变量不相关或相关性较低,每组变量代表一个基本结构一即公共因子。

代码

## 安装命令
pip install numpy pandas factor_analyzer  sklearn
import numpy as np
import pandas as pd
from factor_analyzer import FactorAnalyzer
from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer()
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings("ignore")
# 初始化数据集
df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
df['label'] = cancer.target
print(df.head())
# 充分性检验

# 载入两个检验
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity, calculate_kmo
# Bartlett's球状检验  bartlett值小于或者等于0.01
chi_square_value, p_value = calculate_bartlett_sphericity(df)
print(chi_square_value, p_value)

# 导入kmo检  kmo检验大于0.7,意味着适合因子分析
kmo_all, kmo_model = calculate_kmo(df)
print(kmo_model)

# 选择因子
fa = FactorAnalyzer(25, rotation=None)
fa.fit(df)

ev, v = fa.get_eigenvalues()
print(ev, v)

plt.scatter(range(1, df.shape[1] + 1), ev)
plt.plot(range(1, df.shape[1] + 1), ev)
plt.title('Scree Plot')
plt.xlabel('Factors')
plt.ylabel('Eigenvalue')
plt.grid()
plt.show()

# 3 因子分析
fa = FactorAnalyzer(5, rotation="varimax")
fa.fit(df)
print(fa.loadings_)

# 对结果展示
import seaborn as sns

df_cm = pd.DataFrame(np.abs(fa.loadings_), index=df.columns)

fig, ax = plt.subplots(figsize=(12, 10))
sns.heatmap(df_cm, annot=True, cmap='BuPu', ax=ax)
# 设置y轴字体的大小
ax.tick_params(axis='x', labelsize=15)
ax.set_title("Factor Analysis", fontsize=12)
ax.set_ylabel("Sepal Width")
plt.show()

# 打印结果
print(pd.DataFrame(fa.transform(df)))

因子分析流程

  • 充分性测试
    • Bartlett’s Test
      Bartlett’s球状检验是一种数学术语。用于检验相关阵中各变量间的相关性,是否为单位阵,即检验各个变量是否各自独立
    • Kaiser-Meyer-Olkin Test
      用于比较变量间简单相关系数和偏相关系数的指标。主要应用于多元统计的因子分析。KMO统计量是取值在0和1之间。
  • 选择合适的因子个数
  • 进行因子分析

注意事项

  • kmo检验小于0.5,不建议进行因子分析。
  • 因子分析和主成分分析很像,要注意区分。
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武念

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值