|
函数型的,应该可以采用基本的princomp函数,将结果输入到summary和plot函数中可分别得到分析结果和碎石图。但psych扩展包更具灵活性。
1 选择主成分个数
选择主成分个数通常有如下几种评判标准:
根据经验与理论进行选择
根据累积方差贡献率 ,例如选择使累积方差贡献率达到80%的主成分个数。
根据相关系数矩阵的特征值,选择特征值大于1的主成分。
另一种较为先进的方法是平行分析(parallel analysis)。该方法首先生成若干组与原始数据结构相同的随机矩阵,求出其特征值并进行平均,然后和真实数据的特征值进行比对,根据交叉点的位置来选择主成分个数。
我们选择USJudgeRatings数据集举例:
该数据集说明:
[,1] CONT Number of contacts of lawyer with judge.
[,2] INTG Judicial integrity.
[,3] DMNR Demeanor.
[,4] DILG Diligence.
[,5] CFMG Case flow managing.
[,6] DECI Prompt decisions.
[,7] PREP Preparation for trial.
[,8] FAMI Familiarity with law.
[,9] ORAL Sound oral rulings.
[,10] WRIT Sound written rulings.
[,11] PHYS Physical ability.
[,12] RTEN Worthy of retention.
首先加载psych包,然后使用fa.parallel函数绘制下图,从图中可见第一主成分位于红线上方,第二主成分位于红线下方,因此主成分数目选择1。
library(psych)
fa.parallel(USJudgeRatings[,-1], fa="pc",n.iter=100, show.legend=FALSE)
2 提取主成分
pc=principal(USJudgeRatings[,-1],nfactors=1)
pc的结果如下
PC1 h2 u2
INTG 0.92 0.84 0.1565
DMNR 0.91 0.83 0.1663
DILG 0.97 0.94 0.0613
CFMG 0.96 0.93 0.0720
DECI 0.96 0.92 0.0763
PREP 0.98 0.97 0.0299
FAMI 0.98 0.95 0.0469
ORAL 1.00 0.99 0.0091
WRIT 0.99 0.98 0.0196
PHYS 0.89 0.80 0.2013
RTEN 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元素中。
|