主成分分析和因子分析-R语言机器学习

tidyverse
机器学习,数据分析
Author

Lee

Published

November 1, 2023

1 主成分分析

PCA(主成分分析)是一种数据降维的技巧,它能将大量相关变量转化为一组很少的不相关变量,这些不相关的变量成为主成分。例如使用主成分分析可将30个相关(但可能存在冗余)的变量转化为5个无关的成分变量,并且尽可能的保留原始数据集的信息。

Note

PCA可以理解为挑选最相关的变量线性组合,并在预测模型中使用它们。PCA有助于我们找出数据中变化量最大的变量,同时它也是一种解决数据共线性1问题的方式。

1.1 维度相关问题

以下两个因素会使得数据的维度变得非常高:

  1. 首先是具有不同级别的分类变量。

  2. 其次是数据集中的冗余变量。

当所构建的模型中包含分类变量时,我们使用虚拟变量,并且分类变量中的级别数越多,我们创建的虚拟变量就越多,这会增加维度。冗余变量2代表数据集中的信息不够精简,多个特征描述了同一信息。

冗余变量和共线性会造成许多问题,如破坏参数估计的稳定性、混淆模型解释、增加过拟合风险等。一个最佳的回归模型,应该保证每个预测变量与目标(输出)变量均相关,但相互之间几乎没有关联。如果预测变量本身之间的相关性很高,那么拟合出的模型及时在训练集有较高精度,也可能无法在测试集上得到满意的效果。所以在数据分析前,检测数据的共线性十分重要。

1.2 检测共线性

  • 如果模型中的R平方值很大,则模型的F检验是显著的,但系数估计的t检验不是显著的,此时可能存在多重共线性。

  • 如果变量之间的相关性很大,则存在多重共线性。

  • 通过方差膨胀因子VIF( Equation 1)来检测的多重共线性。

Note

VIF的计算公式如下:

\[ VIF = \frac{1}{1-R^2} \tag{1}\]

当VIF的值大于10,则表明变量之间存在严重的相关性。

在R中有许多方法可以对模型的共线性进行检测。当存在共线性情况时,建议采取如下补救措施:

  • 检查其中一个变量是否重复。

  • 删除冗余变量。

  • 通过收集更多数据增加样本量。

  • 预测变量标准化。

  • 主成分分析、岭回归、最小二乘回归(均为数据降维的方法)。

1.3 主成分分析理论基础

主成分分析经常用于对数据的降维,通过选择具有较高方差的主成分来替代原始的数据。主成分分析的另一个主要用途是解决多重共线性问题。此外,通过仅对所有主成分的子集进行回归,主成分分析可以显著降低基础模型的参数数量。

1.3.1 主成分分析的定义

假设最初的模型中有\(p\)个预测变量\(x_1,x_2...,x_p\),每个变量均有\(n\)条记录,则数据矩阵如下所示:

\[ D= \begin{pmatrix} 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{pmatrix} \]

通过主成分分析,将生成新的数据矩阵\(D^*\)(进行了如 Equation 2 的线性变换),拥有\(k(k<<p)\)个变量,每个变量同样拥有\(n\)条记录。值得注意的是,在生成新矩阵的过程中,实际是产生的一些新的变量的,主成分分析有助于识别数据变化最大的\(k\)个变量。

\[ \begin{pmatrix} U_1 \\ U_2 \\ \vdots \\ U_p \end{pmatrix} = \begin{pmatrix} a_{11} & \cdots & a_{1p} \\ a_{21} & \cdots & a_{2p} \\ \vdots & \ddots & \vdots \\ a_{n1} & \cdots & a_{np} \\ \end{pmatrix} \begin{pmatrix} X_1 \\ X_2 \\ \vdots \\ X_P \end{pmatrix} \tag{2}\]

1.3.2 主成分分析的算法

假设原始模型中最初有\(p\)个预测变量,它们是\(X_1, X_2,...,X_P\)

  1. 计算是\(X_1, X_2,...,X_P\)的方差—协方差矩阵或相关矩阵。

  2. 进行协方差针或相关阵的特征分析。

  3. 通过降低数量级对特征值进行排序,并将它们存储为一组排序的(特征值,特征向量)对。

  4. 计算主成分(Principal Component,PC)的解释方差比例及解释方差的累积和。

  5. 如果在最后一步中计算的累积和非常接近1,则仅选择第一个\(k\)特征值。这个\(k\)个PC足以捕获由原始变量生成的几乎相同量的可变性。

  6. 相应地提取所有\(k\)个特征向量,并且仅通过将它们从左到右并排保持来制作变换矩阵W。该变换矩阵的阶数为\(n×k\)

  7. 最终通过计算以生成\(k\)阶数据矩阵。

当然以上步骤只是需要我们了解即可,在R中可以完全交给计算机来处理。

2 使用R语言进行主成分分析/因子分析

