R语言实战(14)——主成分分析和因子分析

引言:当数据存在很多个变量,并且有些变量可能无法被观测到时,这种多变量数据过度复杂的信息对我们探索变量间的交互关系是不小的挑战。因此,本章我们将学习两种用来探索和简化多变量复杂关系的常用方法,主成分分析和因子分析。

主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分。
例如,使用PCA可将30个相关(很可能冗余)的环境变量转化为 5个无关的成分变量,并且尽可能地保留原始数据集的信息。
探索性因子分析(EFA)是一系列用来发现一组变量的潜在结构的方法。它通过寻找一组更小的、潜在的或隐藏的结构来解释已观测到的、显式的变量间的关系。
例如,Harman74.cor包含了24个心理测验间的相互关系,受试对象为145个七年级或八年级的学生。应用EFA来探索该数据,276个测验间的相互关系可用4个学生能力的潜在因子(语言能力、反应速度、推理能力和记忆能力)来进行解释。

图14-1 主成分分析和因子分析模型

图中展示了可观测变量(X1到X5)、主成分 (PC1、PC2)、因子(F1、F2)和误差(e1到e5)

主成分(PC1和PC2)观测变量(X1到X5)的线性组合。形成线性组合的权重都是通过最大化各主成分所解释的方差来获得,同时还要保证各主成分间不相关
因子(F1和F2)被当作观测变量的结构基础或“原因”,而不是它们的线性组合。代表观测变量方差的误差(e1到e5)无法用因子来解释。

图中的圆圈表示因子和误差无法直接观测,但是可通过变量间的相互关系推导得到。
因子间带曲线的箭头表示它们之间有相关性。在EFA模型中,相关因子是常见的,但并不是必需的。

两种方法都需要大样本来支撑稳定的结果。所需样本量依赖于因子数目与各因子相关联的变量数,以及因子对变量方差的解释程度

14.1 R中的主成分和因子分析

R的基础安装包提供了PCA和EFA的函数,分别为princomp()和factanal()。
psych包提供了比基础函数更丰富和有用的选项。输出的结果形式也更为社会学家所熟悉,与其他统计软件如(SAS和SPSS)所提供的输出十分相似。

表14-1 psych包中有用的因子分析函数

函数 描述
principal() 含多种可选的方差旋转方法的主成分分析
fa() 可用主轴、最小残差、加权最小平方或最大似然法估计的因子分析
fa.parallel() 含平行分析的碎石图
factor.plot() 绘制因子分析或主成分分析的结果
fa.diagram() 绘制因子分析或主成分的载荷矩阵
scree() 因子分析和主成分分析的碎石图

最常见的步骤如下:
1. 数据预处理。PCA和EFA都根据观测变量间的相关性来推导结果。可以输入原始数据矩阵或者相关系数矩阵到principal()和fa()函数中。若输入初始数据,相关系数矩阵将会被自动计算,在计算前请确保数据中没有缺失值。
2. 选择因子模型。判断是PCA(数据降维)还是EFA(发现潜在结构)更符合研究目标。如果选择EFA方法,还需要选择一种估计因子模型的方法(如最大似然估计)。
3. 判断要选择的主成分/因子数目。
4. 选择主成分/因子。
5. 旋转主成分/因子。
6. 解释结果。
7. 计算主成分或因子得分。

14.2 主成分分析

PCA的目标是用一组较少的不相关变量代替大量相关变量,同时尽可能保留初始变量的信息,这些推导所得的变量称为主成分,它们是观测变量的线性组合。

  • 如第一主成分为: PC1 = a1X1 + a2X2 + … + akXk,它是k个观测变量的加权组合,对初始变量集的方差解释性最大。

  • 第二主成分也是初始变量的线性组合,对方差的解释性排第二,同时与第一主成分正交(不相关)。

  • 后面每一个主成分都最大化它对方差的解释程度,同时与之前所有的主成分都正交。

