Python 多元统计分析 因子分析
时间: 2025-05-31 07:49:20 浏览: 24
### 使用Python实现多元统计分析中的因子分析
因子分析是一种常用的降维技术,旨在通过较少数量的潜在变量(称为公因子)来解释观测变量之间的协方差结构。以下是基于Python实现因子分析的具体方法。
#### 1. 所需库
为了进行因子分析,可以使用`factor_analyzer`库[^2]。该库提供了丰富的功能,能够完成因子提取、旋转以及评估模型质量的任务。
安装所需库:
```bash
pip install factor-analyzer pandas numpy matplotlib seaborn statsmodels scikit-learn
```
#### 2. 示例代码
以下是一个完整的因子分析流程示例:
##### (1)导入必要的库
```python
import pandas as pd
import numpy as np
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity, calculate_kmo, FactorAnalyzer
import seaborn as sns
import matplotlib.pyplot as plt
```
##### (2)加载数据
假设我们有一个CSV文件作为输入数据源。
```python
# 加载数据
data = pd.read_csv('your_dataset.csv')
# 查看前几行数据
print(data.head())
```
##### (3)初步检验——KMO测度和Bartlett球形检验
在执行因子分析之前,通常需要验证数据是否适合此类分析。
```python
# KMO 测度
kmo_all, kmo_model = calculate_kmo(data)
if kmo_model >= 0.6:
print(f"KMO Model: {kmo_model:.2f} —— 数据适合作因子分析")
else:
print(f"KMO Model: {kmo_model:.2f} —— 数据可能不适合作因子分析")
# Bartlett 球形检验
chi_square_value, p_value = calculate_bartlett_sphericity(data)
if p_value < 0.05:
print(f"Bartlett's Test: Chi-Square={chi_square_value}, P-value={p_value:.4f} —— 可以拒绝单位阵假设")
else:
print(f"Bartlett's Test: Chi-Square={chi_square_value}, P-value={p_value:.4f} —— 无法拒绝单位阵假设")
```
##### (4)初始化FactorAnalyzer对象并提取因子
设定参数如`n_factors`(要提取的因子数)、`rotation`(旋转方式),并通过PCA或最小残差法提取因子。
```python
fa = FactorAnalyzer(rotation="varimax", n_factors=3, method='principal')
fa.fit(data)
# 输出特征根
ev, _ = fa.get_eigenvalues()
print("Eigenvalues:", ev)
# 提取负载矩阵
loadings = fa.loadings_
pd.DataFrame(loadings, columns=[f"Factor{i+1}" for i in range(3)], index=data.columns)
```
##### (5)可视化结果
可以通过热力图直观展示因子负载情况。
```python
plt.figure(figsize=(10, 8))
sns.heatmap(pd.DataFrame(loadings), annot=True, cmap="coolwarm", fmt=".2f")
plt.title("Factor Loadings Heatmap")
plt.show()
```
#### 3. 结果解读
- **因子负载**:表示每个原始变量与所提取因子的相关程度。高绝对值意味着强关联。
- **共同度**:反映某个变量被公共因子解释的比例大小。
- **特殊方差**:未由公共因子解释的部分。
---
### 注意事项
- 如果样本量较小或者变量间缺乏足够的相关性,则可能导致不理想的因子分解效果[^2]。
- 需谨慎选择合适的因子数目,可通过碎石图辅助判断[^3]。
---
### 性能比较与其他工具的选择
相较于其他语言(例如R),Python的优势在于其强大的生态系统支持复杂的后续操作,比如将因子得分嵌入到机器学习管道中进一步建模[^4]。然而,在某些特定领域(如学术出版物生成标准格式表格方面),R仍占据一定优势[^4]。
---
阅读全文
相关推荐


















