Introduction

因子分析是由最早由英国心理学家斯皮尔曼提出,在某种程度上可以被看成是主成分分析的推广和扩展。

因子分析法通过研究变量间的相关系数矩阵,把这些变量间错综复杂的关系归结成少数几个综合因子,由于归结出的因子个数少于原始变量的个数,但是它们又包含原始变量的信息,所以这一分析过程也被称为降维,又由于因子分析往往比主成分分析更容易得到解释,所以因子分析比主成分分析更容易成功。

与主成分的对比

假设有\(n\)个样本,\(p\)个指标,则可构成大小为\(n*p\)的样本矩阵\(x\):

$$
x=\left[ \begin{matrix}
x_{11}& x_{12}& \cdots& x_{1p}\\
x_{21}& x_{22}& \cdots& x_{2p}\\
\vdots& \vdots& \ddots& \vdots\\
x_{n1}& x_{n2}& \cdots& x_{np}\\
\end{matrix} \right] =\left( x_1,x_2,\cdots ,x_p \right)
$$

主成分分析:

\(x_1,x_2,\cdots ,x_p\Rightarrow z_1,z_2,\cdots ,z_m\left( m\leqslant p \right)\),且它们满足:

$$
\begin{cases}
z_1=l_{11}x_1+l_{12}x_2+\cdots +l_{1p}x_p\\
z_1=l_{21}x_1+l_{22}x_2+\cdots +l_{2p}x_p\\
\,\,\vdots\\
z_m=l_{m1}x_1+l_{m2}x_2+\cdots +l_{mp}x_p\\
\end{cases}
$$

\(z_1,z_2,\cdots ,z_m\)就是\(m\)个主成分,可以看出,主成分实际上就是各指标的线性组合。

因子分析

\(x_1,x_2,\cdots ,x_p\Rightarrow f_1,f_2,\cdots ,f_m\left( m\leqslant p \right)\),他们满足:

$$
\begin{cases}
x_1=u_1+a_{11}f_1+a_{12}f_2+\cdots +a_{1m}f_m+\varepsilon _1\\
x_2=u_2+a_{21}f_1+a_{22}f_2+\cdots +a_{2m}f_m+\varepsilon _2\\
\,\,\vdots\\
x_p=u_p+a_{p1}f_1+a_{p2}f_2+\cdots +a_{pm}x_m+\varepsilon _p\\
\end{cases}
$$

其中,\(f_1,f_2,\cdots ,f_m\)被称为公共因子,\(\varepsilon_i\)为特殊因子(因为不可能我们找出来的因子完全等于原始变量),各因子的线性组合构成了原始变量,这里就和主成分不同了,主成分分明细是原始变量的线性组合构成主成分,而因子分析是我们找出来的因子线性组合构成原始变量。

其他的区别:

  1. 主成分分析只是简单的计算数值,不需要构造一个模型,几乎没什么假定,而因子分析则需要我们构造一个因子模型,并伴随几个关键性的假设。
  2. 主成分的解是唯一的,而因子可以有许多解,这里为后面的因子旋转做铺垫

因子分析:

因子分析原理

假设大小为\(n\times p\)的随机向量\(x=\left( x_1,x_2,\cdots ,x_p \right) '\)的均值为\(u=\left( u_1,u_2,\cdots ,u_p \right) '\),协方差矩阵为:\(\varSigma {p\times p}=\left( \sigma {ij} \right)\),因子分析的一般模型为:

$$
\begin{cases}
x_1=u_1+a_{11}f_1+a_{12}f_2+\cdots +a_{1m}f_m+\varepsilon _1\\
x_2=u_2+a_{21}f_1+a_{22}f_2+\cdots +a_{2m}f_m+\varepsilon _2\\
\,\,\vdots\\
x_p=u_p+a_{p1}f_1+a_{p2}f_2+\cdots +a_{pm}x_m+\varepsilon _p\\
\end{cases}
$$