例:数据集USJudgeRatings
包含了律师对美国高等法院法官的评分。数据框包含43个观测,12个变量。
表14-2 USJudgeRatings数据集中的变量
变量 描述 变量 描述
CONT 律师与法官的接触次数 PREP 审理前的准备工作
INTG 法官正直程度 FAMI 对法律的熟稔程度
DMNR 风度 ORAL 口头裁决的可靠度
DILG 勤勉度 WRIT 书面裁决的可靠度
CFMG 案例流程管理水平 PHYS 体能
DECI 决策效率 RTEN 是否值得保留

1. 判断主成分的个数

可用来判断PCA中需要多少个主成分的准则:

  • 根据先验经验和理论知识判断主成分数;
  • 根据要解释变量方差的积累值的阈值来判断需要的主成分数;
  • 通过检查变量间k×k的相关系数矩阵来判断保留的主成分数。

最常见的是基于特征值的方法。

  • 每个主成分都与相关系数矩阵的特征值相关联

  • 第一主成分与最大的特征值相关联

  • 第二主成分与第二大的特征值相关联,依此类推

Kaiser-Harris准则建议保留特征值大于1的主成分,特征值小于1的成分所解释的方差比包含在单个变量中的方差更少。
Cattell碎石检验绘制了特征值与主成分数的图形。这类图形可以清晰地展示图形弯曲状况,在图形变化最大处之上的主成分都可保留。
平行分析可以进行模拟,依据与初始矩阵相同大小的随机数据矩阵来判断要提取的特征值。若基于真实数据的某个特征值大于一组随机数据矩阵相应的平均特征值,那么该主成分可以保留。

利用fa.parallel()函数,可以同时对三种特征值判别准则进行评价,判断主成分的个数。格式为:

fa.parallel(x,n.obs,fa,n.iter,show.legend)
  1. x为数据框或矩阵;
  2. n.obs为0表示数据框或矩阵,否则表示多少种情况用来寻找相关性;
  3. fa为pc表示主成分分析,为fa表示因子分析,为both表示主成分分析和因子分析;
  4. n.iter指定随机数据模拟的平行分析的次数;
  5. show.legend表示是否显示图例,为TRUE显示,为FALSE不显示。

对于数据集USJudgeRatings中的11种评分(删去了CONT变量),代码如下:

library(psych)    fa.parallel(USJudgeRatings[,-1], fa="pc", n.iter=100,             show.legend=FALSE, main="Scree plot with parallel analysis")  Parallel analysis suggests that the number of factors =  NA  and the number of components =  1 

图14-2 评价美国法官评分中要保留的主成分个数

图形展示了基于观测特征值的碎石检验(由线段和x符号组成)、根据100个随机数据矩阵推导出来的特征值均值(虚线),以及大于1的特征值准则(y=1的水平线)。
三种准则表明选择一个主成分即可保留数据集的大部分信息。

2. 提取主成分

principal()函数可以根据原始数据矩阵或者相关系数矩阵做主成分分析。格式为:

