因子分析(factor analysis)因子分析的一般步骤factor_analyzer模块进行因子分析使用Python实现因子分析初始化构建数据将原始数据标准化处理 X计算相关矩阵C计算相关矩阵C的特征值  和特征向量   确定公共因子个数k构造初始因子载荷矩阵A建立因子模型将因子表示成变量的线性组合.计算因子得分.

因子分析(factor analysis)

是指研究从变量群中提取共性因子的统计技术。因子分析是简化、分析高维数据的一种统计方法。

因子分析又存在两个方向,一个是探索性因子分析(exploratory factor analysis)。另一个是验证性因子分析(confirmatory factor analysis)。

探索性因子分析是先不假定一堆自变量背后到底有几个因子以及关系,而是我们通过这个方法去寻找因子及关系。

验证性因子分析是假设一堆自变量背后有几个因子,试图验证这种假设是否正确。

因子分析有两个核心问题,一是如何构造因子变量,二是如何对因子变量进行命名解释。

因子分析的一般步骤

  1. 将原始数据标准化处理 X

  2. 计算相关矩阵C

  3. 计算相关矩阵C的特征值 r 和特征向量 U

  4. 确定公共因子个数k

  5. 构造初始因子载荷矩阵,其中U为r的特征向量

  6. 建立因子模型

  7. 对初始因子载荷矩阵A进行旋转变换,旋转变换是使初始因子载荷矩阵结构简化,关系明确,使得因子变量更具有可解释性,如果初始因子不相关,可以用方差极大正交旋转,如果初始因子间相关,可以用斜交旋转,经过旋转后得到比较理想的新的因子载荷矩阵A'.

  8. 将因子表示成变量的线性组合,其中的系数可以通过最小二乘法得到.

  9. 计算因子得分.

factor_analyzer模块进行因子分析

算法核心:
对若干综合指标进行因子分析并提取公共因子,再以每个因子的方差贡献率作为权数与该因子的得分乘数之和构造得分函数。

import pandas as pdimport numpy as npfrom pandas import DataFrame,Seriesfrom factor_analyzer import FactorAnalyzer

import warningswarnings.filterwarnings("ignore")

使用Python实现因子分析

初始化构建数据

#构建数据集data=pd.DataFrame(np.random.randint(50,100,size=(5, 10)))data.columns=["特征1","特征2","特征3","特征4","特征5","特征6","特征7","特征8","特征9","特征10"]data.index=['对象1','对象2','对象3','对象4','对象5']
#查看数据data.head(3)

将原始数据标准化处理 X

data=(data-data.mean())/data.std() # 0均值规范化
data

计算相关矩阵C

C=data.corr() #相关系数矩阵
C

计算相关矩阵C的特征值    和特征向量

import numpy.linalg as nlg #导入nlg函数,linalg=linear+algebra

eig_value,eig_vector=nlg.eig(C) #计算特征值和特征向量

eig=pd.DataFrame() #利用变量名和特征值建立一个数据框

eig['names']=data.columns#列名

eig['eig_value']=eig_value#特征值
eig

确定公共因子个数k

from math import sqrt

for k in range(1,11): #确定公共因子个数    if eig['eig_value'][:k].sum()/eig['eig_value'].sum()>=0.8: #如果解释度达到80%, 结束循环        print(k)        break
3
eig['eig_value'][:3].sum()/eig['eig_value'].sum()
(0.9013148087274826+0j)

构造初始因子载荷矩阵A

col0=list(sqrt(eig_value[0])*eig_vector[:,0]) #因子载荷矩阵第1列col1=list(sqrt(eig_value[1])*eig_vector[:,1]) #因子载荷矩阵第2列col2=list(sqrt(eig_value[2])*eig_vector[:,2]) #因子载荷矩阵第3列A=pd.DataFrame([col0,col1,col2]).T #构造因子载荷矩阵AA.columns=['factor1','factor2','factor3'] #因子载荷矩阵A的公共因子
A

建立因子模型

h=np.zeros(10) #变量共同度,反映变量对共同因子的依赖程度,越接近1,说明公共因子解释程度越高,因子分析效果越好

D=np.mat(np.eye(10))#特殊因子方差,因子的方差贡献度 ,反映公共因子对变量的贡献,衡量公共因子的相对重要性

A=np.mat(A) #将因子载荷阵A矩阵化
for i in range(10):    a=A[i,:]*A[i,:].T #行平方和    h[i]=a[0,0]  #计算变量X共同度,描述全部公共因子F对变量X_i的总方差所做的贡献,及变量X_i方差中能够被全体因子解释的部分    D[i,i]=1-a[0,0] #因为自变量矩阵已经标准化后的方差为1,即Var(X_i)=第i个共同度h_i + 第i个特殊因子方差

将因子表示成变量的线性组合.

from numpy import eye, asarray, dot, sum, diag #导入eye,asarray,dot,sum,diag 函数from numpy.linalg import svd #导入奇异值分解函数

