因子分析(factor analysis)
因子分析
- 基本思想
- 公式推导
- 基于R的实验
- 结论
基本思想
在这一讲当中呢,我们谈一谈,因子分析(factor analysis),在上一节当中,我们说了主成分分析,我们说这两种方法有点相似,初学者往往有些搞不清楚。首先从原理上说,主成分分析是试图寻找原有自变量的一个线性组合。这个组合方差要大,那么携带的信息也就多,也就是相当于把原始数据的主要成分给拿了出来。而因子分析呢,是从假设出发,它是假设所有的自变量
analysis)。另一个是验证性因子分析(confirmatory factor
analysis)。探索性因子分析是不确定一堆自变量背后有几个因子,我们通过这种方法试图寻找到这几个因子。而验证性因子分析是已经假设自变量背后有几个因子,试图通过这种方法去验证一下这种假设是否正确。验证性因子分析又和结构方程模型有很大关系。后面我们会专门的介绍,今天先介绍探索性因子分析。
数学推导
因子分析假设自变量
如果为了方便呢,我们可以把它写成矩阵代数的形式如下:
这里呢,需要加一些假设,否则没法求解。首先是无关于误差项
进一步有
所以
这样的话,对上式两边取数学期望。利用误差项均值为
这里还需要一个假设,那就是因子的协方差矩阵为单位矩阵。也就可以得到下式
这样的话,就简明了一些,我们主要是为了求载荷矩阵
下面给出一个基于R的因子分析
基于R的因子分析
数据介绍:数据是来自上市公司的财务指标,因此想通过因子分析将财务指标进降维,希望提取出一些反应不同特征的因子出来。最后根据因子对上市公司进行排名。
#设置路径
setwd('D:/Rdata')
#清除空间变量
rm(list = ls())
#载入读取excel的包
library(readxl)
library(psy)
#读取数据
dat.fact <- read_excel(file='MicEcoData.xlsx')
head(dat.fact)
# A tibble: 6 x 8
资产负债率 总资产增长率B 基本每股收益增长率B 净利润增长率B 营业利润增长率B 每股收益 每股营业收入
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0.950996 0.324008 0.044776 0.026753 0.056436 0.7000 2.054515
2 0.552744 0.473920 0.315789 0.773855 0.799483 0.2500 0.379673
3 0.068507 1.966211 0.417778 1.195843 1.199118 0.1276 0.251927
4 0.580620 0.338351 1.479791 2.792940 2.749402 0.1902 0.296074
5 0.389105 0.083378 -0.250000 -0.224369 -0.177181 0.0600 0.153072
6 0.755508 0.061588 -0.444444 0.435094 0.435804 0.0500 0.206344
# ... with 1 more variables: 销售净利率 <dbl>
#重新命个名
names(dat.fact) <- paste('x', 1:ncol(dat.fact), sep='')
#进行因子分析,设置因子个数为两个
factor.result <- factanal(x=dat.fact, factor=2, scores="regression")
#查看图
psy::scree.plot(dat.fact)
#查看因子分析的各种结果
names(factor.result)
[1] "converged" "loadings" "uniquenesses" "correlation" "criteria" "factors"
[7] "dof" "method" "rotmat" "scores" "STATISTIC" "PVAL"
[13] "n.obs" "call"
print(factor.result)
Call:
factanal(x = dat.fact, factors = 2, scores = "regression")
Uniquenesses:
x1 x2 x3 x4 x5 x6 x7 x8
0.508 0.005 0.005 0.005 0.005 0.281 0.507 0.710
Loadings:
Factor1 Factor2
x1 0.695
x2 0.997
x3 0.997
x4 0.998
x5 0.998
x6 0.846
x7 0.702
x8 0.251 -0.476
Factor1 Factor2
SS loadings 4.054 1.931
Proportion Var 0.507 0.241
Cumulative Var 0.507 0.748
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 357.17 on 13 degrees of freedom.
The p-value is 2.4e-68
>
效果还可以,哪几个变量属于哪个因子一目了然。
下面呢,我们做个更有意思的分析,现在经过因子分析已经将原来的8个财务指标进行合并,形成了两个因子,那么这两个因子按照加权合并,就形成了一个指标,通过对这一个指标进行排序,就可以得到上市公司的排名。下面是代码实现
# 计算权重
lambdas <- eigen(factor.result$correlation)$value # 就是特指值所占的比例
(w <- lambdas[1:2]/sum(lambdas[1:2]))
0.6391052 0.3608948
#计算因子得分
score <- factor.result$scores
eva <- score %*% w # 进行排序
eva
[,1]
[1,] 0.44919649
[2,] -0.21418681
[3,] -0.47822650
[4,] -0.22218907
[5,] -0.45469601
[6,] -0.31123904
[7,] -0.33324507
[8,] -0.31634880
[9,] 0.16510054
[10,] 0.19619702
结论
本节带领大家了解了一下,因子分析。通过因子分析主要发掘变量背后存在的潜变量。并且提到了主成分分析与因子分析的不同,主成分分析主要是想寻找原始特征的一个线性组合。这个组合方差要最大。方差最大保证了主要成分的提取。为了计算方便,提出了一些假设,使得主成分分析成为了一个约束优化问题。而因子分析呢,是从假设开始入手,假设原始特征是由于因子的影响产生的,因此可以写出
上一篇: Impala 性能调优 总结
下一篇: impala架构零差错安装攻略
推荐阅读
-
使用 Excel Services ,结合 Analysis Services 在 SharePoint 中发布报表
-
SQL2000 Analysis Manager控制台乱码解决
-
Python中的相关分析correlation analysis的实现
-
2018-11-26 BIG DATA ANALYSIS
-
R语言 Factor类型的变量使用说明
-
R语言 实现将factor转换成numeric方法
-
Learning notes | Data Analysis: 1.1 data evaluation
-
12-Factor与云原生
-
PCA(主成分分析)和FA(因子分析)的详解新手必看
-
HDU 2710 Max Factor