前面的文章我们介绍了什么是因子分析。本文介绍如何使用SAS实现因子分析。
使用SAS实现因子分析
使用PROC FACTOR对数据进行因子分析时,其输入可以是原始数据集、相关系数矩阵、协方差矩阵,还可以是得分系数矩阵。因子载荷的计算方法包括主成分法、极大似然法、
默认情况下,PROC FACTOR会对输入数据集进行主成分分析,因此,若想要使用PROC FACTOR进行因子分析,必须为进行分析的每个变量设置一个共性方差值。过程步PROC FACTOR的一般形式为:
其中:
语句PROC FACTOR中涉及的常见选项如表12.5所示。
PRIORS语句指定VAR语句中变量的共性方差值。
PARTIAL语句指定分析中使用偏相关系数矩阵或者协方差矩阵(Partial Correlation or Covariance Matrix)的变量。
FREQ语句用来指定原始数据集的某个变量,该变量值为对应观测的频数。假设某条观测对应的频数为k,那么分析时,PROC FACTOR会假定该观测在数据集中总共出现了k次。
BY语句指定分组变量。PROC PRINCOMP会根据BY语句中的变量对原数据进行分组分析。若BY语句中的变量多于一个,那么仅最后一个变量起作用。BY语句的使用要求数据已按照BY语句中变量的顺序排序。
表12.5 PROC FACTOR语句常见的选项列表
例12.3:使用PROC FACTOR对sashelp.cars中的变量MPG_City、MPG_Highway、Weight、 Wheelbase及Length进行因子分析。
为了使用PROC FACTOR进行因子分析,需要对PRIORS进行设定,可以将其值设为SMC。至于因子旋转方法,这里考虑使用方差最大正交旋转方法。示例代码如下:
输出结果包括三个部分:基本统计量、初始因子解和旋转因子解。下面结合代码逐一分析。在基本统计量部分,由于关键字CORR的使用,PROC FACTOR输出了相关矩阵。整个基本统计量输出如图12.14所示。
图12.14 PROC FACTOR输出的相关矩阵
代码中,指定了PRIORS为SMC。对应这部分的输出如图12.15所示。
图12.15 PROC FACTOR中选项PRIORS=的部分输出
其余部分是有关因子模式的输出。旋转前后因子对比如图12.16所示。
图12.16 旋转前后因子对比
由于我们采用的是方差最大正交旋转方法,因此旋转后的因子仍然为正交。从图12.16中可以看出,在旋转前,除了变量Weight,其余变量在Factor1和Factor2上均有载荷,而且载荷明显;经过旋转后,除了变量Weight,其余变量则均在某一因子上有高载荷,而在另一因子上的载荷低(这正是我们希望看到的)。
遗憾的是,本例中变量Weight在两个公共因子上的载荷相当,因此,可以把Weight归入公共因子Factor1中,当然也可以考虑归入Factor2。公共因子Factor1包含两个高载荷的变量MPG_City和MPG_Highway,它们均描述的是油耗方面的信息,因此,可以将公共因子Factor1解释为“整车油耗”。同理,通过对Factor2高载荷变量的研究,可以将公共因子Factor2解释成“整车舒适性”(变量Wheelbase和变量Length反映是车内空间大小,变量Weight取值越大的车子驾驶起来越稳定,三者从不同角度解释了舒适性)。
需要注意的是,采用不同的方法得出的公共因子结构可能不一样。即使是同样的公共因子,由于人的主观因素,解释的结果也可能不一样。但是,只要解释合理,分析结果就是合理的。
在12.3.2节中提及了找出公共因子可能不是分析的最终目的。在找出公共因子后,我们可以对数据集中的观测进行得分计算(即确定因子得分)。因子得分计算可以通过在PROC FACTOR语句中指定NFACTORS=选项和OUT=选项来实现;或者使用过程步PROC SCORE来间接实现。PROC SCORE的一般形式如下:
其中:
DATA=指定用于计算得分的原始数据集。
PROC SCORE语句中常见的选项有:OUT=指定输出数据集、SCORE=指定包含因子得分系数的数据集。
VAR语句指定原始数据集中用于计算得分的变量。
在下面的例子中,使用SCORE过程间接实现对FACTOR过程的因子得分计算。
例12.4: 使用PROC FACTOR,根据数据sashelp.cars进行公因子提取与因子得分计算。
在下面的代码中,首先使用PROC FACTOR对数据进行公因子的提取、旋转,并将各种统计量包括因子得分系数输出到数据集work.fact_cars中;接下来,利用PROC SCORE,根据work.fact_cars对原始数据集观测进行得分计算,并最终将结果输出到数据集work.Fscore。
上述代码中PROC FACTOR部分的输出结果与例12.3几乎一样,这里不予以重复解释。数据集work.fact_cars如图12.17所示。
图12.17 数据集Work.Fact_cars
最终,通过SCORE过程计算出的得分数据集work.Fscore的部分结果如图12.18所示。
图12.18 得分数据集work.Fscore
从数据集work.Fscore可以读出原始数据集每条观测在公共因子FACTOR1和FACTOR2上面的得分。与主成分得分一样,上述数据集中之所以会出现负分,是因为计算得分使用的是标准化后的原始数据集。
结束语
主成分分析可以用来对复杂数据进行降维分析;因子分析可以找出隐藏在众多变量后的公共因子。公共因子一般有着现实意义,公共因子可以用来对数据中的观测进行得分计算。读者可以根据分析的目的确定是选择主成分分析还是因子分析。无论采用哪一种分析方法都应该结合原数据集的背景和特征。
主成分分析与因子分析系列文章结束。
回复【数据和代码】可以下载《深入解析SAS》一书的数据和代码。
作者:夏坤庄、徐唯、潘红莲、林建伟
联系客服