def varimax(Phi, gamma = 1.0, q =10, tol = 1e-6): #定义方差最大旋转函数    p,k = Phi.shape #给出矩阵Phi的总行数,总列数    R = eye(k) #给定一个k*k的单位矩阵    d=0    for i in range(q):        d_old = d        Lambda = dot(Phi, R)#矩阵乘法

        u,s,vh = svd(dot(Phi.T,asarray(Lambda)**3 - (gamma/p) * dot(Lambda, diag(diag(dot(Lambda.T,Lambda)))))) #奇异值分解svd

        R = dot(u,vh)#构造正交矩阵R

        d = sum(s)#奇异值求和

    if d_old!=0 and d/d_old:        return dot(Phi, R)#返回旋转矩阵Phi*R

rotation_mat=varimax(A)#调用方差最大旋转函数rotation_mat=pd.DataFrame(rotation_mat)#数据框化
rotation_mat

计算因子得分.

data=np.mat(data) #矩阵化处理

factor_score=(data).dot(A) #计算因子得分

factor_score=pd.DataFrame(factor_score)#数据框化

factor_score.columns=['因子A','因子B','因子C'] #对因子变量进行命名factor_score#factor_score.to_excel(outputfile)#打印输出因子得分矩阵

喜欢分享or

python vector变量_用Python实现因子分析相关推荐

  1. python 定义变量_用python解决动态的定义变量名(并给其赋值方法:大数据处理)...

    前言: 今天为大家带来的内容是:用python解决动态的定义变量名(并给其赋值方法:大数据处理)具有很好的参考价值,希望对大家有所帮助.喜欢本文内容的记得点赞转发收藏不迷路哦!!! 最近消费kafka ...

  2. python保存变量_将python 中的变量保存到本地

    如何将python中的变量保存在本地? 将python 的一些代码保存在本地, 特别是一些需要大量运算的结果,例如 机器学习里面的模型,,放在本地,还是比较好用的.下次就可以直接拿出来使用就好. 其实 ...

  3. python 查看变量_剖析python运算符is和==的区别

    is和==这两个运算符一直是困扰python的初学者,它们都可以用来判断某个对象是否是某个值,那么到底什么时候用is,什么时候用==去判断某个对象是否是某个值哪?下面勇哥结合实例给大家分享下两者的区别 ...

  4. python传递变量_在Python中传递变量

    您需要将read_one_file()的结果存储在某个地方.你到底是什么 处理return语句就是创建结果的元组.那么你呢 当你调用read_one_file时,必须解包这个元组.下面是一个例子:(i ...

  5. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  6. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  7. python 定义变量_第三章(第2节):变量和常量

    变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型,比如我们上节课刚刚学过的基本数据类型或者我们后面要学的自定义数据类型. 所谓常量就是不能改变 ...

  8. 关于python变量_关于python变量练习题

    第一题(数字相加) age=20 new_age=age+1 print(new_age) 第二题(字符串相加) name='xiu' new_name=name+'hb' print(new_nam ...

  9. python设置环境变量_小白Python进行中

    一.安装 安装包的下载 在官网进行下载,我选用Python3.8.0. Welcome to Python.org​www.python.org 安装 安装的时候可以借鉴该视频. Windows 10 ...

最新文章

  1. 谢文睿:西瓜书 + 南瓜书 吃瓜系列 2. 多元线性回归
  2. Java 8 中的这个接口真好用!
  3. MySQL中MySQL X.X Command Line Client一闪而过的问题
  4. excel实战应用案例100讲(十五)-在Excel中对Python进行操作完美工具PyXLL-Jupyter
  5. 信息安全学习路线图_Python学习图谱:学习到困惑的时候可以参考的图谱
  6. 一致性哈希的分析与实现
  7. 配置Ubuntu系统环境变量
  8. OpenGL和OpenCV的区别
  9. ASP.NET DROPDOWNLIST无刷新联动(中文URL参数处理)
  10. 微信小程序Axure元件库
  11. 3d建模渲染效果图步骤
  12. 4米乘以12米CAD图_【超干货】CAD铺装排版下料之路径阵列
  13. JavaScript设计模式 - 适配器模式
  14. 网站被劫持的方式,和检测方法、网站被劫持、检测方法有哪些
  15. 蘑菇街面经(自己的第一次秋招面试)
  16. 通过瑞利判据对显微镜物镜进行分辨率研究
  17. 【航天物流组参赛ReadMe.md】
  18. ORACLE APEX-下载-利用插件
  19. php 获取 ip 并根据 ip 获取地理位置
  20. HihoCoder - 1272 买零食

热门文章

  1. pymongo简单操作
  2. Solrflux源码分析-Sql Support within Solr-类Sql的solr搜索实现(2)
  3. android-手势-基础知识总结
  4. 电脑连接示波器读取数据
  5. 异常已存在具有相同键的条目。_灵敏度高,却已停产——山进PR-D3Plus DX收音机评测...
  6. 剑指offer面试题[49]-把字符串转化为整型
  7. 25岁房贷上万濒临失业,大专小哥转行软件测试“挽救”人生
  8. 开源中国大佬是怎么用Selenium做自动化web测试的
  9. vb6 判断打印机是否有效_针式打印机,常见小问题,这里看一看,或许能帮你...
  10. 计算机在车联网的应用,刘小洋, 伍民友. 车联网: 物联网在城市交通网络中的应用[J]. 计算机应用, 2012, 32(4): 900-904....