"探索性因子分析EFA是个啥?"

在很多研究中,我们需要的变量都不能或者不容易被直接测量,比如,假如我们要研究家庭环境和学校环境对学生成绩的影响,我们要如何测量家庭环境和学校环境?

虽然我们不能直接测量家庭环境和学校环境,但是我们可以通过一些相关的可测量变量来反映这些不可测量的变量,比如我们使用家庭年收入、父母学历等等指标来反映家庭环境;用学校排名,学校本科率,学生所在班级排名等指标来衡量学校环境

但是细心的小伙伴会发现,家庭收入和父母学历本身就存在相关性;学校排名和学校本科率也有相关性,因此我们可以推断肯定存在一个共同影响家庭收入、父母学历的因子;也会存在影响学校排名和本科率的因子,那我们如何找出所有影响或者支配所有变量的公共因子呢?

别急,现在就来给家人们详细讲讲因子分析~

(”因子分析分为验证性因子分析(CFA)探索性因子分析(EFA),本文讲的是因子分析皆为EFA“)


2.1 两类检验(KMO & Bartlett)

当我们的变量不独立或不相关的时候,其实就不存在上述栗子中的问题了,那我们也不可能找到影响所有变量的公共因子

因此,在做因子分析前我们需要进行KMO检验和Bartlett检验

  • KMO检验

KMO检验用于检验变量之间的偏相关性的,其取值为[0,1],当KMO统计量越接近于1时,变量之间的偏相关性越强

一般我们要求KMO统计量在0.5以上且越接近于1越好,如果KMO在0.5以下,那就要重新考虑是否要使用因子分析了

  • Bartlett检验

Bartlett用于检验变量之间是否独立,其原假设是变量之间相互独立,如果检验的P值小于0.05,那么我们就可以在95%的置信水平上拒绝原假设,认为变量间不独立

只要变量不独立,那我们当然可以进行因子分析

经过KMO和Bartlett检验后,我们发现变量确实相关而且不独立,因子分析终于可以大展拳脚了,那这个因子分析到底是怎么个操作方法呢?

万丈高楼平地起,我们还是要先弄清因子分析的模型

2.2 因子分析模型

2.2.1 数学模型

既然变量不独立而且相关,那他们肯定会受到一个或者多个潜在变量的影响,我们只要把这个潜在变量找出来,再用潜在的变量表示原来的变量,那我们对原始变量的研究就可以转化为对这个潜在变量的研究。因子分析模型也是这个道理

简单来说,因子分析模型就是用公共因子特殊因子表示原来的变量

假设我们现在对n个样本观察了p个指标,即X1,X2...Xp,公共因子用F表示,特殊因子用epsilon表示,那么因子分析模型就可以用以下数学模型表示
\begin{align} \\& X = \begin{bmatrix} X_{1} \\ X_{2} \\ ... \\ X_{p}\end{bmatrix},A = \begin{bmatrix} a_{11} \ a_{12} \ ... \ a_{1m} \\ a_{21} \ a_{22} \ ... \ a_{2m} \\ ... \\ a_{p1} \ a_{p2} \ ... \ a_{pm} \end{bmatrix} \\& \\& F = \begin{bmatrix} F_{1} \\ F_{2} \\ ... \\ F_{p}\end{bmatrix},e = \begin{bmatrix} \varepsilon_{1} \\ \varepsilon_{2} \\ ... \\ \varepsilon_{p}\end{bmatrix} \\& \\& X1 = a_{11}F1 \ + ... + \ a_{1d}F_{d} + \varepsilon_{1} \\& X2 = a_{21}F1 \ + ... + \ a_{2d}F_{d} + \varepsilon_{2} \\& ... \\& X_{p} = a_{p1}F1 \ + ... + \ a_{pd}F_{d} + \varepsilon_{p} \end{align}