其中\(f_1,f_2,\cdots ,f_m\)为公共因子,\(\varepsilon _i\left( i=1,2,\cdots ,p \right)\)为特殊因子,它们都是无法观测的随机变量,公因子\(f_1,f_2,\cdots ,f_m\)出现在每一个原始变量\(x_i\left( i=1,2,\cdots ,p \right)\)的表达式中,可以理解原始变量同时拥有某些特征(具有共同的影响因素),每个特殊因子仅仅出现在与之对应的第\(i\)个原始变量\(x_i\)的表达式中,它们只对这个原始变量起作用。

上面的式子,我们可以用矩阵的方式来表达:

$$
x=u+Af+\varepsilon
$$

其中\(f=\left( f_1,f_2,\cdots ,f_m \right) '\left( m\leqslant p \right)\)为公因子向量,\(\varepsilon =\left( \varepsilon _1,\varepsilon _2,\cdots ,\varepsilon _p \right) '\)为特殊因子向量,\(A_{p\times m}=a_{ij}\)称位载荷矩阵,并且假设\(A\)的秩为\(m\)

要进行因子分析,我们就需要解出\(A\)这个矩阵,因此下面我们要给出一些假设用来计算

因子分析模型的假设

$$
\begin{cases}
x_1=u_1+a_{11}f_1+a_{12}f_2+\cdots +a_{1m}f_m+\varepsilon _1\\
x_2=u_2+a_{21}f_1+a_{22}f_2+\cdots +a_{2m}f_m+\varepsilon _2\\
\,\,\vdots\\
x_p=u_p+a_{p1}f_1+a_{p2}f_2+\cdots +a_{pm}x_m+\varepsilon _p\\
\end{cases}
$$

\(x=u+Af+\varepsilon\),假设:

