前言 ; K: a2 \# E% j/ s在学习数据降维时,了解到因子分析(FA)算法是其中的一种方式,因此,在这里对因子分析算法做一个简要的归纳、梳理,后续会对数据降维的几种方式做个总结,感兴趣的朋友,可以持续关注。" A. v" s* C G2 a4 \8 z; W
0 y+ y1 E+ n2 q" \) J) r
一、什么是因子分析? ( S9 Y6 ~6 O7 f/ V因子分析法是指: 研究从变量群中提取共性因子的统计技术,这里的共性因子指的是不同变量之间内在的隐藏因子。例如,一个学生的英语、数据、语文成绩都很好,那么潜在的共性因子可能是智力水平高。因此,因子分析的过程其实是寻找共性因子和个性因子并得到最优解释的过程。3 `+ _0 v* h' ^5 f
其基本思想是: 根据相关性大小把变量分组,使得同组内的变量之间相关性较高,但不同组的变量不相关或相关性较低,每组变量代表一个基本结构一即公共因子。 2 \9 e: I8 B: _* R n3 \' G因子分析有两个核心问题: 一是如何构造因子变量,二是如何对因子变量进行命名解释。3 V. {8 v9 s9 e- ?, v8 F
因子分析类型: R型因子分析与Q型因子分析,就像聚类分析分为R型和Q型一样,R型的因子分析是对变量作因子分析,Q型因子分析是对样品作因子分析,本文是以R型因子分析展开。 5 w! U1 G7 ~" Y. s5 c8 H( I" B6 Z' n1 P% t7 y+ ~4 ~
1.1 因子分析应用背景 : ~+ h" J) E# i因子分析用于处理高斯数据,主要应用于以下两种情形:. O0 O. y7 x5 a' R
$ A, Z. s% w' }2 T3 N, K% i
假如有 m 个样本,每个样本的维度是 n, 如果 n » m;这时哪怕拟合出一个高斯模型都很困难,更不用说高斯混合, 为什么呢?其实,这和解多元线性方程组是一样的道理,就是自变量的个数多于非线性相关的方程的个数,这必然导致解的不唯一,虽然在解方程的时候可以随便选一个解满足方程组,但是对于某一实际数据集,往往样本对应的概率分布在客观上都是唯一的,只是我们无法简单地用概率论中的几个典型的分布准确表示出来罢了!; y/ A8 w: i. z
m 个样本的维度都较低。用高斯分布对数据建模,用最大似然估计去估计均值(期望)和方差:+ ~7 Y: Y' g# @& j4 o4 N4 E- G
' g! X8 O1 P* y
我们会发现,协方差矩阵 Σ 是奇异的,即 Σ 不可逆,Σ-1 不存在,且有: 4 Z0 z/ o# D' d l; w$ W0 E6 p: ^! T( ?
但是这两项在计算多元高斯分布时,又都是必不可少的。所以,除非 m 比 n 大一定较合适的数值,否则对方差和均值的最大似然估计将会很难找到正确的值。 4 e) X3 T5 Q1 {( x1.2 因子分析算法的基本步骤 . V8 o5 N# C) E. t9 v应用因子分析算法时,常常有如下几个基本步骤:/ \. G* o6 ], z. t5 ^- v) V) Z
/ l. O1 z1 d2 A
确定原有若干变量是否适合于因子分析;因子分析的基本逻辑是从原始变量中构造出少数几个具有代表意义的因子变量,这就要求原有变量之间要具有比较强的相关性,否则,因子分析将无法提取变量间的“共性特征”(变量间没有共性还如何提取共性?)。实际应用时,可以使用相关性矩阵进行验证,如果相关系数小于0.3,那么变量间的共性较小,不适合使用因子分析;也可以用KMO 和 Bartlett 的检验来判断是否适合做因子分析,一般来说KMO的值越接近于1越好,大于zhi0.5的话适合做因dao子分析,你的KMO值是0.674大于0.5。Bartlett 的检验主要看Sig.越小越好,你的接近于0.由此可以得出,你的数据适合做因子分析。 7 h9 j; E1 B, Q% h* T/ y构造因子变量;因子分析中有多种确定因子变量的方法,如基于主成分模型的主成分分析法和基于因子分析模型的主轴因子法、极大似然法、最小二乘法等。2 \: @" o# H6 s
利用旋转使得因子变量更具有可解释性 ;在实际分析工作中,主要是因子分析得到因子和原变量的关系,从而对新的因子能够进行命名和解释,否则其不具有可解释性的前提下对比PCA就没有明显的可解释价值。 ) g8 u) a; p0 ~0 d1 H, \1 Y计算因子变量的得分 。子变量确定以后,对每一样本数据,希望得到它们在不同因子上的具体数据值,这些数值就是因子得分,它和原变量的得分相对应。9 v3 x9 h: Q% m& ]
具体而言: ! r$ c _1 K8 ^! |; B( n. l8 ^ s$ m' F
(1) 相关性检验,一般采用KMO检验法和Bartlett球形检验法两种方法来对原始变量进行相关性检验; 7 a9 ]+ i" N2 O(2) 输入原始数据Xn*p,计算样本均值和方差,对数据样本进行标准化处理; & `0 t8 I# @& g! B8 U(3) 计算样本的相关矩阵R;4 a, L0 [; _1 s b N- j$ z' r: N4 Q
(4) 求相关矩阵R的特征根和特征向量;9 Q3 S0 Q* n4 |, M4 F% I+ |) g
(5) 根据系统要求的累积贡献率确定公共因子的个数;9 `, R6 S& R) `6 ?0 D0 A
(6) 计算因子载荷矩阵A;3 e. g; ]- \/ A: [6 |7 T
(7) 对载荷矩阵进行旋转,以求能更好地解释公共因子; % Z. Y A- Q* V- e# r4 E(8) 确定因子模型;& ?+ m5 M. ~# s7 ~ b0 H$ I
(9) 根据上述计算结果,求因子得分,对系统进行分析# P9 [# ^; M% N8 l- s
1.3 因子分析算法的数学解释 - l* l/ t z* ]8 \" R( j I. G1.3.1 因子模型 4 f$ T! H1 p) H" O因子分析中的公共因子是不可直接观测但又客观存在的共同影响因素,每个变量都可以表示成公共因子的线性函数与特殊因子之和,即: ) }, W* p# q( T* Y$ u9 e! L: g8 t ) ]& {; A( o0 }: {式中的F1,F2,…,Fm称为公共因子,εi称为Xi的特殊因子。该模型可用矩阵表示为: % p) C; S3 d* \6 h- u* Z 0 Y3 G* |# l" ~/ |这里: / e/ x; d, o1 [" S; p 7 h% A4 x) R0 {且满足: 5 u7 I. p* H x0 a% o' j4 b6 q2 b5 y0 F7 y
模型中的矩阵A称为因子载荷矩阵,aij称为因子“载荷”,是第i个变量在第j个因子上的负荷,如果把变量Xi看成m维空间中的一个点,则aij表示它在坐标轴Fj上的投影。 + K3 ?. q3 F) ?& ?3 L& B ' J5 X1 i8 A( X; o; O0 o3 R1.3.2 因子载荷矩阵的求解 ' h1 _) i+ O% H: X6 l0 U因子载荷矩阵的求解方法有很多,主要有以下三种:主成分分析法;主因子法;极大似然估计法。(其中以主成分分析法最为常用) 2 ^5 U+ a* w7 Y% ~3 E* t( [0 Q/ f6 O
1.主成分分析法 ( I1 z2 [6 N5 C8 I- ]! d原理及主要计算步骤:0 ^" w; Z9 l( T' C/ s& z9 l1 F6 f% E
(1)计算原始数据X的协方差阵Σ; " n$ W) ~3 J2 t) E C(2)计算协方差阵Σ的特征根,按数值大小表示为λ_1≥λ_2≥⋯≥λ_p,相应的单位特征向量表示为e_1,e_2,…,e_p,特征向量矩阵表示为U。此时协方差阵Σ有如下表示方式1: ! X1 t: q% Y# C4 x' m 4 _" Z3 ~0 Y1 O& r基于公式1和模型假设,我们还可以得到协方差阵Σ有如下式2的表示方法: ( I! X% X4 F) v, u( m; {& E; @9 r& f. w" B
结合公式1和2,我们可以得到因子载荷矩阵的估计: 0 ]) G5 A& X F) Z) f% E7 O7 a4 m% b8 Q- `* I7 R0 g o9 b% U* i
其中:0 Q& p; v9 J* x6 j0 j: `
" `2 d3 m2 @6 m3 x. z1 W M/ i- \* l
其中λ_i表示第i个特征值,e_ij表示λ_i相对应的第i个特征向量的第j个分量。 5 D- }! p' E$ w' {得到载荷矩阵后,我们可以将因子模型表示为:7 d4 T+ z! a0 ^; `/ K
! t5 o, V! z- k1 C2 n% F+ M1 N
2.主因子法% L) B2 @ O8 B' Q; Q5 B3 |0 f
主因子方法是对主成分方法的修正,假定我们首先对变量进行标准化变换。则1 N, R" x3 u; ^" o6 i! }
2 }+ u6 i0 R! K" k$ A5 u2 k, k/ ~: d
称R为约相关矩阵,R对角线上的元素是h_i_2,而不是1。设h^_i_2是h_i_2的初始估计,则:) u' Q' }9 w: C4 i: S6 h; z6 `
3 `+ ~" i3 s( K8 \7 v. j. W8 E ) r, \ I" c% p! u0 m8 Y& H 4 q" n2 m( Y. d/ _* B2 m3.极大似然估计法 Y0 @* m7 N* s! C0 Q
详见极大似然估计法; x w/ U9 h' B$ f
1.3.3 因子载荷矩阵的旋转4 Q% [3 S2 x$ Z' S/ J6 c5 F; t. F1 k( W
设Q为m阶正交矩阵,令B=AQ,则: . W2 o- O! n9 h8 b & w! p' }! Q8 K# W: e: g2 Q" W5 g" K由于,上一小节得到的因子载荷矩阵A并不是唯一的,事实上对矩阵A做正交变换后得到的新矩阵都可以看作因子载荷矩阵。 " J7 h- }! f7 \$ \" \$ V8 G我们在得到一个因子载荷矩阵的估计时,有可能会出现多个变量均在同一个因子上出现较大因子载荷,或者一个变量在多个因子上具有较大的载荷,此时很难对因子进行解释或命名,此时我们希望通过对因子载荷矩阵进行旋转得到新的简化后的因子载荷矩阵,新的因子载荷之间区分度更高,便于因子分析和命名。 " o. A$ X- [# K6 E载荷矩阵的旋转分正交旋转和斜交旋转两类。正交旋转的常用方法有方差最大法、四次方最大法和等量最大法。斜交旋转常用方法有最小斜交旋转法、四次方最小法、斜交旋转等。4 n5 v/ W5 J- y7 c" P. B; |" j
2 W/ _+ L& b) D" I
1.3.4 因子得分$ t0 F( j( o- X2 X" M6 u
得到因子载荷矩阵之后,有时我们希望利用公共因子进行其他研宄,比如进行聚类分析或回归分析,此时我们希望能通过原始变量对公共因子进行估计,即得到因子得分。" W" A" c# V6 {0 H) J
对于模型X=AF+ε,如果不考虑特殊因子ε的影响,可以得到X=AF,但矩阵A是pXm阶,模型中我们要求m<=p,通常因子个数远小于变量个数,即m<p,因此载荷矩阵不可逆,无法直接得到F的估计。, r, M6 g7 R0 U/ V- |3 F* k
公共因子估计的常用方法是回归法和Bartlett法(加权最小二乘法)。- R8 |' r) O3 k# _4 m! b
8 ~0 ^- d1 S8 j. t9 ?% V3 a二、因子分析的应用实例 ) J: q/ n2 V9 U8 n假设某一社会经济系统问题,其主要特性可用4个指标表示,它们分别是生产、技术、交通和环境。其相关矩阵为: ; l( t/ h% I- T7 s $ r$ I2 z) p; \' `; Y相应的特征值、占总体百分比和累计百分比如下表:3 ^# c! U2 b& |% c- I7 o
1 Y1 Z. U6 Q9 K$ C对应特征值的特征向量矩阵为: 3 n* j- A! ]( e! Y2 ^' R& j: l. U
假如要求所取特征值反映的信息量占总体信息量的90%以上,则从累计特征值所占百分比看,只需取前两项即可。也就是说,只需取两个主要因子。对应于前两列特征值的特征向量,可求的其因子载荷矩阵A为:' s3 ~* n' Q u9 T- ?& F `4 v9 F
* C3 t$ k- K+ y
于是,该问题的因子模型为:/ _; U1 S V8 t& D. U6 {
1 X9 n! q/ K1 u
因子分析:由以上可以看出,两个因子中,f1是全面反映生产、技术、交通和环境的因子,而f2却不同,它反映了对生产和技术这两项增长有利,而对交通和环境增长不利的因子。也就是说,按照原有统计资料得出的相关矩阵分析的结果是如果生产和技术都随f2增长了,将有可能出现交通紧张和环境恶化的问题,f2反映了这两方面的相互制约状况。# ?! E' P, g2 b- I/ r
Python编程应用示例见:因子分析(KMO检验和Bartlett’s球形检验)+ I# Q# K @" H! a% D5 y
/ H8 w, o0 s8 x4 C7 i2 I( W2 y三、主成分分析(PCA)与因子分析(FA)的联系与区别6 w2 K9 O, S8 \3 N9 J
主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分。探索性因子分析(EFA)是一系列用来发现一组变量的潜在结构的方法。它通过寻找一组更小的、潜在的或隐藏的结构来解释已观测到的、显式的变量间的关系。9 Y. {: ]. e- b! ?* \. P$ B5 i
! M' f8 H9 l! N5 b主成分(PC1和PC2)是观测变量(X1到X5)的线性组合。形成线性组合的权重都是通过最大化各主成分所解释的方差来获得,同时还要保证个主成分间不相关。相反,因子(F1和F2)被当做是观测变量的结构基础或“原因”,而不是它们的线性组合。代表观测变量方差的误差(e1到e5)无法用因子来解释。图中的圆圈表示因子和误差无法直接观测,但是可通过变量间的相互关系推导得到。 # B/ h5 k3 P4 N 4 r5 E6 p4 o4 I6 \! Y1 |+ Y8 N两者之间的区别与联系,具体而言有如下几种:+ G. c/ S1 r" k6 u1 I
( Y1 q* l. j, N. H
联系:, e/ ~1 f7 ?9 s3 B. I" M/ N
1. PCA和因子分析都是数据降维的重要方法,都对原始数据进行标准化处理,都消除了原始指标的相关性对综合评价所造成的信息重复的影响,都属于因素分析法,都基于统计分析方法; 6 L# r$ y( b5 [( J) m 2. 二者均应用于高斯分布的数据,非高斯分布的数据采用ICA算法;+ B* s' A) V5 W
3. 二者构造综合评价时所涉及的权数具有客观性,在原始信息损失不大的前提下,减少了后期数据挖掘和分析的工作量。. l( k, k2 W' L; [9 h) ^
* t: h- D2 |9 N& M区别:- R9 v3 r7 v* n/ H t3 Z4 Q2 v
1. 原理不同; PCA的基本原理是利用降维(线性变换)的思想,在损失很少信息的前提下把多个指标转化为几个不相关的主成分,每个主成分都是原始变量的线性组合; ; b/ C# i2 Y0 D. V `- z( { i而FA基本原理是从原始变量相关矩阵内部的依赖关系出发,把因子表达成能表示成少数公共因子和仅对某一个变量有作用的特殊因子的线性组合(因子分析是主成分的推广,相对于主成分分析,更倾向于描述原始变量之间的相关关系);7 b. E: W6 X0 P' {3 I* c# H1 f+ D
2.假设条件不同; 主成分分析不需要有假设,而因子分析需要假设各个共同因子之间不相关,特殊因子(specificfactor)之间也不相关,共同因子和特殊因子之间也不相关; ; |4 L$ w/ h+ K9 N$ E; \& ?* ^( K/ Y 3. 求解方法不同; 主成分分析的求解方法从协方差阵出发,而因子分析的求解方法包括主成分法、主轴因子法、极大似然法、最小二乘法、a因子提取法等;! L* \5 v% d f9 q$ [% ]
4. 降维后的“维度”数量不同,即因子数量和主成分的数量; 主成分分析的数量最多等于维度数;而因子分析中的因子个数需要分析者指定(SPSS和SAS根据一定的条件自动设定,只要是特征值大于1的因子主可进入分析),指定的因子数量不同而结果也不同。 % f' S, J! I# F9 G5 c! l 5. 线性表示方法不同; 因子分析是把变量表示成各公因子的线性组合;主成分分析中则是把主成分表示成各变量的线性组合。 , e; X' d c& L$ N( @9 l/ U- v" f# d 6. 主成分和因子的变化不同; 主成分分析:当给定的协方差矩阵或者相关矩阵的特征值唯一时,主成分一般是固定的独特的;因子分析:因子不是固定的,可以旋转得到不同的因子。 - B& Y( M) _$ J# F3 a. n' T 7.解释重点不同; 主成分分析:重点在于解释个变量的总方差;因子分析:则把重点放在解释各变量之间的协方差。 % v- h/ ~+ i5 D& x: h8 O6 d 8.算法上的不同; 主成分分析:协方差矩阵的对角元素是变量的方差;因子分析:所采用的协方差矩阵的对角元素不在是变量的方差,而是和变量对应的共同度(变量方差中被各因子所解释的部分)。 0 P/ d6 E! j9 Y( x1 x0 t 9.优点不同; 对于因子分析,可以使用旋转技术,使得因子更好的得到解释,因此在解释主成分方面因子分析更占优势;其次因子分析不是对原有变量的取舍,而是根据原始变量的信息进行重新组合,找出影响变量的共同因子,化简数据;如果仅仅想把现有的变量变成少数几个新的变量(新的变量几乎带有原来所有变量的信息)来进入后续的分析,则可以使用主成分分析,不过一般情况下也可以使用因子分析。 ! K4 w2 D" O& e; C- o. L0 R: a4 V
综合来看,因子分析在实现中可以使用旋转技术,因此可以得到更好的因子解释,这一点比主成分占优势;另外,因子分析不需要舍弃原有变量,而是站到原有变量间的共性因子作为下一步应用的前提,其实就是由表及里去发现内在规律。但是,主成分分析由于不需要假设条件,并且可以最大限度的保持原有变量的大多数特征,因此适用范围更广泛,尤其是宏观的未知数据的稳定度更高。, K+ `2 x0 E6 Y/ J' y) {
9 X& J( C" M6 K8 y8 q9 Q
总结5 k8 J* U; Q. i z
因子分析跟主成分分析一样,由于侧重点都是进行数据降维,因此很少单独使用,大多数情况下都会有一些模型组合使用。例如:5 U" C) U' }) }
(1) 因子分析(主成分分析)+多元回归分析:判断并解决共线性问题之后进行回归预测; . v& e8 z1 I; Z+ h2 k(2) 因子分析(主成分分析)+聚类分析:通过降维后的数据进行聚类并分析数据特点,但因子分析会更适合,原因是基于因子的聚类结果更容易解释,而基于主成分的聚类结果很难解释; 4 H; K# ?4 u7 z/ S6 R3 B/ z% u* V(3) 因子分析(主成分分析)+分类:数据降维(或数据压缩)后进行分类预测,这也是常用的组合方法。 + k4 g" r' l$ R7 K0 K) a8 J) ~3 X/ t* K( \* r0 U
因子分析通过寻找公共因子的方式达到数据降维的目的(因子分析还可以用于分析不同变量之间的内在联系),主成分分析则是求特征矩阵,实现数据的降维。4 B% b) c% G$ f; A U, l
3 h4 [4 H+ _1 v6 B2 S) ]: D
因子分析的主要作用:+ P$ e+ A" R/ i2 P
(1) 寻求基本数据结构; 9 L) F+ g9 z' Q3 M0 C# \; n(2) 用少数因子,描述具有相关性的多个指标;7 x8 b! w8 o- w* L! w! Q
(3) 数据简化,即降维。 , d8 |9 N) @: z. j6 X- a! l% B1) 强相关问题会对分析带来困难 $ {( a4 }- d; K! \, m9 m; F) o2) 通过因子分析可以找出少数的几个因子替代原来的变量做回归分析、聚类分析和判别分析6 z5 v/ m% W2 [3 M