PCA(principal component analysis,主成分分析)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容