$$
\begin{cases}
E\left( f \right) =0, E\left( \varepsilon \right) =0 \text{因子的均值}为\text{零}\\
Var\left( f \right) =I\,\,\text{协方差矩阵}为\text{单位矩,各}个\text{因子不相关,并具有单位方差}\\
Var\left( \varepsilon \right) =D=\mathrm{diag}\left( \sigma {1}^{2},\sigma _ {2}^{2},\cdots ,\sigma _{p}^{2} \right) \,\,\text{特殊因子不相关}\\
cov\left( f,\varepsilon \right) =E\left( f\varepsilon ' \right) =0 \text{公共因子与特殊因子不相关}\\
\end{cases}
$$

也就是说:公因子彼此不相关,且具有单位方差,特殊因子彼此不相关且与公因子也不相关

因子模型的性质

(1)\(x\)的协方差矩阵的分解:

根据\(x=u+Af+\varepsilon \Rightarrow x-u=Af+\varepsilon\),以及我们上面的假设:

由于博客对公式的支持不太行,所以直接放图片了...

之前我们假设过随机向量\(x\)的协方差为\(\varSigma {p\times p}=\left( \sigma {ij} \right)\),所以我们现在将其分解为因子载荷矩阵与其转置的积和特殊因子的协方差,我们之所以要将其分解,其实就是为了证明因子载荷不唯一:

(2)因子载荷不唯一

令\(T\)为任意一个\(m\times m\)的正交矩阵,令\(A^=AT, f^=T'f\),则模型可以表示为:\(x=u+A^*f^*+\varepsilon\),且此时我们的假设仍然成立:

因子载荷矩阵的统计意义

(1)\(A\)的元素\(a_{ij}\):原始变量\(x_i\)与公因子\(f_j\)之间的协方差:\(a_{ij}=cov\left( x_i,f_j \right)\),如果\(x\)经过了标准化,则\(a_{ij}=\rho \left( x_i,f_j \right)\)

(2) \(A\)的行元素平方和\(h_{i}^{2}=\sum_{j=1}^m{a_{ij}^{2}}\),表示原始变量\(x_i\)对公因子依赖程度,可以证明:\(Var\left( x_i \right) =h_{i}^{2}+\sigma _{i}^{2}\left( i=1,2,\cdots ,p \right)\)

\(h_{i}^{2}\)反应了公因子对于\(x_i\)的影响,可以看成是公因子对于\(x_i\)的方差贡献,称为共性方差,而\(\sigma _{i}^{2}\)是特殊因子对原始变量的贡献,称为个性方差,如果\(x\)经过了标准化,则:\(h_{i}^{2}+\sigma _{i}^{2}=1\)

(3)\(A\)的列元素平方和\(g_{j}^{2}=\sum_{i=1}^p{a_{ij}^{2}}\):公因子\(f_i\)对\(x\)的贡献

可以证明:

从上述公式的推导可以看出,\(A\)的第\(j\)列元素的平方和\(g_{j}^{2}\)是\(Var\left( f_j \right)\)的系数\(g_{j}^{2}\)的值越大,反映了\(f_j\)对\(x\)的影响越大,\(g_{j}^{2}\)是衡量公因子\(f_j\)重要性的一个尺度,可以视为公因子\(f_j\)对\(x\)的贡献

参数估计

设\(x_1,x_2,\cdots ,x_n\)是一组\(p\)维样本,则\(u\)和\(\varSigma\)分别可估计为:\(\overline{x}=\frac{1}{n}\sum_{i=1}^n{x_i}\)和\(S^2=\frac{1}{n-1}\sum_{i=1}^n{\left( x_i-\overline{x} \right) \left( x_i-\overline{x} \right) '}\),为了建立因子模型,我们需要估计出因子载荷矩阵\(A_{p\times m}=a_{ij}\)以及个性方差矩阵\(D=\mathrm{diag}\left( \sigma_{1}^{2},\sigma {2}^{2},\cdots ,\sigma _{p}^{2} \right)\)

在spss中,提供的方法有主成分法,未加权最小平方法,综合最小平方法,最大似然法,主轴因子法,Alpha因式分解法和映像因子法

具体使用哪一种方法没有严格的规定,在实际中可以选择方便解释的,论文中常用的是主成分法、最大似然法和主轴因子法。

spss官方文档中的说明

因子旋转方法

得到因子模型后,其中的公共因子不一定能反映问题的实质特征,为了能够更好地解释每一个公共因子地实际意义,且减少解释的主观性,可以通过因子旋转达到目的。

因子旋转分为正交旋转和斜交旋转,经过正交旋转地新的公共因子仍可以保持彼此独立的性值,而斜交旋转得到的公共因子是相关的,切实际意义更容易解释,但不论是正交旋转还是斜交旋转,都应当使公共因子的载荷系数的绝对值经可能接近0或1

在spss中,已经有了很多方法(最大方差法,直接斜交法,等量最大法等等,一般用最大方差法),我们只需要会用就行,如果想看详细的数学公式推导,可以去文章的最底部寻找链接,由于博主数理基础很差,所以并没有详细阅读,有兴趣的可以看看。

因子得分

因子分析是将变量表示为公共因子和特殊因子的线性组合,此外,我们可以反过来将共公因子表示为原变量的线性组合,即可得到因子得分

这里和主成分蛮像的,但其实并不是,因为我们前提还假设了很多条件嘛

第\(i\)个因子的得分可以写成\(f_i=b_{i1}x_1+b_{i2}x_2+\cdots +b_{ip}x_p\left( i=1,2,\cdots ,m \right)\)

计算出因子得分函数的系数后,就可以求出所有的因子得分,计算因子得分可选的方法有:回归法、Bartlett法、Anderson-Rubin法,论文中常用第三种方法。

因子分析上手

例1:在1984年洛杉矶奥运会田径统计手册中,有55个国家和地区的如下八项 男子径赛运动记录: X1: 100米(单位:秒)x5: 1500米(单位:分) x2: 200米(单位:秒)x6: 5000米(单位:分) x3: 400米(单位:秒)x7: 10000米(单位:分) x4: 800米(单位:秒)x8: 马拉松(单位:分) 请对该数据进行因子分析。

操作步骤:

这里介绍一下选项:

  • 单变量描述:输出参与分析的每个原始变量的均值、标准差和有效取值个数
  • 初始解:未经过旋转直接计算得到的初始公因子、初始特征值和初始方差贡献率
  • 系数:输出初始分析变量之间的相关系数矩阵
  • 显著性水平:输出每个相关系数对于单侧假设检验的显著性水平
  • 决定因子:输出相关系数矩阵的行列式
  • 逆:输出相关系数的逆矩阵
  • 再生:输出因子分析后的相关矩阵,还给出了原始相关与再生相关之间的差值:也就是残差
  • 反映像:输出反映像相关矩阵,包括偏相关系数的负数
  • KMO检验和巴特利球形检验:进行分析之前需要对这俩进行检验
    • KMO检验的标准:KMO>0.9,非常合适搞因子分析;0.8<KMO<0.9,适合;0.7<KMO<0.8,一般;0.6<KMO<0.7,不太适合;KMO<0.5不适合
    • 巴特利球球形检验:原假设\(H_0\)为:指标间的相关系数是单位阵,为单位阵,说明基本不相关,不相关就不适合降维,所以我们想拒绝原假设,所以显著性水平(P值)一般小于0.05比较合适。
点击提取,忘了打箭头了
  • 方法:如果对得到的结果不满意,后面可以再来一次,优先用主成分,当然这里的主成分并不是我前一篇博客里面讲的主成分,但是,如果后面我们不进行因子旋转的话,那也差不了多少。
  • 显示:一定要勾上碎石图,我们后面根据这个图来选择因子的个数
  • 提取:我们先用特征值,拿到结果后,我们梅开二度选择因子的固定数目
点击旋转,忘了打箭头了

然后点击确定,就ok了

结果分析

我们优先确定原始数据是否适合进行因子分析,下图中,KMO为0.909>0.9,KMO通过,巴特利球形检验中,显著性(P值)<0.05,则特利球形检验通过

然后,我们看碎石图:

碎石图的分析方法:从碎石图中可以看出,前两个因子对应的特征值的变化较陡,从第三个因子开始,特征值的变化较为平坦,因此我们选择前两个因子进行分析

所以,我们现在梅开二度,在“提取”那里选择因子的固定数目,也就是重新来一遍,除了提取那里要改一下,其他的都跟前面步骤一样。

对公因子方差表的解释:

这里的公因子方差其实就是我们前面说过的共性方差

解释:100米(s)这个变量的公因子方差为0.95,这可以解释为我们提取的两个公共因子对100米这个变量的方差贡献率为95%,说白了就是这两个公共因子可以反映出100米这个变量95%的信息。

对总方差解释表的解释:

上表为总方差解释表,给出了每个公共因子所解释方差及累计和,从初始特征值一栏可以看出,前两个公共因子解释的累计方差达到了93.747%,而后面的公共因子特征值较小,对解释原有变量的贡献越来越小,因此提取前两个公因子就好了。

提取载荷平方和一栏是未旋转时被提取的两个公因子的方差贡献信息,其与初始特征值没啥区别

旋转载荷平方和一栏是经过旋转后新公因子的方差贡献信息,和未旋转的贡献信息相比,每个公因子方差贡献率有变化,但是累计的方差总是不变的

成分矩阵:

观察两张表其实可以发现,没有旋转的时候,公共因子1的波动不明显,不好解释,只能根据公共因子2来解释,但是如果旋转了因子之后,可以发现就非常好解释了,当米数增加时,公共因子1的载荷增大,说明它可能是耐力因子,而公共因子2在降低,说明它可能是爆发力因子。

因子载荷散点图

两个公共因子,所以生成一张平面图,如果是三个公共因子,则会生成一张三维的图,四维就没图了。从这张图可以看出和“旋转成分矩阵”的信息一致

因子得分

根据成分得分矩阵,我们就可以得到因子得分了

注:这里用加上弧线表示是原始变量标准化之后的结果,我们在进行因子分析时,spss会自动帮我们标准化。

小结:

  • 和主成分一样,我们得到的f1和f2可以作为新的变量,来进行后续的建模,例如用于聚类、回归
  • 不能用于综合评价,关于评价类的模型,我后续会在博客里面更新
  1. 主成分分析与因子分析的详细推导
  2. 博客中用到的数据集

立志做一名攻城狮