在单细胞流程中,需要选定合适的主成分数量然后再进行后续的分析,过多和过少的主成分都可能会为后续的分析带来不同程度的影响。
因此我们在分析的时候通常会看一下ElbowPlot,在 ElbowPlot 中,肘部位置通常对应的是方差贡献急剧下降的位置。你可以通过观察图形找到曲线弯曲的地方(即“肘部”位置),并且该位置后的主成分所解释的方差增益较小,意味着添加更多主成分可能不会对数据的解释带来显著的提升。但ElbowPlot并不会直接了当的告诉大家具体的数值,不过也可以从曲线由陡峭变平缓的感觉来判断大概在8-15之间可能存在最佳主成分数量值。
同时关于这个问题也已经被很多老师所讨论过了,比如生信宝典的陈同教授在既往的推文中列出了Biostars (How to Choose PCs from a HeatMap)上Kevin Blighe教授的评论——“每个主成分(PC)会解释数据集中总体变异的一个比例。因此,仅仅说“选择5个”或“选择10个”主成分是没有意义的,因为考虑到可能仅前3个主成分就能解释80%的变异,甚至前20个主成分就能解释大部分变异。因此,我只能假设(并希望)您所使用的程序能够输出或存储每个主成分所解释的变异比例”,简单来说其实只要把大部分变异度都能囊括进去的主成分数量就行啦,数值稍有差异没有关系~ 同时陈同教授也出了他的选择习惯:选择7-12个主成分,那么技能树的建明老师通常就是选择15。笔者也去Seurat官网上回溯了官方流程,事实上开发团队也并没有对此细节给出答案,在Seurat5_integration分析中他们直接选择了30作为主成分数量。所以最后得到的一个结论就是,不需要太纠结哪一个数值,只要在合理范围内就行(根据ElbowPlot判断)。
那么其实笔者还会再考虑一个问题,是选择合理范围的低值?中值?还是高值?笔者其实还是倾向于选择“稍大一点”的主成分值,比如这个图片中是8-15,那么笔者会就选择15作为最佳主成分数量值。
同时如果真的很纠结说一定要有一个办法给出一个数量值,那么可以用一下分析工具,那么接下来咱们就试一下使用ElbowPlot,findPC和PCAtools中的findElbowPoint这三个工具。
rm(list = ls())
library(Seurat)
library(findPC)
library(ggplot2)
load("scRNA.Rdata") # 老演员了
DimPlot(scRNA)
ElbowPlot(scRNA,ndims=50)
从视觉上来看大概是7-13左右
# Seurat V5
stdev_sorted <- sort(scRNA@reductions$pca@stdev, decreasing = TRUE)
stdev_sorted
findPC(sdev = stdev_sorted, # 主成分降序排列
number = 50, # number数量不需要
method = "all", # 所有的方法都看一下,默认方法是perpendicular line
figure = T)
不同方法得到的主成分数量,所以是7-12左右,4就有点“离群”。
# PCAtools
library(PCAtools)
elbow <- findElbowPoint(stdev_sorted)
elbow
# [1] 8
经典PCAtools工具得到的值是8
注:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多相关内容可关注公众号:生信方舟
- END -
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有