以上的复杂式子,我们可以用X = AF + e表示,其模型描述如下:

  • X是原始可观测变量,维度是p【注意:此时的X进行了中心化处理,E(x)=0】
  • F代表公共因子,维度是d(d<p)
  • 系数a(loadings),又称“因子载荷”,需要求解;所有的a组成载荷矩阵A,载荷矩阵A不唯一
  • 公因子F的线性组合反映X
  • ℇ代表特殊因子;特殊因子仅仅与当前变量有关;例如ℇ1仅与X1有关,特殊因子之间相互独立,且E(ℇ)=0

【模型假设】

  • 各特殊因子之间相互独立

  • 各特殊因子与公共因子相互独立 Cov(F,ℇ) = 0

  • 各公共因子均值为0,方差为1且彼此独立

整个因子分析最重要的一步,就是要求出loadings,即因子载荷,围绕因子载荷,我们还要提一下以下几个重要的性质

2.2.2 重要性质

因子载荷矩阵有以下几个重要统计性质

  1. 因子的统计意义

因子a_ij是第i个变量与第就、个公共因子的相关系数,反映了第i个变量与第j个公共因子的相关重要性

说人话就是,a_ij越大,Xi与Fj的相关性越强呗~

  1. 共同度hi

h_{i}^2 = \sum_{j=1}^{m}a_{ij}^2 = a_{i1}^{2} + a_{i2}^{2} + ... + a_{ij}^{2}

对第i个变量Xi的共同度是指因子载荷矩阵第i行的因子的平方和,也可以理解成j个共同因子对第i个变量的方差的贡献度

对其两边求方差可以得到
\begin{align} \\& \quad Var(X) = a_{i1}^2Var(F_{1}) + ... + a_{im}^2Var(F_{m}) + Var(\varepsilon_{i}) \\& \quad Var(Fi) = 1 \\& \quad Cov(Fi,Fj) = 0 \\& \\& \quad then, \\& \\& \quad 1 = \sum_{j=1}^{m}a_{ij}^2 + \sigma_{i}^2 \end{align}
上式可以看出,所有的公共因子和特殊因子对变量Xi的贡献为1,因子平方和越靠近1,则特殊因子项的方差就会很小,因子分析的效果越好

  1. 公共因子方差贡献

因子载荷矩阵中第j列元素的因子平方和为Fj对所有Xi的方差贡献和,记为gj2,用于衡量Fj的相对重要性
g_{j}^{2} = \sum_{i=1}^{p}a_{ij}^2

说人话就是,因子载荷矩阵里每一行的因子的平方和代表共同度,每一列的因子的平方和代表方差贡献

那接下来就要讲讲这个因子载荷要咋求出来

2.2.3 因子载荷&因子旋转

估计因子载荷的方法很多,比如主成分分析,最大似然估计等,由于上一篇文章讲了PCA,我们这就用主成分分析法来求因子载荷

由于PCA再主成分分析一文里说的很详细,这里就不再阐述了,大体思路一致,关键在于找到相关系数矩阵对应的特征值和特征向量

主成分分析链接🔗

假设v是最终计算出来的特征值和特征向量,λ是特征值,那么因子载荷a可以由以下公式计算

整个计算方法基本和PCA一致,求出特征值,找出累计方差贡献大于70%的前几个λ,然后再计算出对应的特征向量v,然后再计算出因子载荷

得到因子载荷后,我们需要衡量因子是被哪几个指标支配【即不同的F是受哪些X影响】,一般因子载荷a>0.5则认为该指标是支配指标

比如,以下表格的数据可以看出F1受到x1,x2支配;而F2受到x3,x4支配

F1 F2
x1 0.7052 0.1024
x2 0.6905 0.2049
x3 0.3515 0.7906
x4 0.2516 0.8854

做完因子旋转后,因子载荷的平方值会向0和1两个方向分化,原本值大的因子载荷会更大,原本值小的因子载荷会更小,这样我们就可以把他们区分开

【栗子🌰】

说了辣么多,来个栗子吧,不然看的云里雾里的

