前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何选择单细胞分析流程中的主成分数量:策略学习

如何选择单细胞分析流程中的主成分数量:策略学习

原创
作者头像
凑齐六个字吧
发布于 2025-02-11 03:47:25
发布于 2025-02-11 03:47:25
16700
代码可运行
举报
文章被收录于专栏:单细胞单细胞
运行总次数:0
代码可运行

在单细胞流程中,需要选定合适的主成分数量然后再进行后续的分析,过多和过少的主成分都可能会为后续的分析带来不同程度的影响。

  1. 过多的主成分可能会导致模型过拟合。PCA通过将原始数据投影到新的轴(主成分)上,目的是提取数据中的主要变异。如果保留过多的主成分,模型可能会捕捉到数据中的噪声而非有意义的生物学信号,导致分析结果不具有泛化能力。
  2. 过少的主成分可能会丢失重要的生物学信息。PCA通过减少数据的维度来简化数据集,但如果去除的主成分包含了对细胞群体分类有重要意义的信息,可能导致后续分析中细胞类型或亚群体的识别不准确。

因此我们在分析的时候通常会看一下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这三个工具。

分析步骤
1.导入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list = ls())
library(Seurat)
library(findPC)
library(ggplot2)
load("scRNA.Rdata") # 老演员了

DimPlot(scRNA)
2.ElbowPlot
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ElbowPlot(scRNA,ndims=50)

从视觉上来看大概是7-13左右

3.findPC
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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就有点“离群”。

4.PCAtools
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# PCAtools
library(PCAtools)
elbow <- findElbowPoint(stdev_sorted)
elbow
# [1] 8

经典PCAtools工具得到的值是8

参考资料:
  1. Seurat: https://satijalab.org/seurat/articles/seurat5_integration
  2. Biostars (How to Choose PCs from a HeatMap):https://www.biostars.org/p/410640/
  3. findPC: https://github.com/haotian-zhuang/findPC
  4. PCAtools: https://bioconductor.org/packages/devel/bioc/vignettes/PCAtools/inst/doc/PCAtools.html#determine-optimum-number-of-pcs-to-retain
  5. 生信宝典: https://mp.weixin.qq.com/s/DJMk-UR0oJ1-v1G3t0AhcA
  6. 单细胞天地—单细胞常见图表合集

:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多相关内容可关注公众号:生信方舟

- END -

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验