美文网首页R生信Origin及绘图
PCA(principal component analysis

PCA(principal component analysis

作者: 吴十三和小可爱的札记 | 来源:发表于2019-12-03 18:58 被阅读0次

    1. 简介

    PCA(Principal Components Analysis)即主成分分析,也称主分量分析或主成分回归分析法,是一种无监督的数据降维方法。首先利用线性变换,将数据变换到一个新的坐标系统中;然后再利用降维的思想,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上。这种降维的思想首先减少数据集的维数,同时还保持数据集的对方差贡献最大的特征,最终使数据直观呈现在二维坐标系。

    R语言中可以进行PCA分析的主要有rda(){vegan}、prcomp(){stats}、princomp(){stats} 、PCA(){FactoMineR} 、dudi.pca() {ade4} 、epPCA() {ExPosition};对于分析结果可视化,factoextra包封装了包括分析结果提取和基于ggplot2的数据可视化的函数。

    1.jpeg

    2. 目标

    1. 找到数据中的隐藏模式

    2. 通过减少数据中的噪声和冗余进行降维

    3. 找到相关变量

    3. 实战解析

    1. 确认数据是否需要标准化,函数是否封装了标准化程序。
    2. Supplementary variables and individuals:不用于判断主成分,在结果显示中,他们的坐标轴由参与主成分分析的参数预测得出。
    PCA(X, ind.sup = NULL, quanti.sup = NULL, quali.sup = NULL, graph = TRUE)
    

    X :数据集,每一行是一个样例,列代表观测值。
    ind.sup : 指定Supplementary individuals所在的列
    quanti.sup, quali.sup : 指定定性和定量观测值所在的列

    1. PCA模型构建
    decathlon2.active <- decathlon2[1:23, 1:10]
    res.pca <- prcomp(decathlon2.active, scale.unit = TRUE)
    

    4. 结果分析

    1. 结合str()和summary()函数,可以找到PCA分析结果中的Proportion of Variance 和Cumulative Proportion,然后以dim编号为横坐标,前面的值为纵坐标,可以分别作崖低碎石图和累积贡献率图,直观的表示主成分贡献率和累积贡献率,用以作为选择主成分个数的参考。

    2. 提取得分矩阵(一般是res.pca$x)做散点图。

    3. 提取各变量在不同dim上的占比,做箭头图。(如:dim1 = 0.41, dim 2 = 0.11,那么就以(0,0)为起点,(0.41, 0.11)为终点做带箭头线段。在这里,箭头朝向没有特殊意义,箭头长度表示PC占比。)

    4. 适当的时候可以加上多边形或者椭圆外框。、

    5. 进阶:如果想知道PCA能解释的方差比例计算方式,则需要了解:

      • 特征向量:res.pca$rotation
      • 每个主成分得分的标准差:res.pca$sdev
    # the standard deviations of the principal components
    res.pca$sdev_cal  <- apply(pca$x, 2, sd)
    
    # percent
    round(res.pca$sdev^2/sum(res.pca$sdev^2), 3)
    

    可以看到计算结果和summary结果时完全一致的。

    factoextra包 - 提取并模式化PCA分析结果可视化

    总的来说,fviz_可视化,get_结果提取。

    1. get_eigenvalue:提取特征值,第1列是维度代号,第2列是特征值,第3列是可解释变异的比例,即该特征值能解释的观测值变化的比例。第4列是累计可解释变异的比例 ,数值由依次加上前面的可解释变异的比例得出。从向量空间的角度来看,因为不同特征值对应的特征向量线性无关,把每个特征向量看做是一个坐标轴,特征值是对应坐标轴(即特征向量)上的坐标值。简单来说,就是可以用特征值(坐标)与特征向量(坐标轴)来表示原矩阵。
      主成分的特征值可以帮助确定保留主成分个数,Kaiser-Harris准则建议保留特征值大于1的主成分;或者用p值校正进行选择。

      1.png
    2. fviz_eig (or fviz_eigenvalue):特征值可视化

    variable(观测值)可视化

    1. get_pca_var
    • coord :变量(观测值)的坐标,默认用corrplot 可视化,也可以调用提取数据后散点图或热图表示。


      Rplot01.jpeg
    • cor:观测值(variables)和维度间的相关性,与传统的相关性分析结果不同。

    • cos2:

      • 所有主成分上的cos2的和为1
      • 可用于估计质量,越高代表性越强。
      • 在PCA结果图上,箭头越靠近外面表示在factor map 上的代表性越好,也表示对解释该变组分越重要。
    • contrib:contribution

    # cor - 相关矩阵可视化
    corrplot(var$cos2, is.corr=FALSE)
        
    # cos2 - 柱状图
    # choice - 选择变量"var" or "ind"
    fviz_cos2(res.pca, choice = "var", axes = 1:2)
        
    # contrib - 柱状图
    # 注意axes的选择,这里表示各个variable 在第1、2维度上的贡献率。
    # factoextra包会自动给一个期望的平均贡献率,用红色线表示。
    # chioce 同上
    fviz_contrib(res.pca, choice = "var", axes = 1:2, top = 10)
    
    # 总体展示PCA-variable结果
    # 变量向量(箭头)的排序坐标(顶点坐标)可以进行同比例缩放
    fviz_pca_var(res.pca, col.var = "cos2",
        gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
        repel = TRUE # Avoid text overlapping
        )
    
    • tips:
    1. col.var - variable color:可以用来展示cos2,contrib等PCA分析中的结果,也可以先对数据进行聚类等外部处理,然后在PCA图上表现出来。分组变量用palette 指定颜色,连续变量用 gradient.cols
    2. 可以用dimdesc(){FactoMineR} 提取 dim 相关信息,提取各主成分坐标然后结合单个观测值坐标进行分析。


      1.jpg

    来源:Sunagawa, S., Coelho, L. P., Chaffron, S., Kultima, J.R., Labadie, K., Salazar, G., … & Bork, P. (2015). Structure and function of theglobal ocean microbiome. Science, 348(6237), 1261359-1261359.
    代码示例:

    library("FactoMineR")
    library("factoextra")
    decathlon2.active <- decathlon2[1:23, 1:10]
    
    res.pca <- PCA(decathlon2.active, scale.unit = TRUE, 
                          graph = FALSE)
    summary(res.pca)
    data <- dimdesc(res.pca)
    plot_data<- data$call$X
    ggplot(data = plot_data)+geom_point(aes(x = Dim.1, y = X400m))+
      geom_smooth(method = "lm",aes(x = Dim.1, y = X400m)) +
      geom_text(aes(x = 0, y = 47, label = "R-squared = 0.4922"))
    

    individuals(个体,样品,等样例)可视化

    • coord :同上

    • cos2:同上;col.ind - 用颜色指示值;pointsize - 用点大小指示值。


      Practical Guide to PCA.jpg
    • contrib :同上


      Rplot.jpeg
    • fviz_pca_ind 的参数也是大同小异


      Practical Guide to PCA.jpg

    其他参数

    1. fviz_pca_var(ind):可以用axis参数选择不同主成分维度


      `.jpeg
    2. 调整是否要点标签

    • geom.ind = "point", 只显示点
    • geom.ind = "text" ,只显示标签
    • geom.ind = c("point", "text")
    1. 调整点、线和箭头
    • labelsize:
    • pointsize:
    • arrowsize
    • pointshape
    1. addEllipses 添加椭圆,ellipse.type参数如下:
    • "convex": 多边形区间


      1.jpeg
    • "confidence": 用coord.ellipse(){FactoMineR}绘制置信椭圆

    • "t": assumes a multivariate t-distribution

    • "norm": assumes a multivariate normal distribution.

    • "euclid": draws a circle with the radius equal to level, representing the euclidean distance from the center. This ellipse probably won't appear circular unless coord_fixed() is applied.


      1.jpeg
    1. mean.point : 当参数group.var/ind存在时,控制是否添加各组均值点(barycenters,重心)- 默认添加。
    2. select.ind, select.var: 对作图数据进行筛选。
    3. Axis lines:axes.linetype
    4. 其他图形参数继承自ggplot2

    Biplot

    将 individuals and variables同一张图片上展示

    主成分分析包检索

    定量数据

    psych包

    ropls: PCA, PLS(-DA) and OPLS(-DA) for multivariate analysis and feature selection of omics data

    rda(){vegan}:PCA分析或冗余度分析

    prcomp(){stats}

    princomp(){stats}

    PCA(){FactoMineR}

    dudi.pca() {ade4}

    epPCA() {ExPosition}

    定性数据

    Correspondence Analysis (CA):两组定性、分类数据

    cca(){vegan}

    CA()[FactoMineR]

    ca() [ca]

    dudi.coa() [ade4]

    corresp() [MASS]

    and epCA() [ExPosition]

    Multiple Correspondence Analysis (MCA):多组数据

    MCA() [FactoMineR]

    dudi.acm[ade4]

    epMCA() [ExPosition]

    混合型数据

    Factor Analysis of Mixed Data (FAMD)

    遇到定量数据就类似PCA分析功能,遇到定性数据就类似CA分析。

    PCAmix()[ PCAmixdata]

    Multiple Factor Analysis (MFA):混合、分组数据

    mfa ()[ade4]

    MFAmix()[ PCAmixdata]

    结果分析

    分析结果探索和可视化:ggplot2,plot,factoextra,vegan

    HCPC (Hierarchical Clustering on Principal Component):对结果进行层次聚类

    HCPC() [FactoMineR]

    tips: 生物狗先学vegan,神包!!

    参考资料: Practical Guide to Principal Component Methods in R

    相关文章

      网友评论

        本文标题:PCA(principal component analysis

        本文链接:https://www.haomeiwen.com/subject/etscgctx.html