R生信Origin及绘图

PCA(principal component analysis

2019-12-03  本文已影响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
# 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
    )
  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(个体,样品,等样例)可视化

其他参数

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


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

  1. 调整点、线和箭头
  1. addEllipses 添加椭圆,ellipse.type参数如下:
  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

上一篇下一篇

猜你喜欢

热点阅读