之前我们在十七讲,将主成分分析的原理和计算过程了解了一遍,今天我们用工具R来实现这一模型.由于R软件中有多个函数可以处理这件事情,所以我们选用两个主要的来实现,一个是R自带的函数princomp和factannal,这个比较基础,但能让我们更加清楚计算的过程,另外一个是扩展包psych提供的函数,非常的方便快捷.
先看数据集:USJudgeRatings,这是美国律师对高等法院的法官评分,从各个方面,分别是,律师与法官接触次数,法官的正直程度,风度,勤勉度,案例水平,决策效率,准备工作,对法律的熟悉度,口头裁决可靠度,书面裁决可靠度,体能,是否值得保留.
按照主成分的计算过程可分为:
(1)标准化数据
(2)计算相关系数矩阵
(3)计算相关系数矩阵的特征值和特征矩阵
(4)主成分贡献率及累计贡献率,可以根据特征值的比率来计算
(5)计算主成分载荷,也就是主成分和原始变量的系数
(6)得到个主成分的值
1.
判断主成分的个数
准则有几条:
A.根据经验与理论进行选择
B.根据累积方差的门槛值,例如选择使累积方差达到80%的主成分个数。
C.根据相关系数矩阵的特征值,选择特征值大于1的主成分。
方法一:由于我们是通过特征值大小来找主成分的次序,所以KAISER-Harris准则保留特征值大于1的主成分—-碎石图
方法二:用相同大小的随机数模拟原始矩阵,若原来矩阵特征值大于模拟的相应平均特征值则主成分保留.
install.packages("psych") library(psych) fa.parallel(USJudgeRatings[,-1],fa="pc",n.iter = 100,show.legend = F) abline(h=1,col="green")
其中绿线表示特征值=1,那么大于1的只有一个主成分.
而红色虚线表示平行分析,只有一个主成分大于模拟数据的特征值.
2.
提取主成分
principal(as.matrix(USJudgeRatings[,-1]),nfactors = 1,scores = T)
其中PC1表示主成分1,下面的值表示与各个变量的相关系数.
h2表示主成分对每个变量的方差解释度.
u2表示主成分无法对变量的方差解释比例.
ss loading与主成分相关联的特征值.
proportion var表示 主成分的累积解释程度.
3.
主成分旋转
将一些列成分载荷阵变得更容易解释,通常是正交旋转,和斜交旋转.
此例 的结论就是,选取一个主成分,能对数据集的解释比例达到92%.
ppv原创文章,未经允许禁止转载