跳转到主要内容

使用Python编写的因子分析工具

项目描述

FactorAnalyzer

Build status Code coverage Conda version PyPI version Docs Pre-commit checks

这是一个Python模块,用于执行探索性因子分析(EFA)和验证性因子分析(CFA),具有多种可选旋转。它还包括一个用于执行具有某些预定义约束的CFA的类。在探索性因子分析中,可以使用各种估计技术执行因子提取。factor_analyzer包允许用户使用以下方式之一执行EFA:(1)最小残差(MINRES)解,(2)最大似然(ML)解或(3)主成分解。然而,CFA只能使用ML解执行。

此包中的EFA和CFA类都与scikit-learn完全兼容。部分代码是从优秀的R库psych移植的,sem包为CFA类提供了灵感。

有关更多信息,请参阅官方文档

描述

探索性因子分析(EFA)是一种统计技术,用于识别数据集中观察到的变量集合之间的潜在关系。特别是,EFA试图将大量观察到的变量建模为一些较小未观察到的潜在因素的一组线性组合。EFA模型生成的权重矩阵,或因子负荷矩阵,描述了每个变量与潜在因素之间的基本关系。

验证性因子分析(CFA)是一种与之密切相关的技术,用于检验观察到的变量集合之间潜在关系的先验假设。在CFA中,研究人员指定期望的因子负荷模式(以及可能的约束条件),并根据此规格拟合模型。

通常,EFA或CFA模型中选择的因素数量(K)要远小于变量的数量。可以使用各种标准估计方法估计因子分析模型,包括但不限于MINRES或ML。

因子负荷类似于标准化回归系数,在某个特定因素上的负荷较高的变量可以解释为解释该因素变异的比例更大。在EFA的情况下,因子负荷矩阵通常在估计因子分析模型后进行旋转,以产生更简单、更可解释的结构,以确定哪些变量在加载特定因素。

两种常见的旋转类型是

  1. 方差最大化旋转(varimax),该旋转将因子负荷矩阵旋转到最大化平方负荷的方差,同时保持负荷矩阵的正交性。

  2. 斜交旋转(promax),这是一种斜交旋转的方法,建立在方差最大化旋转的基础上,但最终允许因素相关。

此包包括一个名为factor_analyzer的模块,其中包含独立的FactorAnalyzer类。该类包括fit()transform()方法,使用户能够执行因子分析并使用拟合的因子模型对新数据进行评分。用户还可以使用Rotator类对因子负荷矩阵执行可选的旋转。

以下旋转选项在FactorAnalyzerRotator中可用

  1. 方差最大化(正交旋转)

  2. 斜交旋转(promax)

  3. oblimin(斜交旋转)

  4. oblimax(正交旋转)

  5. quartimin(斜交旋转)

  6. quartimax(正交旋转)

  7. equamax(正交旋转)

  8. geomin_obl(斜交旋转)

  9. geomin_ort(正交旋转)

此外,该包还包括一个名为confirmatory_factor_analyzer的模块,其中包含独立的ConfirmatoryFactorAnalyzer类。该类包括fit()transform(),使用户能够执行验证性因子分析并使用拟合的模型对新数据进行评分。执行CFA需要用户提前指定一个模型规格,其中包含预期的因子负荷关系。这可以使用ModelSpecificationParser类完成。

请注意,ConfirmatoryFactorAnalyzer类目前处于非常实验性的状态,因此请谨慎使用,特别是如果您的数据高度非正态。

示例

探索性因子分析示例。

In [1]: import pandas as pd
   ...: from factor_analyzer import FactorAnalyzer

In [2]: df_features = pd.read_csv('tests/data/test02.csv')

In [3]: fa = FactorAnalyzer(rotation=None)

In [4]: fa.fit(df_features)
Out[4]:
FactorAnalyzer(bounds=(0.005, 1), impute='median', is_corr_matrix=False,
               method='minres', n_factors=3, rotation=None, rotation_kwargs={},
               use_smc=True)

In [5]: fa.loadings_
Out[5]:
array([[-0.12991218,  0.16398151,  0.73823491],
       [ 0.03899558,  0.04658425,  0.01150343],
       [ 0.34874135,  0.61452341, -0.07255666],
       [ 0.45318006,  0.7192668 , -0.0754647 ],
       [ 0.36688794,  0.44377343, -0.01737066],
       [ 0.74141382, -0.15008235,  0.29977513],
       [ 0.741675  , -0.16123009, -0.20744497],
       [ 0.82910167, -0.20519428,  0.04930817],
       [ 0.76041819, -0.23768727, -0.12068582],
       [ 0.81533404, -0.12494695,  0.17639684]])

In [6]: fa.get_communalities()
Out[6]:
array([0.5887579 , 0.00382308, 0.50452402, 0.72841182, 0.33184336,
       0.66208429, 0.61911037, 0.73194557, 0.64929612, 0.71149718])

验证性因子分析示例。

In [1]: import pandas as pd

In [2]: from factor_analyzer import (ConfirmatoryFactorAnalyzer,
   ...:                              ModelSpecificationParser)

In [3]: df_features = pd.read_csv('tests/data/test11.csv')

In [4]: model_dict = {"F1": ["V1", "V2", "V3", "V4"],
   ...:               "F2": ["V5", "V6", "V7", "V8"]}
In [5]: model_spec = ModelSpecificationParser.parse_model_specification_from_dict(df_features,
   ...:                                                                           model_dict)

In [6]: cfa = ConfirmatoryFactorAnalyzer(model_spec, disp=False)

In [7]: cfa.fit(df_features.values)

In [8]: cfa.loadings_
Out[8]:
array([[0.99131285, 0.        ],
       [0.46074919, 0.        ],
       [0.3502267 , 0.        ],
       [0.58331488, 0.        ],
       [0.        , 0.98621042],
       [0.        , 0.73389239],
       [0.        , 0.37602988],
       [0.        , 0.50049507]])

In [9]: cfa.factor_varcovs_
Out[9]:
array([[1.        , 0.17385704],
       [0.17385704, 1.        ]])

In [10]: cfa.transform(df_features.values)
Out[10]:
array([[-0.46852166, -1.08708035],
       [ 2.59025301,  1.20227783],
       [-0.47215977,  2.65697245],
       ...,
       [-1.5930886 , -0.91804114],
       [ 0.19430887,  0.88174818],
       [-0.27863554, -0.7695101 ]])

需求

  • Python 3.8或更高版本

  • numpy

  • pandas

  • scipy

  • scikit-learn

贡献

factor_analyzer的贡献非常欢迎。如果您想做出贡献,请在存储库中提交一个问题。

您可以使用以下命令在虚拟环境中安装开发需求

python -m pip install -e .[dev]
pre-commit install

安装

您可以通过以下命令使用pip安装此包

$ pip install factor_analyzer

或者,您可以使用以下命令通过conda进行安装

$ conda install -c ets factor_analyzer

许可

GNU通用公共许可证(> = 2)

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源代码发行版

factor_analyzer-0.5.1.tar.gz (42.8 kB 查看哈希值)

上传时间 源代码

由以下支持