• R语言多元分析系列之一:主成分分析


    主成分分析(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元素中。


  • 相关阅读:
    卷积:如何成为一个很厉害的神经网络
    卷积的本质及物理意义(全面理解卷积)
    傅里叶分析之掐死教程(完整版)
    buf.writeUInt16BE()
    buf.writeUInt8()函数详解
    buf.writeUIntBE()函数详解
    buf.writeInt32BE()函数详解
    buf.writeInt16BE()函数详解
    buf.writeInt8()函数详解
    buf.writeDoubleBE()函数详解
  • 原文地址:https://www.cnblogs.com/huzs/p/3741993.html
Copyright © 2020-2023  润新知