因子分析类

factor-analyzer的Python项目详细描述


工厂分析器

Build statushttps://coveralls.io/repos/github/EducationalTestingService/factor_analyzer/badge.svg?branch=masterhttps://anaconda.org/desilinguist/factor_analyzer/badges/installer/conda.svg

这是一个python模块,用于执行探索性和因素分析(efa),其中有几个 可选旋转。它还包括一个类来执行确认因子 分析(CFA),具有某些预定义的约束。在指数因子分析中, 可以使用各种估计技术来执行因子提取。这个 factor_analyzer包允许用户至少使用(1)个 残差(MILRESs)解,(2)最大似然(ML)解,或(3)主元 因子解。然而,cfa只能使用ml溶液进行。

这个包中的efa和cfa类都与scikit learn完全兼容。 部分代码从优秀的r库psychsem移植而来。 包装为CFA课程提供了灵感。

请参阅official documentation了解更多详细信息。

说明

探索性因素分析(EFA)是一种用于 识别一组观测变量之间的潜在关系 数据集。特别是,efa试图建立一个观察到的 变量是一些未观测到的较小集合的线性组合, 潜在因素。生成的权重矩阵或因子载荷 从一个efa模型描述了 变量和潜在因素。

验证性因素分析(cfa)是一种密切相关的技术。 用于检验集合之间潜在关系的先验假设 观察到的变量。在cfa中,研究人员指定了预期的模式 因子加载(可能还有其他约束),并根据 符合本规范。

通常,在EFA或CFA模型中选择若干因子(k) 这样它就大大小于变量的数目。这个 因子分析模型可以使用多种标准进行估计 估计方法,包括但不限于minres或ml。

因子负荷与标准回归系数相似,且 对某一特定因素具有较高负荷的变量可以解释为 解释了这个因素变化的更大比例。在 对于efa,因子加载矩阵通常在因子之后旋转 分析模型是为了产生一个更简单,更易于解释的 结构以确定哪些变量加载到特定因子上。

两种常见的旋转类型是:

  1. 旋转varimax旋转因子加载矩阵,从而 为了最大化平方载荷方差的和,而 保持加载矩阵的正交性。
  2. promax旋转,一种用于斜旋转的方法,它构建 在varimax旋转时,但最终允许因子 相关的。

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

以下旋转选项在^{tt3}中都可用$ 以及Rotator

  1. varimax (orthogonal rotation)
  2. promax (oblique rotation)
  3. oblimin (oblique rotation)
  4. oblimax (orthogonal rotation)
  5. quartimin (oblique rotation)
  6. quartimax (orthogonal rotation)
  7. equamax (orthogonal rotation)

此外,包还包括一个confirmatory_factor_analyzer 具有独立ConfirmatoryFactorAnalyzer类的模块。这个 类包括fit()transform(),它们允许用户执行 验证性因素分析,并使用拟合模型评分新数据。 执行cfa要求用户预先指定一个模型规范 与预期的因子加载关系。这可以用 ModelSpecificationParser类。

示例

探索性因素分析实例。

In[1]:importpandasaspd...:fromfactor_analyzerimportFactorAnalyzerIn[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]:importpandasaspdIn[2]:fromfactor_analyzerimport(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.4或更高版本
  • ^{tt(TT)14}$
  • pandas
  • scipy
  • scikit-learn

贡献

非常欢迎向factor_analyzer捐款。请提出问题 在github上,或者联系jbiggs@ets.org如果您想贡献。

安装

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

$ pip install factor_analyzer

或者,您也可以通过conda安装:

$ conda install -c ets factor_analyzer

许可证

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用Selenium Webdriver的java IE浏览器:“驱动程序可执行文件是一个目录”   初学者Java多线程问题   java使用lambdas从映射返回前n个元素   如何使用JavaSpringBoot检测方法post中保存的重复值   java MarginLeft不起作用:为什么?   java Excel文件在写入后已损坏   类中从方法到字符串的java字符串   java JavaFX线条图颜色差异   java将整型数组列表展平   java内容显示在带有自定义单元格工厂的空行中   java顺时针旋转链表   java将负JOOQ YearToSecond对象转换为毫秒的正确方法   java Android:如何实现可打包到我的对象?   java如何使用retrofi获取基于id的详细信息