假设变量的相关系数矩阵是R如下,求其因子,首先第一步我们求特征值λ
\begin{align} \\& R = \begin{bmatrix} \quad 1 \quad \frac{-1}{3} \quad 2/3 \\ \frac{-1}{3} \quad 1 \quad 0 \\ \frac{2}{3} \quad 0 \quad 1 \end{bmatrix} \end{align}
根据特征值和特征向量公式我们求的λ
\begin{align} \\& |R - \lambda E|X = 0 \quad then \quad \\& R-\lambda E = \begin{bmatrix} \quad 1-\lambda \quad \frac{-1}{3} \quad 2/3 \\ \frac{-1}{3} \quad 1 -\lambda \quad 0 \\ \frac{2}{3} \quad 0 \quad 1-\lambda \end{bmatrix} \\& |R-\lambda X| = (1-\lambda)^3 +0 + 0 -(1-\lambda)\frac{4}{9} - \frac{1}{9}(1-\lambda) -0 = 0 \\& \\& then, \\& \lambda_{1} = 1;\quad \lambda_{2} = 1- \frac{\sqrt{5}}{3} = 0.2546; \quad \lambda_{3} = 1 + \frac{\sqrt{5}}{3}=1.7454; \end{align}

计算出特征值后我们要计算累计方差贡献,计算如下

λ proportion cummulative
1.7454 58.18% 58.18%
1 33.33% 91.53%
0.2546 8.48% 100%

因为λ1和λ2大于1,而且累计方差占比大于70%,因此我们只选取2个因子,接下来就要计算其特征向量

将λ代回原矩阵计算
\begin{align} \\& For \quad \lambda = 1.7454; \\& \\& \begin{bmatrix} \frac{-\sqrt{5}}{3} \quad \frac{-1}{3} \quad \frac{2}{3} \\ \frac{-1}{3} \quad \frac{-\sqrt{5}}{3} \quad 0 \\ \frac{2}{3} \quad 0 \quad \frac{-\sqrt{5}}{3} \end{bmatrix} * \begin{bmatrix} x1 \\ x2 \\ x3 \end{bmatrix} = 0 \\& \\& \begin{bmatrix}\ 0 \quad \quad \quad 0 \quad \quad \quad 0 \\ -1 \quad -\sqrt{5} \quad \quad 0 \\ 0 \quad -2\sqrt{5} \quad -\sqrt{5}\end{bmatrix} * X = 0 \\& \\& -x_{1} - \sqrt{5}x_{2} = 0 \\&-2\sqrt{5}x_{2} - \sqrt{5}x_{3} = 0 \\& \\& x_{1}=\sqrt{5},\ then \ x_{2} = -1,\ x3 = 2 \\& \\& v = \begin{bmatrix} \sqrt{5} \\ -1 \\ 2\end{bmatrix} \quad standarized \quad \begin{bmatrix} 0.7071 \\ -0.3162 \\ 0.6325 \end{bmatrix} \\& \end{align}
上述例子求出了其中一个特征向量,其他特征向量计算方法也类似,求出后计算对应的因子
\begin{align} \\&\lambda_{1} = 1.7454; \quad \lambda_{2} = 1; \quad v_{1} = \begin{bmatrix} 0.7071 \\ 0.3162 \\ -0.6325 \\\end{bmatrix}; \quad v_{2} = \begin{bmatrix} 0 \\ 0.8165 \\ 0.4082 \\\end{bmatrix} \\& A = \begin{bmatrix} \sqrt{\lambda_{1}}v1,\sqrt{\lambda_{2}}v2 \end{bmatrix} = \begin{bmatrix} 0.9342 \quad \quad 0 \\ -0.4178 \quad 0.8165 \\ 0.8355 \quad 0.4082 \\\end{bmatrix} \end{align}
由此可得x与公共因子与特殊因子的模型数学表示如下:
\begin{align} \\& x1 = 0.9342*F_{1} + 0*F_{2} + \varepsilon_{1} \\& x2 = -0.4178*F_{1} + 0。8165*F_{2} + \varepsilon_{2} \\& x3 = 0.8355*F_{1} + 0。4082*F_{2} + \varepsilon_{3} \end{align}
其中F1对x的贡献度为1.7454,F2对x的贡献度为1

