主成分分析是一种降维分析方法,是一种检验多个变量之间相关性的多元统计方法。揭示多个变量的内部结构,即从原始变量中推导出几个主成分,使它们尽可能多地保留原始变量的信息,并且彼此不相关。
为什么要降维
1)多重共线性——预测变量之间存在一定程度的相关性。多重共线性会导致解空间不稳定,从而导致结果不一致。
2)高维空间本质上是稀疏的。
3)变量太多会阻碍搜索规则的建立。
4)仅在变量级别进行分析可能会忽略变量之间的潜在联系。例如,多个预测变量的绑定可以反映数据的某个方面。
主成分满足的条件:
1)每个主成分P都是原始变量的线性组合,有多少个原始变量就有多少个主成分。任何主成分都可以表示为:
2)公式中未知系数aij满足平方和为1;
3)P1是线性组合中方差最大的,其次是P2,P3,…Pm,主成分相互不相关。
主成分分析过程
1)数据预处理,可以直接使用原始数据,也可以使用相关系数矩阵;
2)@ >选择主成分个数(有3种方法可供参考,1:保留特征值大于1的主成分;2:砾石图,图中变化最大的主成分以上可以3:并行分析,比较真实数据的特征值和模拟数据的特征值,保留特征值大于模拟数据的主成分)
2)0@>提取主成分
4)主成分旋转,当提取多个主成分时,旋转它们可以使结果更具可解释性
2)2@>解释结果
2)3@>计算主成分分数
应用
主成分分析使用 psych 包中的 principal() 函数。下面是对该函数中参数的解释:
p>
principal(r, nfactors = 1, 残差 = FALSE,
rotate=”varimax”,n.obs=NA, covar=FALSE,
scores=TRUE ,missing=FALSE,
impute=”median”,oblique.scores=TRUE,
method=”regression”,…)
r指定输入数据,如果输入是原始数据,R会自动计算其相关系数矩阵;
nfactors 指定主成分的个数;
residuals 是否显示主成分模型的残差,默认不显示;
rotate指定模型旋转方式,默认为最大方差方式;
n.obs 如果输入数据是相关系数矩阵,则必须指定观察到的样本量
covar 是一个逻辑参数。如果输入数据是原始数据或方阵(如协方差矩阵),R会将其转换为相关系数矩阵;
scores 是否计算主成分分数;
缺失缺失值处理方式,如果scores为TRUE,缺失值也为TRUE,缺失值将被中位数或均值替换;
impute 指定缺失值的替换方法,默认为中值替换;
method指定主成分得分的计算方法,默认使用回归法计算。
#收集数据,数据来自吴希志老师的PPT
x1
x2
x3
x4
x5
我的数据
其中,x1 是总人口; x2 是员工总数; x3 为中学平均学龄; x4 是主要的服务项目数; x5 是中等价格。
#加载心理包
图书馆(心理)
#选择主成分个数
fa.parallel(x = my.data , fa=”pc”)
2)4@>
从上图中的结果可以看出,这里选择了两个主成分。
#提取主成分
电脑
电脑
2)5@>
主函数默认为对原始数据进行相关系数矩阵的变换,这里不进行主成分的旋转。 PC1和PC2是分量载荷,是变量与主分量之间的相关系数。系数可以写成上面提到的主成分公式。 h2 用主成分解释每个变量的方差,u2 是不能用主成分解释的比例。从上图可以看出,第一主成分解释了5个变量62%的方差,第一主成分和第二主成分完全解释了5个变量的方差。
#旋转主成分,这里使用最常用的方差最大正交旋转法
rc
rc
2)6 @>
通过最大方差法的旋转,发现PC1和PC2的值与前面的相差很大求方阵特征值 r语言,更容易找出哪些变量主要由主成分解释。这里PC1可以由x2)7@ >x4和x5变量来解释,而PC2可以由x1和x3变量来解释。
#计算每个主成分的分数
spc
分数
分数
2)8@>
一般情况下,观察可以通过每个主成分的得分来标记综合得分,权重的设置可以通过特征根的值来确定。
因素分析
因子分析也是一种降维技术,通过降维来挖掘隐藏在数据中的不可观测变量,这些变量可以解释可观测变量之间的相关性。因子分析与主成分分析最大的区别在于,每个自变量都是因子的线性组合,具体的数学表达式可以表示为:
2)9@>
相关因子分析 过程与主成分分析基本相同,此处不再赘述。
应用
因子分析使用 psych 包中的 fa() 函数。下面是函数中参数的解释:
fa(r,nfactors=1 ,n.obs = NA,n.iter=1, rotate=”oblimin”,
scores=”regression”,residuals=FALSE,SMC=TRUE,
covar=FALSE ,missing=FALSE,impute=”median”,
min.err = 0.001, max.iter = 50,symmetric=TRUE,
warnings=TRUE, fm=”minres”,alpha=.1,p=.05,
oblique.scores=FALSE,np.obs,use=”pairwise”,cor=”cor”,…)
r 为输入数据,可以是原始数据或协方差矩阵或相关系数矩阵。如果是原始数据求方阵特征值 r语言,R会计算它的相关系数矩阵,如果是协方差矩阵,也会将其转换为相关系数矩阵,除非covar为TRUE;
nfactors指定因子个数,默认为1个因子;
n.iter采用bootstrap方法进行因子分析,可以指定迭代次数,默认1次;
rotate指定因子旋转方式,默认为最小倾斜方式进行旋转;
scores采用回归法计算因子得分;
residuals计算因子模型的残差默认不计算;
SMC使用多重相关系数的平方或1作为共同度的初始值;
n.obs、covar、missing、impute同主成分分析参数;
min.err 指定最小误差值,使变量common degree在迭代过程中小于该值;
max.iter 指定收敛时的最大迭代次数;
fm指定提取公因子的方法,默认使用最小二乘法;
这里需要指出的是,如果得到的数据不是原始数据,而是协方差矩阵,可以使用cov2cor()函数将协方差矩阵转换为相关系数矩阵。
#选择因子个数
图书馆(心理)
fa.parallel(x = my.data, fa=”fa”)
在选择因子个数的时候,值得注意的是特征值大于0的因子被保留,不大于1。上图结果表明这里选择了2个因子。
#提取因子(最大似然法(ml)具有更好的统计特性,但有时不会收敛,这种情况可以使用主轴迭代法(pa))
f
f
结果帧与主成分的返回结果类似,这里不再详述。
#因子轮换有助于更好地解释因子
f
f
#计算因子分值
sf
sf$scores
其他关于主成分或因子分析的R包
FactoMineR 包不仅提供 PCA 和 EFA 方法,还包含潜在变量模型。它有很多principal()和fa()函数没有考虑的参数选项,比如数值变量和分类变量的使用方法。 FAiR 包使用遗传算法来估计因子分析模型,这增强了模型参数估计能力以处理不等式约束。 GPARotation 包提供了许多因子旋转方法。 nFactors 包提供了许多确定因子数量的方法。
我个人认为主成分和因子分析结果的解释是最难的,需要了解分析的数据,包括数据各个维度之间的关系,行业的特点,等。本文主要是使用R语言实现主成分和因子分析。具体理论知识请参考以下参考资料。
参考文献
[1]统计建模和R语言
[2]R 语言实践
[3]
p>
[4]
[5]
[6]
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 欧资源网