因子分析(factor analysis)
因子分析(factor analysis)是一种用于挖掘我们所感兴趣的变量{$x_1, x_2, \cdots, x_p$}是否可以用更少的$q$个因子{$F_1,F_2,\cdots, F_q$}的线性组合来表示的方法($q\leq p$,且每个因子都是变量)。
也可以表示为$X = \mathbf{A}S + \epsilon$, 其中$S \in \mathbb{R}^q$的向量称为公共因子(common factors), $A\in \mathbb{R}^{p\times q}$是一个矩阵其中的元素$l_{ij}$称为第i个变量的第j个因子的“loadings”。 $\epsilon_1,\cdots, \epsilon_p$ 是特有的因子(unique factors)。
需要注意的是,在因子分析中转换后的变量是因子,而“loadings”在转换后可以认为是定下来的矩阵。"loadings"表明了每个因子与原变量的相关程度。 举一个应用因子分析的例子,假设我们想要知道学生们的逻辑思维能力和语言表达能力的好坏,然而这两个变量我们并不能直接测量出来。我们可测量的可能是对学生进行数学考试,物理考试,语文考试,英语考试,化学考试。在此场景中,可以认为 {数学考试,物理考试,语文考试,英语考试,化学考试} 为原变量,而 {逻辑思维能力,语言表达能力} 为因子。将原变量进行因子分析,因子的数目定为2,从“loadings”矩阵可能就可以看出逻辑思维能力与 {数学,物理,化学} 高度相关,而语言表达能力和{语文,英语}高度相关。
对于变量 $x_i$ 的方差,我们可以表示为
变量 $x_i, x_j$ 之间的协方差为:
注意以上计算,我们假定了$Var(F_i) = 1, Var(\epsilon_i)=\sigma_i^2$。并且我们称 $h_i^2 = l_{i1}^2 + \cdots + l_{iq}^2$ 为$\mathbf{communality}$, $\sigma_i^2$为$\mathbf{specificity}$.
例子:
假定原变量有三个$x_1, x_2, x_3$,我们用两个因子来表示,则原变量的相关矩阵可以表示为如下:
$x_1$ | $x_2$ | $x_3$ | |
---|---|---|---|
$x_1$ | $l_{11}^2 + l_{12}^2 + \sigma_1^2$ | $l_{21}l_{11}+l_{22}l_{12}$ | $l_{31}l_{11} + l_{32}l_{12}$ |
$x_2$ | $l_{21}l_{11}+l_{22}l_{12}$ | $l_{21}^2 + l_{22}^2 + \sigma_{2}^2$ | $l_{21}l_{31} + l_{22}l_{32}$ |
$x_3$ | $l_{31}l_{11} + l_{32}l_{12}$ | $l_{21}l_{31} + l_{22}l_{32}$ | $l_{31}^2 + l_{32}^2 + \sigma_3^2$ |
即原变量的相关矩阵为$LL^T+diag(\sigma_{1}^2, \cdots, \sigma_{p}^2)$ ($L$为loadings 矩阵)
factor analysis 的假设
- 公共因子$F$于特有因子$\epsilon_i$是无关的: $$ Cov(F, e_i) = 0 $$
- 特有因子之间是无关的: $$ Cov(e_i, e_j) = 0 $$
- 给定公共因子后观测变量之间无关: $$ Cov(x_i, x_j|F) = 0 $$
目地
使用因子分析(factor analysis)我们大部分是为了以下两个目地:
- 得到 factor loadings $l_{ij}$
- 得到 communalities $h_i^2$
求解因子
-
通过相关矩阵(Correlation Matrix)求解:
- 首先根据输入数据$\mathbf{X}$求得相关矩阵$\mathbf{R}$
- 因为$\mathbf{R}$是对称矩阵所以可以表示为$R=Q\Lambda Q^T$
- 已知$\mathbf{R = LL^T + \epsilon}$ ($\mathbf{L}$为loadings 矩阵)
- 忽略误差$\mathbf{\epsilon}$,可得$\mathbf{L = Q\sqrt{(\Lambda)}}$
-
使用PCA的方法求解:
将PCA中的主成分(principal components) 做为因子(factors)
因子旋转(Factor Rotations)
Varimax rotation
旋转算法过程如下:
第$i$次迭代
- 如果截至条件满足,退出迭代
- 遍历所有成对的因子(factor)执行以下操作:
- 对选中的一对因子进行$\theta$角度的旋转(假定选中的因子为第一个和第二个) $$ (\tilde{F_1}, \tilde{F_2}) = (F_1, F_2) \mathbf{R} $$
- 对相应的一对loadings进行$\theta$角度的旋转 $$ (\tilde{l_{\cdot 1}}, \tilde{l_{\cdot 2}}) = (l_{\cdot 1}, l_{\cdot 2}) \mathbf(R) $$
其中旋转矩阵$R$表示如下:
Varimax方法旋转的角度计算如下: $$ \theta = \frac{1}{4} \arctan\frac{2[p\sum_{j=1}^{p}u_jv_j - \sum_{j}^{p}u_j\sum_{j}^{p}v_j]}{p\sum_{j}^{p}(u_j^2 - v_j^2) - [(\sum_j^{p} u_j)^2 - (\sum_j^p v_j)^2]} \ , $$ $$ u_j = (l_{j1}/h_j)^2 - (l_{j2} / h_j)^2, $$ $$ v_j = 2(l_{j1}/h_j)(l_{j2}/h_j) $$ 其中$p$代表原变量的个数,$l_{j1}$所选中的第一个因子(factor)在第$j$个原变量的因子载荷(loadings)。 $h_j$表示第$j$个原变量的共同度(communality)开根号的值。 $$ h_j^2 = l_{j1}^2 + l_{j2}^2 + \cdots + l_{jq}^2 $$ 其中$q$表示设定的公共因子(factor)数量。
截至条件可以是以下条件:
- 迭代次数到达上限
- 通过计算SV的值,相邻两次迭代中SV值无变化时截至,比如:$SV(i)-SV(i-1) < 10^{-5}$
Steps in Exploratory Factor Analysis
- Collect data: choose relevant variables.
- Extract initial factors (via principal components)
- Choose number of factors to retain
- Choose estimation method, estimate model
- Rotate and interpret
-
- Decide if changes need to be made (e.g. drop item(s), include item(s))
- repeat (4)-(5)
- Construct scales and use in further analysis