相信看完案例,大家应该能明白因子载荷矩阵是怎么计算出来的 了~

2.2.4 因子得分

因子得分其实就是指模型中因子F的取值,前面也说到,因子F是不能直接观察的理论变量,因此其取值只能借助于X来测量,一般F都要由X来线性表示
F_{j} = u_{j1}X_{j1} + u_{j2}X_{j2} + u_{jp}X_{jp} \quad j = 1,2,...,m
无意中看到有一篇文章写的是对因子得分的质疑,感觉他说的挺有道理的,而且因子得分好像用的也不多【可能只有我用的不多h】,因此这部分也不打算细讲

大概知道因子得分就是通过一种数学运算,将潜在因子F的值用X算出来了

【总结一下】

其实因子分析也就以下几步

  1. 进行统计检验,看数据是否适合做因子分析
  2. 标准化,以及计算相关系数矩阵
  3. 求解特征值和特征向量
  4. 计算方差贡献率与累计方差贡献率
  5. 确定与计算因子【包括因子旋转】

这咋一看,感觉和PCA那么像呢,因为我们使用的是主成分分析法求解的因子载荷,所有确实和PCA有点像,但实际上,EFA与PCA也是有很大区别的

2.2.5 EFA与PCA区别

  • PCA使用原始数据的线性组合来降低数据维度;而EFA则希望寻找隐藏在数据中无法直接观察的因子
  • PCA旨在找到一种或几种综合指标,把每一个指标表示成原始变量的线性组合,而EFA是将原始变量近似表示成公共因子的线性组合,大概意思如下图 【灵魂画手😅】


2.3 EFA的python实现

EFA在spss、R、SAS、python等软件都能实现,由于现在喜欢用python的胖友比较多,那就来写下python下如何实现EFA吧~

【注意⚠️】这里没有进行相关统计检验

import pandas as pd
import sklearn.datasets
from factor_analyzer import FactorAnalyzer
import matplotlib.pyplot as plt

df = pd.read("your path")
n = 6 # 选一个尽量大的值
fa = FactorAnalyzer(n_factors=n,rotation="varimax") # 最大方差旋转
fa.fit(df)                                                                       # df不能有NAN df.dropna()
pd.Dataframe.from_records(fa.loadings_)             # 得到因子载荷loadings
ev,v = fa.get_eigenvalues()                                     # 得到特征值和特征向量

# 确定最优的n值
# draw scree plot 
xvals = range(1,df.shape[1]+1)
plt.scatter(xvals,ev)
plt.plot(xvals, ev)
plt.title("scree plot")
plt.xlabel("factor")
plt.ylabel("eigenvalues")
plt.grid
plt.show()

# 确定最优的n后,使用最优的n再进行因子分析

码字不易,喜欢的话给个赞和关注吧~😋

相关参考

[1] 对主成分分析中综合得分方法的质疑

[2] EFA的python实现

[3] Abdi, Hervé. "Factor rotations in factor analyses." Encyclopedia for Research Methods for the Social Sciences. Sage: Thousand Oaks, CA (2003): 792-795.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 主成分分析在统计学中,主成分分析主要是一种通过降维技术来将数据集进行简化的操作,并且在减少对数据集的维数的同时保证...
    Jachin111阅读 1,796评论 0 0
  • 1.定义 因子分析:即对信息的浓缩。比如领导说了14句话,将其浓缩为4个关键词 2. SPSSAU操作步骤 (1)...
    mhhhpl阅读 4,112评论 0 0
  • Chapter 13 Factor Analysis 本篇是第十三章,内容是因子分析。这篇博客的完整内容包含各类数...
    G小调的Qing歌阅读 21,498评论 0 11
  • 1 因子分析概念 因子分析是一种数据简化的技术。它通过研究众多变量之间的内部依赖关系,探求观测数据中的基本结构,并...
    羋学僧阅读 23,665评论 9 12
  • 采用因子分析方法,根据48位应聘者的15项指标得分,选出6名最优秀的应聘者## (1)读入数据,数据标准化 (2)...
    chfing阅读 601评论 0 0