R语言的基础安装包就提供了主成分分析和因子分析的函数,分别为princomp()factanal()。这里我们主要使用psych包中更丰富、提供更多选项的函数来进行主成分/因子分析,它们输出结果的形式也更具可读性。psych包中进行主成分/因子分析的函数如 表 1 所示。

表 1: psych包中有用的主成分/因子分析函数
函数 说明 备注
principal() 主成分分析 含多种可选的方差旋转方法
fa() 因子分析 可用主轴、最小残差、加权最小平方、最大似然估计
fa.parallel() 碎石图 包含平行分析
factor.plot() 主成分/因子分析结果图绘制
fa.diagram() 主成分/因子分析荷载矩阵绘制
scree() 主成分/因子分析碎石图

R中主成分/因子分析的常见步骤如下:

  1. 判断使用方法。数据降维使用PCA,发现潜在结构使用EFA。如果选择使用EFA,还需要选择一种估计因子模型的方法。
  2. 数据预处理。使用principal()fa()函数时要确保输入的数据没有缺失值。
  3. 判断要选择的主成分/因子的数目。
  4. 选择主成分/因子。
  5. 旋转主成分/因子。
  6. 解释结果。
  7. 计算主成分/因子得分。

2.1 主成分分析

主成分分析的目标是用一组较少的不相关变量代替大量相关变量,并尽可能保留初始变量的信息,这些推到所得的变量(即主成分)其实就是观测变量的线性组合。

我们使用USJudgeRatings数据集对R中主成分分析的步骤进行演示,该数据包含了律师对美国高等法院法官的评分,包含43个观测值(即43位律师)和12个变量(即律师对法官的评价指标)。

我们的目标是希望通过较少的复合变量来汇总除CONT外11个变量的评估信息,即简化数据,可以使用主成分分析。原始数据本身不存在缺失值,所以下一步是需要判断所需主成分的数量

2.1.1 判断所需提取的主成分

判断主成分数量可遵循以下准则:

  • 根据先验经验和理论知识判断;
  • 根据要解释的变量的方差的积累值的阈值来判断;
  • 通过检查变量间\(k\times k\)阶相关矩阵的特征值判断,这也是最常见的方法。
    • Kaiser-Harris准则建议保留特征值大于1的主成分。
    • Cattel碎石图绘制特征值与主成分分数的图形,清晰的展示图形弯曲情况,通过图形变化的最大程度来保留主成分。
    • 平行分析则是依据与初始矩阵相同大小的随机数据矩阵判断要提取的特征值,若基于真实数据的某个特征值大于一组随机数据矩阵相应的平均特征值,则该主成分应保留。
    • 以上三种基于特征值的判断方法,可以利用fa.parallel()函数同时展示
library(psych)
fa.parallel(USJudgeRatings[, -1],
  fa = "pc", n.iter = 100, show.legend = FALSE, main = NULL
)
Parallel analysis suggests that the number of factors =  NA  and the number of components =  1 

图 1: 包含平行分析的主成分分析碎石图

图 1 展示了:

  1. 基于观测特征值的碎石检验(由线段和符号x组成);
  2. 根据100个随机数矩阵推到得到的特征均值(红色虚线);
  3. 大于1的特征值准则(\(y=1\)的水平线)

3三种特征值均表明选择一个组成分即可保留数据集的绝大部分信息。下一步就该选择主成分了。

2.1.2 选择/挑选/提取主成分

使用principal()函数提取主成分,基本形式为principal(r, nfactors, rotate, scores)

  • r为相关系数矩阵或原始数据矩阵
  • nfactor为主成分数量
  • rotate指定旋转方法,参看 Section 3
  • scores设定是否需要计算主成分得分(默认为不需要)
pc <- principal(USJudgeRatings[, -1], nfactors = 1)
pc
Principal Components Analysis
Call: principal(r = USJudgeRatings[, -1], nfactors = 1)
Standardized loadings (pattern matrix) based upon correlation matrix
      PC1   h2     u2 com
INTG 0.92 0.84 0.1565   1
DMNR 0.91 0.83 0.1663   1
DILG 0.97 0.94 0.0613   1
CFMG 0.96 0.93 0.0720   1
DECI 0.96 0.92 0.0763   1
PREP 0.98 0.97 0.0299   1
FAMI 0.98 0.95 0.0469   1
ORAL 1.00 0.99 0.0091   1
WRIT 0.99 0.98 0.0196   1
PHYS 0.89 0.80 0.2013   1
RTEN 0.99 0.97 0.0275   1

                 PC1
SS loadings    10.13
Proportion Var  0.92

Mean item complexity =  1
Test of the hypothesis that 1 component is sufficient.

The root mean square of the residuals (RMSR) is  0.04 
 with the empirical chi square  6.21  with prob <  1 

Fit based upon off diagonal values = 1

3 主成分旋转

Footnotes

  1. 在统计学中即为多重共线性,是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。↩︎

  2. 数据中有3个特征,分别为收益、成本、利润率,那么这3个特征就存在冗余,因为第三个特征是通过前两个特征生成的,因此可以删除冗余特征。↩︎