主成分分析(principal components analysis, PCA)是一种分析、简化数据集的技术。它把原始数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是在处理观测数目小于变量数目时无法发挥作用,例如基因数据。
R语言中进行主成分分析可以采用基本的princomp函数,将结果输入到summary和plot函数中可分别得到分析结果和碎石图。但psych扩展包更具灵活性。
1 选择主成分个数 选择主成分个数通常有如下几种评判标准:
-
根据经验与理论进行选择
-
根据累积方差贡献率 ,例如选择使累积方差贡献率达到80%的主成分个数。
-
根据相关系数矩阵的特征值,选择特征值大于1的主成分。
另一种较为先进的方法是平行分析(parallel
analysis)。该方法首先生成若干组与原始数据结构相同的随机矩阵,求出其特征值并进行平均,然后和真实数据的特征值进行比对,根据交叉点的位置来选择主成分个数。我们选择USJudgeRatings数据集举例,首先加载psych包,然后使用fa.parallel函数绘制下图,从图中可见第一主成分位于红线上方,第二主成分位于红线下方,因此主成分数目选择1。
fa.parallel(USJudgeRatings[,-1], fa="pc", n.iter=100, show.legend=FALSE)
2 提取主成分 pc=principal(USJudgeRatings[,-1],nfactors=1)
PC1 h2 u2 1 0.92 0.84 0.1565 2 0.91 0.83 0.1663 3 0.97 0.94 0.0613 4 0.96 0.93 0.0720 5 0.96 0.92 0.0763 6 0.98 0.97 0.0299 7 0.98 0.95 0.0469 8 1.00 0.99 0.0091 9 0.99 0.98 0.0196 10 0.89 0.80 0.2013 11 0.99 0.97 0.0275
PC1 SS loadings 10.13 Proportion Var 0.92
从上面的结果观察到,PC1即观测变量与主成分之间的相关系数,h2是变量能被主成分解释的比例,u2则是不能解释的比例。主成分解释了92%的总方差。注意此结果与princomp函数结果不同,princomp函数返回的是主成分的线性组合系数,而principal函数返回原始变量与主成分之间的相关系数,这样就和因子分析的结果意义相一致。
3 旋转主成分 旋转是在保持累积方差贡献率不变条件下,将主成分负荷进行变换,以方便解释。成分旋转这后各成分的方差贡献率将重新分配,此时就不可再称之为“主成分”而仅仅是“成分”。旋转又可分为正交旋转和斜交旋转。正交旋转的流行方法是方差最大化,需要在principal中增加rotate='varimax'参数加以实现。也有观点认为主成分分析一般不需要进行旋转。
4 计算主成分得分
主成分得分是各变量的线性组合,在计算出主成分得分之后,还可以将其进行回归等做进一步分析处理。但注意如果输入数据不是原始数据时,则无法计算主成分得分。我们需要在principal中增加score=T的参数设置,结果将存放在结果的score元素中。
|
请发表评论