principal(r, nfactors=, rotate=, scores=)
  1. r是相关系数矩阵或原始数据矩阵;
  2. nfactors设定主成分数(默认为1);
  3. rotate指定旋转的方法(默认最大方差旋转(varimax);
  4. scores设定是否需要计算主成分得分(默认不需要)。

美国法官评分的主成分分析,获取第一主成分:

library(psych)    pc <- principal(USJudgeRatings[,-1], nfactors=1)   #输入除去CONT变量的原始数据,并指定获取一个未旋转的主成分    
pc    #由于PCA只对相关系数矩阵进行分析,在获取主成分前,原始数据将会被自动转换为相关系数矩阵  Principal Components Analysis  Call: principal(r = USJudgeRatings[, -1], nfactors = 1)  Standardized loadings (pattern matrix) based upon   correlation matrix                PC1   h2     u2 com #PC1栏包含了成分载荷,指观测变量与主成分的相关系数  INTG 0.92 0.84 0.1565   1 #如果提取不止一个主成分,那么还将会有PC2、PC3等栏  DMNR 0.91 0.83 0.1663   1 #成分载荷(component loadings)可用来解释主成分的含义  DILG 0.97 0.94 0.0613   1 #可以看到,第一主成分(PC1)与每个变量都高度相关  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 #h2栏指成分公因子方差,即主成分对每个变量的方差解释度  WRIT 0.99 0.98 0.0196   1 #u2栏指成分唯一性,即方差无法被主成分解释的比例(1–h2)  PHYS 0.89 0.80 0.2013   1 #例如,体能(PHYS)80%的方差都可用第一主成分来解释,20%不能  RTEN 0.99 0.97 0.0275   1 #相比而言,PHYS是用第一主成分表示性最差的变量                   
                 PC1  SS loadings    10.13  #SS loadings行包含了与主成分相关联的特征值                      #指的是与特定主成分相关联的标准化后的方差值(第一主成分的值为10)  Proportion Var  0.92  #Proportion Var行表示的是每个主成分对整个数据集的解释程度                      #第一主成分解释了11个变量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

例:Harman23.cor数据集

包含305个女孩的8个身体测量指标。数据集由变量的相关系数组成,而不是原始数据集。
表14-3 305个女孩的身体指标间的相关系数(Harman23.cor)

希望用较少的变量替换这些原始身体指标。

#判断要提取的主成分数  library(psych)    fa.parallel(Harman23.cor$cov, n.obs=302, fa="pc", n.iter=100,             show.legend=FALSE, main="Scree plot with parallel analysis")         Parallel analysis suggests that the number of factors =  NA  and the number of components =  2 

图14-3 判断身体测量数据集所需的主成分数

碎石图(直线和x符号)、特征值大于1准则(水平线)和100次模拟(虚线)的平行分析建议保留两个主成分。
图形中的Kaiser-Harris准则、碎石检验和平行分析都建议选择两个主成分。
#身体测量指标的主成分分析:library(psych)    pc <- principal(Harman23.cor$cov, nfactors=2, rotate="none")    pc  Principal Components Analysis  Call: principal(r = Harman23.cor$cov, nfactors = 2, rotate = "none")  Standardized loadings (pattern matrix) based upon correlation matrix                                  PC1   PC2   h2    u2 com  height         0.86 -0.37 0.88 0.123 1.4 #对于高度变量,两者则共解释了其88%的方差  arm.span       0.84 -0.44 0.90 0.097 1.5  forearm        0.81 -0.46 0.87 0.128 1.6  lower.leg      0.84 -0.40 0.86 0.139 1.4 #载荷阵解释了成分和因子的含义  weight         0.76  0.52 0.85 0.150 1.8 #第一主成分与每个身体测量指标都正相关  bitro.diameter 0.67  0.53 0.74 0.261 1.9 #第二主成分与前四个变量负相关  chest.girth    0.62  0.58 0.72 0.283 2.0 #与后四个变量正相关  chest.width    0.67  0.42 0.62 0.375 1.7                         
                       PC1  PC2  SS loadings           4.67 1.77  Proportion Var        0.58 0.22 #第一主成分解释了身体测量指标58%的方差,而第二主成分解释了22%  Cumulative Var        0.58 0.81 #两者总共解释了81%的方差  Proportion Explained  0.73 0.27  Cumulative Proportion 0.73 1.00  
Mean item complexity =  1.7  Test of the hypothesis that 2 components are sufficient.  The root mean square of the residuals (RMSR) is  0.05   Fit based upon off diagonal values = 0.99

3. 主成分旋转

旋转是一系列将成分载荷阵变得更容易解释的数学方法,它们尽可能地对成分去噪。
旋转方法有两种:

  • 正交旋转:使选择的成分保持不相关
  • 斜交旋转:使选择的成分变得相关。

最流行的正交旋转是方差极大旋转,它试图对载荷阵的列进行去噪,使得每个成分只由一组有限的变量来解释(即载荷阵每列只有少数几个很大的载荷,其他都是很小的载荷)。

方差极大旋转的主成分分析,对身体测量数据使用方差极大旋转:

rc <- principal(Harman23.cor$cov, nfactors=2, rotate="varimax")    rc  Principal Components Analysis  Call: principal(r = Harman23.cor$cov, nfactors = 2, rotate = "varimax")  Standardized loadings (pattern matrix) based upon correlation matrix                                  RC1  RC2   h2    u2 com #列的名字都从PC变成了RC,以表示成分被旋转  height         0.90 0.25 0.88 0.123 1.2 #RC1栏的载荷表示第一主成分主要由前四个变量来解释(长度变量)  arm.span       0.93 0.19 0.90 0.097 1.1 #RC2栏的载荷表示第二主成分主要由变量5到变量8来解释(容量变量)  forearm        0.92 0.16 0.87 0.128 1.1 #两个主成分仍不相关,对变量的解释性不变,这是因为变量的群组没有发生变化  lower.leg      0.90 0.22 0.86 0.139 1.1  weight         0.26 0.88 0.85 0.150 1.2  bitro.diameter 0.19 0.84 0.74 0.261 1.1  chest.girth    0.11 0.84 0.72 0.283 1.0  chest.width    0.26 0.75 0.62 0.375 1.2                         
                       RC1  RC2  SS loadings           3.52 2.92  Proportion Var        0.44 0.37 #各个主成分对方差的解释度改变(成分1从58%变为44%,成分2从22%变为37%)  Cumulative Var        0.44 0.81 #两个主成分旋转后的累积方差解释性没有变化(81%)  Proportion Explained  0.55 0.45 #各成分的方差解释度趋同  Cumulative Proportion 0.55 1.00 #此时应该称它们为成分而不是主成分(因为单个主成分方差最大化性质没有保留)  
Mean item complexity =  1.1  Test of the hypothesis that 2 components are sufficient.  The root mean square of the residuals (RMSR) is  0.05   Fit based upon off diagonal values = 0.99 

4. 获取主成分得分

利用principal()函数,获得每个调查对象在该主成分上的得分。

从原始数据中获取成分得分,获取美国法官评分例子中提取主成分的得分:

library(psych)    pc <- principal(USJudgeRatings[,-1], nfactors=1, score=TRUE)    head(pc$scores)                                              PC1  AARONSON,L.H.  -0.1857981  ALEXANDER,J.M.  0.7469865  ARMENTANO,A.J.  0.0704772  BERDON,R.I.     1.1358765  BRACKEN,J.J.   -2.1586211  BURNS,E.B.      0.7669406

当scores = TRUE时,主成分得分存储在principal()函数返回对象的scores元素中。
如果有需要,还可以获得律师与法官的接触频数与法官评分间的相关系数:

cor(USJudgeRatings$CONT, pc$score)                                PC1    [1,] -0.008815895
当主成分分析基于相关系数矩阵时,原始数据便不可用了,也不可能获取每个观测的主成分得分,但是可以得到用来计算主成分得分的系数。
例:身体测量数据
数据为各个身体测量指标间的相关系数,但是没有305个女孩的个体测量值。
获取主成分得分的系数:
library(psych)    rc <- principal(Harman23.cor$cov, nfactors=2, rotate="varimax")    round(unclass(rc$weights), 2)                                    RC1   RC2  height          0.28 -0.05  arm.span        0.30 -0.08  forearm         0.30 -0.09  lower.leg       0.28 -0.06  weight         -0.06  0.33  bitro.diameter -0.08  0.32  chest.girth    -0.10  0.34  chest.width    -0.04  0.27

利用如下公式可得到主成分得分:
PC1 = 0.28×height + 0.30×arm.span + 0.30×forearm + 0.29×lower.leg – 0.06×weight – 0.08×bitro.diameter – 0.10×chest.girth – 0.04×chest.width
PC2 = -0.05×height – 0.08×arm.span – 0.09×forearm – 0.06×lower.leg + 0.33×weight + 0.32×bitro.diameter + 0.34×chest.girth + 0.27×chest.width
两个等式都假定身体测量指标都已标准化(mean=0,sd=1)。
从实际角度考虑,可以进一步简化方法,将第一主成分看作前四个变量标准化得分的均值;类似地,将第二主成分看作后四个变量标准化得分的均值。

14.3 探索性因子分析

EFA的目标是通过发掘隐藏在数据下的一组较少的、更为基本的无法观测的变量,来解释一组可观测变量的相关性。
这些虚拟的、无法观测的变量称作因子每个因子被认为可解释多个观测变量间共有的方差,因此准确来说,它们应该称作公共因子
模型的形式为:

  1. Xi是第i个可观测变量(i=1…k)
  2. Fj是公共因子(j=1…p),并且p<k
  3. Ui是Xi变量独有的部分(无法被公共因子解释)
  4. ai可认为是每个因子对复合而成的可观测变量的贡献值

例:Harman74.cor数据集

每个个体在24个心理学测验上的观测得分,是根据四个潜在心理学因素的加权能力值组合而成。112个人参与了六个测验,包括非语言的普通智力测验(general)、画图测验(picture)、积木图案测验(blocks)、迷宫测验(maze)、 阅读测验(reading)和词汇测验(vocab)。

用EFA来对六个心理学测验间的相关性进行分析。
数据集ability.cov提供了变量的协方差矩阵,可用cov2cor()函数将其转化为相关系数矩阵。数据集没有缺失值。

options(digits=2)      covariances <- ability.cov$cov    correlations <- cov2cor(covariances)    correlations                  general picture blocks maze reading vocab  general    1.00    0.47   0.55 0.34    0.58  0.51  picture    0.47    1.00   0.57 0.19    0.26  0.24  blocks     0.55    0.57   1.00 0.45    0.35  0.36  maze       0.34    0.19   0.45 1.00    0.18  0.22  reading    0.58    0.26   0.35 0.18    1.00  0.79  vocab      0.51    0.24   0.36 0.22    0.79  1.00

要寻求用来解释数据的潜在结构,可使用EFA方法。

1. 判断需提取的公共因子数

用fa.parallel()函数可判断需提取的因子数:

library(psych)    covariances <- ability.cov$cov    correlations <- cov2cor(covariances)    fa.parallel(correlations, n.obs=112, fa="both", n.iter=100,            main="Scree plots with parallel analysis") #fa="both",因子图形将同时展示主成分和公共因子分析的结果          Parallel analysis suggests that the number of factors =  2  and the number of components =  1

图14-4 判断心理学测验需要保留的因子数

图中同时展示了PCA和EFA的结果。PCA结果建议提取一个或者两个成分,EFA建议提取两个因子。

  • 使用PCA方法,可能会选择一个成分(碎石检验和平行分析)或者两个成分(特征值大于1)。当摇摆不定时,高估因子数通常比低估因子数的结果好,因为高估因子数一般较少曲解“真实”情况。

  • EFA的结果,提示显然需提取两个因子。碎石检验的前两个特征值(三角形)都在拐角处之上,并且大于基于100次模拟数据矩阵的特征值均值。对于EFA,Kaiser-Harris准则的特征值数大于0,而不是1。图形中该准则也建议选择两个因子。

2. 提取公共因子

可以使用fa()函数提取因子,格式如下:

fa(r, nfactors=, n.obs=, rotate=, scores=,fm=)

1. r是相关系数矩阵或者原始数据矩阵;

2. nfactors设定提取的因子数(默认为1);

3. n.obs是观测数(输入相关系数矩阵时需要填写);

4. rotate设定旋转的方法(默认互变异数最小法);

5. scores设定是否计算因子得分(默认不计算);

6. fm设定因子化方法(默认极小残差法)。

与PCA不同,提取公共因子的方法很多,包括最大似然法(ml)、主轴迭代法(pa)、加权最小二乘法(wls)、广义加权最小二乘法(gls)和最小残差法(minres)。
常用最大似然法,因为它有良好的统计性质;最大似然法不会收敛,可使用主轴迭代法效果会很好。

使用主轴迭代法(fm=”pa”)提取未旋转的因子:

fa <- fa(correlations, nfactors=2, rotate="none", fm="pa")    fa  Factor Analysis using method =  pa  Call: fa(r = correlations, nfactors = 2, rotate = "none", fm = "pa")Standardized loadings (pattern matrix) based upon correlation matrix                    PA1   PA2   h2    u2 com  general 0.75  0.07 0.57 0.432 1.0picture 0.52  0.32 0.38 0.623 1.7blocks  0.75  0.52 0.83 0.166 1.8maze    0.39  0.22 0.20 0.798 1.6reading 0.81 -0.51 0.91 0.089 1.7vocab   0.73 -0.39 0.69 0.313 1.5                       PA1  PA2  SS loadings           2.75 0.83Proportion Var        0.46 0.14Cumulative Var        0.46 0.60 #两个因子解释了六个心理学测验60%的方差  Proportion Explained  0.77 0.23Cumulative Proportion 0.77 1.00Mean item complexity =  1.5Test of the hypothesis that 2 factors are sufficient. The degrees of freedom for the null model are  15  and the objective function was  2.5  The degrees of freedom for the model are 4  and the objective function was  0.07  The root mean square of the residuals (RMSR) is  0.03   The df corrected root mean square of the residuals is  0.06   Fit based upon off diagonal values = 0.99  Measures of factor score adequacyPA1  PA2Correlation of (regression) scores with factors   0.96 0.92  Multiple R square of scores with factors          0.93 0.84  Minimum correlation of possible factor scores     0.86 0.68

因子载荷阵的意义并不太好解释,此时使用因子旋转将有助于因子的解释。

2. 因子旋转

可以使用正交旋转或者斜交旋转来旋转两个因子的结果。

用正交旋转提取因子:

fa.varimax <- fa(correlations, nfactors=2, rotate="varimax", fm="pa")    fa.varimax  Factor Analysis using method =  pa  Call: fa(r = correlations, nfactors = 2, rotate = "varimax", fm = "pa")  Standardized loadings (pattern matrix) based upon correlation matrix                    PA1  PA2   h2    u2 com  general 0.49 0.57 0.57 0.432 2.0 #非语言的普通智力测量在两个因子上载荷较为平均  picture 0.16 0.59 0.38 0.623 1.1 #这表明存在一个语言智力因子和一个非语言智力因子  blocks  0.18 0.89 0.83 0.166 1.1 #画图、积木图案和迷宫在第二因子上载荷较大  maze    0.13 0.43 0.20 0.798 1.2  reading 0.93 0.20 0.91 0.089 1.1 #阅读和词汇在第一因子上载荷较大  vocab   0.80 0.23 0.69 0.313 1.2                                                             PA1  PA2  SS loadings           1.83 1.75  Proportion Var        0.30 0.29  Cumulative Var        0.30 0.60  Proportion Explained  0.51 0.49  Cumulative Proportion 0.51 1.00  Mean item complexity =  1.3  Test of the hypothesis that 2 factors are sufficient.  The degrees of freedom for the null model are  15  and the objective function was  2.5  The degrees of freedom for the model are 4  and the objective function was  0.07   The root mean square of the residuals (RMSR) is  0.03   The df corrected root mean square of the residuals is  0.06   Fit based upon off diagonal values = 0.99  Measures of factor score adequacy                                                                                                                     PA1  PA2  Correlation of (regression) scores with factors   0.96 0.92  Multiple R square of scores with factors          0.91 0.85  Minimum correlation of possible factor scores     0.82 0.71

使用正交旋转将人为地强制两个因子不相关。可以使用斜交转轴法,比如promax,允许两个因子相关

用斜交旋转提取因子:

library(GPArotation)    fa.promax <- fa(correlations, nfactors=2, rotate="promax", fm="pa")    fa.promax  Factor Analysis using method =  pa  Call: fa(r = correlations, nfactors = 2, rotate = "promax", fm = "pa")   Warning: A Heywood case was detected.   Standardized loadings (pattern matrix) based upon correlation matrix                      PA1   PA2   h2    u2 com  #PA1和PA2栏中的值组成了因子模式矩阵  general  0.37  0.48 0.57 0.432 1.9  picture -0.03  0.63 0.38 0.623 1.0  blocks  -0.10  0.97 0.83 0.166 1.0  maze     0.00  0.45 0.20 0.798 1.0  reading  1.00 -0.09 0.91 0.089 1.0  vocab    0.84 -0.01 0.69 0.313 1.0                                                PA1  PA2  SS loadings           1.83 1.75  Proportion Var        0.30 0.29  Cumulative Var        0.30 0.60  Proportion Explained  0.51 0.49  Cumulative Proportion 0.51 1.00   With factor correlations of             PA1  PA2   #因子关联矩阵显示两个因子的相关系数为0.55,相关性很大  PA1 1.00 0.55   #如果因子间的关联性很低,可能需要重新使用正交旋转来简化问题。  PA2 0.55 1.00  Mean item complexity =  1.2  Test of the hypothesis that 2 factors are sufficient.  The degrees of freedom for the null model are  15  and the objective function was  2.5  The degrees of freedom for the model are 4  and the objective function was  0.07   The root mean square of the residuals (RMSR) is  0.03   The df corrected root mean square of the residuals is  0.06   Fit based upon off diagonal values = 0.99  Measures of factor score adequacy                                                                                                                     PA1  PA2  Correlation of (regression) scores with factors   0.97 0.94  Multiple R square of scores with factors          0.93 0.88  Minimum correlation of possible factor scores     0.86 0.77

可以看出正交旋转和斜交旋转的不同之处:

  • 对于正交旋转,因子分析的重点在于因子结构矩阵(变量与因子的相关系数);
  • 对于斜交旋转,因子分析会考虑三个矩阵:因子结构矩阵、因子模式矩阵和因子关联矩阵。

因子模式矩阵即标准化的回归系数矩阵。它列出了因子预测变量的权重。
因子关联矩阵即因子相关系数矩阵。

因子结构矩阵(或称因子载荷阵)没有被列出来,可以使用公式F = P*Phi得到,其中F是因子载荷阵,P为因子模式矩阵,Phi为因子关联矩阵。
下面的函数即可进行该乘法运算:

fsm <- function(oblique) {    if (class(oblique)[2]=="fa" & is.null(oblique$Phi)) {        warning("Object doesn't look like oblique EFA")    } else {          P <- unclass(oblique$loading)    F <- P %*% oblique$Phi    colnames(F) <- c("PA1""PA2")return(F)} fsm(fa.promax)                      PA1  PA2    general 0.64 0.69picture 0.32 0.61blocks  0.43 0.91maze    0.25 0.45reading 0.95 0.46vocab   0.83 0.45

可以看到变量与因子间的相关系数,与正交旋转所得因子载荷阵相比,该载荷阵列的噪音比较大,因为之前允许潜在因子相关。虽然斜交方法更为复杂,但模型将更符合真实数据。

使用factor.plot()或fa.diagram()函数,可以绘制正交或者斜交结果的图形。

factor.plot(fa.promax, labels=rownames(fa.promax$loadings))

图14-5 数据集ability.cov中心理学测验的两因子图形

词汇和阅读在第一个因子(PA1)上载荷较大,而积木图案、画图和迷宫在第二个因子(PA2)上载荷较大。普通智力测验在两个因子上较为平均。

fa.diagram(fa.promax, simple=FALSE)

图14-6 数据集ability.cov中心理学测验的两因子斜交旋转结果图

4. 因子得分

相比PCA,EFA并不那么关注计算因子得分。
在fa()函数中添加score = TRUE选项(原始数据可得时)便可获得因子得分。另外还可以得到得分系数(标准化的回归权重),它在返回对象的weights元素中。
例:ability.cov数据集

通过二因子斜交旋转法便可获得用来计算因子得分的权重:

fa.promax$weights          PA1   PA2    general 0.078 0.211    picture 0.020 0.090    blocks  0.037 0.702    maze    0.027 0.035    reading 0.743 0.030    vocab   0.177 0.036   

与可精确计算的主成分得分不同,因子得分只是估计得到的。它的估计方法有多种,fa()函数使用的是回归方法。

5. 主成分/探索性因子分析的分析步骤

图14-7 主成分/探索性因子分析的分析步骤图

14.4 小结

本章我们学习了主成分分析(PCA)和探索性因子分析(EFA)两种方法的模型和分析步骤,学习了判断需提取的主成分/因子数的方法、提取主成分/因子和通过旋转增强解释力的方法,以及获得主成分/因子得分的技巧。在下一章,我们将会讨论如何对时间序列数据进行描述以及预测,敬请期待~

生物信息学

R语言实战(13)——广义线性模型

2019-12-17 21:49:00

生物信息学

R语言实战(15)——时间序列

2019-12-17 21:52:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索