主成分分析和因子分析的理论与速成应用丨R语言和SPSS比较案例
本章内容
□ 主成分分析
□ 探索性因子分析
□ 理解其他潜变量模型
学习计划:
背景
在实际的科学研究中,为了更好地、全面地、完整地把握和认识问题,我们往往对反映问题的多个变量进行大量观测,尽可能多地收集关于分析对象的数据信息。在大多数情况下,这些变量之间可能存在着相关性,从而增加了数据分析的复杂性。为了更能充分有效地利用数据,通常希望用较少的指标来代替原先较多的变量,同时又要求这些较少的指标尽可能多地反映原始变量的信息,而这些指标之间又互不相关。在本章中的主成分分析和因子分析就是解决这类问题的方法之一。
主成分分析(PCA)是一种数据降维技巧,它能将相关变量转化为一组很少的不相关变量,这些无关变量称为主成分。例如,使用PCA可将30个相关(很可能冗余)的环境变量转化为5个无关的成分变量,并且尽可能地保留原始数据集的信息。
探索性因子分析(EFA)是一系列用来发现一组变量的潜在结构的方法。它通过寻找一组更小的、潜在的或隐藏的结构来解释已观测到的、显式的变量间的关系。
PCA与EFA模型间的区别参见下图。
主成分(PC1和PC2)是观测变量(X1到X5)的线性组合。形成线性组合的权重都是通过最大化各主成分所解释的方差来获得,同时还要保证各主成分间不相关。
什么叫最大化各主成分所解释的方差?如何验证各主成分间的独立性?
因子(F1和F2)被当做观测变量的结构基础或“原因”,而不是他们的线性组合。代表观测变量方差的误差(e1到e5)无法用因子来解释。图中的圆圈表示因子和误差无法直接观测,但是可通过变量间的相互关系推导得到。在本例中,因子间带曲线的箭头表示它们之间的相关性。在EFA模型中,相关因子是常见的,但并不是必须的。
1.R中的主成分和因子分析丨R
R的基础安装包提供了PCA和EFA的函数,分别为princomp()和factanal()。本章我们将重点介绍psych包中提供的函数。它们提供了比基础函数更丰富和有用的选项。另外,输出的结果形式也更为社会学家所熟悉,与其他统计软件如(SAS和SPSS)所提供的输出十分相似。
最常见的EFA处理步骤如下:
- 数据预处理。PCA和EFA都根据观测变量间的相关性来推导结果。用户可以输入原始数据矩阵或者相关系数矩阵到principal()和fa()函数中。若输入初始数据,相关系数矩阵将会自动计算,在计算前请确保数据中没有缺失值。
- 选择因子模型。判断是PCA(数据降维)还是EFA(发现潜在结构)更符合你的研究目标。如果选择EFA方法,你还需要选择一种估计因子模型的方法(如最大似然估计)。
- 判断要选择的主成分/因子数目。
- 选择主成分/因子。
- 旋转主成分/因子。
- 解释结果。
- 计算主成分或因子得分。
******************************************************************************************
一、主成分分析
2.主成分分析丨SPSS
2.1主成分分析原理和方法
主成分分析(Principal Component Analysis)的思维就是利用降维思想,将多个互相关联的数值变量转化成少数几个互不相关的综合指标的统计方法。这些综合指标就是原来多个变量的主成分,每个主成分都是原始变量的线性组合,并且各个主成分之间互不相关。
主成分分析的任务之一就是计算主成分,计算步骤是:首先将原有的变量标准化,然后计算各变量之间的相关矩阵、该矩阵的特征根和特征向量,最后将特征根由大到小排列,分别计算出对应的主成分。
主成分分析的另一个任务是确定主成分的个数,确定方法主要有两种:
- 累计贡献率:当前k个主成分的累计贡献率达到某一特定值(一般采用70%以上)时,则保留前k个主成分;
- 特征根:一般选取特征根≥1的主成分。
2.2 主成分分析中的相关概念
- 特征根(Eigenvalue):表示主成分影响力度大小的指标,即引入该主成分后可以解释平均多少原始变量的信息。如果特征根小于1,说明该主成分的解释程度还不如直接引入一个原始变量的平均解释程度大,因此在确定主成分个数时,常常选取特征根大于1的主成分。
- 主成分Zi的方差贡献率,计算公式为:
式中分子表示主成分Zi的方差在全部方差中的比重。这个值越大,表明主成分Zi综合原始变量信息的能力越强。
3.累计贡献率:前K个主成分的累计贡献率定义如下,表示前K个主成分累计提取了原始变量多少的信息:
2.3 主成分分析的用途
主要的用途我们在这里介绍两种常用的:
- 主成分评价:在进行多指标综合评价时,由于要求结果客观、全面,就需要从各个方面用多个指标进行测量,但这样就会使得各观测指标间存在信息重叠,同时还存在量纲、累加时如何确定权重系数等问题。因此使用主成分分析方法进行信息的浓缩,并解决权重的确定等问题。
- 主成分回归:在线性模型中,常用最小二乘法求回归系数的估计。但由于共线性的存在,最小二乘法的估计结果并不是很理想。这时我们可以考虑主成分回归求回归系数的估计,所谓主成分回归使用原始自变量的主成分代替原始自变量做回归分析。多重共线性是由于自变量之间关系复杂、相关性大引起的,而主成分既保留了原指标的绝大部分信息,又有主成分之间互不相关的优点,故借用主成分替代原始指标后,再用最小二乘法建立主成分与目标变量之间的回归方程,所得的回归系数估计能克服“估计不稳定”的缺点。但主成分回归不是无偏估计。
2.4 实例与操作丨SPSS
实例:某研究单位测得20名肝病患者4项肝功能指标:转氨酶(x1)、肝大指数(x2)、硫酸锌浊度(x3)、甲胎球蛋白(x4),试做主成分分析。
- 操作:(用软件,比较简单,这里不再介绍)
- 结果解读:
(1)统计描述:包括均数、标准差和样本量,如下图所示:
(2)相关矩阵:包含偏相关系数及其相应的P值,如下图所示:
(3)主成分结果如下图所示:包括特征根由大到小的排列顺序、各主成分的贡献率和累计贡献率:第一主成分的特征根为1.718,它解释了总变异的42.956%,第二主成分的特征根为1.094,解释了总变异的27.338%。前两个主成分的特征根均大于1,累计贡献率达到了70.295%。由于第三个主成分的特征根接近于1,且其贡献率与第二主成分相近,故本例选取3个主成分,此时累计贡献率达到了94.828%。
(4)成分矩阵如下图:可见第一主成分包含原变量转氨酶(x1)和肝大指数(x2)的信息,因此第一主成分可作为急性肝炎的描述指标。类似的第二主成分包含原变量硫酸锌浊度(x3)的信息,可作为慢性肝炎的描述指标。第三成分可作为原发性肝癌的描述指标。
(5)如下为因子的得分系数矩阵。这是主成分分析的最终结果,通过该系数矩阵可以将主成分表示为各个变量的线性组合。本题可以写出三个主成分的表达式:
Z1=0.534*stdx1+0.526*stdx2+0.067*stdx3+0.124*stdx4;
Z2=0.091*stdx1-0.271*stdx2+0.865*stdx3+0.292*stdx4
Z3=-0.242*stdx1+0.059*stdx2-0.273*stdx3+0.939*stdx4
其中stdxi(i=1、2、3、4)表示指标变量:
stdx1=(x1-138)/88.888
stdx2=(x2-2.325)/1.0548
stdx3=(x3-15)/7.420
stdx4=(x4-35.5)/21.879
(6)成分得分协方差矩阵:
3 主成分分析丨R
PCA的目标是用一组较少的不相关变量代替大量相关变量,同时尽可能保留初始变量的信息,这些推导所得的变量称为主成分,它们是观测变量的线性组合。如第一主成分为:
它是k个观测变量的加权组合,对初始变量集的方差解释性最大。第二主成分也是初始变量的线性组合,对方差的解释性排第二,同时与第一主成分正交(不相关)。后面每一个主成分都最大化它对方差的解释程度,同时与之前所有的主成分都正相交。理论上来说,你可以选取与变量数相同的主成分,但从实用的角度来看,我们都希望用较少的主成分来近似全变量集。下面看一个简单的示例。
数据集USJudgeRatings包含了律师对美国高等法院法官的评分。数据框包含43个观测,12个变量。如下表列出了所有的变量。
3.1 判断主成分的个数丨R
以下是一些可用来判断PCA中需要多少个主成分的准则:
- 根据先验经验和理论知识判断主成分分数;
- 根据要解释变量方差的积累值的阈值来判断需要的主成分数;
- 通过检查变量间kxk的相关系数矩阵来判断保留的主成分数。
最常见的是基于特征值的方法。每个主成分都与相关系数矩阵的特征值相关联,第一主成分与最大的特征值相关联,第二主成分与第二大的特征值相关联,依次类推。Kaiser-Harris准则建议保留特征值大于1的主成分(此与前面一部分介绍的理论一致),特征值小于1的成分所解释的方差比包含在单个变量中的方差更少。
利用fa.parallel()函数,你可以同时对三种特征值判别准则进行评价。对于11种评分,代码如下:
> install.packages("psych")
> library(psych)
> fa.parallel(USJudgeRatings[,-1],fa="pc",n.iter = 100,
+ show.legend=F,main="Scree plot with parallel analysis")
The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
Parallel analysis suggests that the number of factors = NA and the number of components = 1
- 1
- 2
- 3
- 4
- 5
- 6
评价美国法官评分中要保留的主成分个数。碎石图(直线与X符号)、特征值大于1准则(水平线)和100次模拟的平行分析(虚线)都表明保留一个主成分即可。
三种准则表明选择一个主成分即可保留数据集的大部分信息。下一步是使用principal()函数挑选出相应的主成分。
3.2 提取主成分
之前已经介绍过,principal()函数可以根据原始矩阵或者相关系数矩阵做主成分分析。格式为:
principal(r,nfactors=,rotate=,scores=)
- 1
其中:
- r是相关系数矩阵或原始数据矩阵;
- nfactors设定主成分系数(默认为1);
- rotate指定旋转的方法(默认最大方差旋转(varimax));
- scores设定是否需要计算主成分得分(默认不需要)。
使用代码清单14-1中的代码可获取第一主成分。
代码清单14-1 美国法官评分的主成分分析
> library(psych)
> 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
- 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
2 条评论
谢谢!