PCA 解释方差骤降图(ElbowPlot)拐点的量化识别

简介: 本文分享了一种在R语言里面实现量化识别 PCA方差贡献肘部图(ElbowPlot)中拐点 的简单方法,以供学习参考定

单细胞PCA降维的时候,肘部图(ElbowPlot)上显示排名较高的 PC 比排名较低的 PC 解释了更多的数据差异(具有更高的标准差)。PC的解释方差变化趋势属于非线性曲线,肘部图中前几个PC 方差曲线急剧下降,然后变慢并变得平坦。一般假设PC的解释方差曲线的骤降第一阶段代表与细胞群之间的生物学差异相关的“真实”信号,而第二阶段主要代表技术变异或单个细胞的随机噪音。
关于量化挑选构建聚类图的主成分数量面临的问题:

  • 很难根据肘部图精确定义曲线的转折点,因为它通常不是完美的弯头。
  • 排名较高的主成分确实比排名较低的主成分解释了更多的变异,但更多解释的变异并不一定意味着更高的生物学信息含量。有时会有有趣但微弱的信号隐藏在噪音中,作为较低等级主成分的一部分。

Seurat 官方提供了一个通过PCA随机检验的方式选择有效主成分的方法JackStraw,它也可以帮助确定要考虑多少 PC 进行下游分析。不过该方法因为它依赖于数据的排列检验,它的计算过程非常缓慢。它所做的是估计每个主成分的统计显着性(是否显著有效),但同样,“显著” PC 并不意味着它具有信息量。当细胞数量增加时,越来越多的 PC 在统计上变得“显着”,即使它们解释的变异并不大。【scRNAseq_analysis_vignette/Tutorial.md at master · quadbiolab/scRNAseq_analysis_vignette · GitHub】

cur_seu <- JackStraw(cur_seu)
cur_seu[["pca"]]@jackstraw$overall.p.values   ### top20 PC的有效性P值
cur_seu <- ScoreJackStraw(cur_seu,dims = 1:20)
JackStrawPlot(cur_seu,dims = 1:20)   ### 可视化PC的p值比较随机水平的p值分布

--------

相比起Seurat 随机检验识别拐点方法,另一种高效的方式可以从PCA的定义和肘部图的特点出发来设计识别拐点:

  • 通过筛选贡献 小于5% 方差和累计贡献 90% 方差的PC截断点作为曲线拐点;
  • 连续 PC 之间的差异方差贡献百分比变化小于 0.1% 的点作为曲线拐点;

以下是该方法的实现

1、加载数据

pacman::p_load(Seurat,SeuratData,ggplot2,dplyr)
data("pbmc3k")
### PP data
cur_seu <- pbmc3k %>% SCTransform() %>% RunPCA()

2、量化拐点识别

#### PCA拐点定量识别
pct <- cur_seu[["pca"]]@stdev / sum(cur_seu[["pca"]]@stdev) * 100 ; cumu <- cumsum(pct)
pc.use <- min(which(cumu > 90 & pct < 5)[1],sort(which((pct[1:length(pct) - 1] - pct[2:length(pct)]) > 0.1),decreasing = T)[1] + 1)

3、可视化量化识别的拐点

ElbowPlot(cur_seu)$data %>% ggplot() +
    geom_point(aes(x = dims,y = stdev)) +
    geom_vline(xintercept = pc.use, color = "darkred") +
    theme_bw() + labs(title = "Elbow plot: quantitative approach")


Reference

Elbow plot: quantitative approach | Introduction to Single-cell RNA-seq - ARCHIVED (hbctraining.github.io)
【scRNAseq_analysis_vignette/Tutorial.md at master · quadbiolab/scRNAseq_analysis_vignette · GitHub】

目录
相关文章
|
8月前
|
算法 Python
R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列
R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列
|
8月前
|
前端开发
数据分享|R语言零膨胀泊松回归ZERO-INFLATED POISSON(ZIP)模型分析露营钓鱼数据实例估计IRR和OR
数据分享|R语言零膨胀泊松回归ZERO-INFLATED POISSON(ZIP)模型分析露营钓鱼数据实例估计IRR和OR
|
8月前
|
前端开发 数据建模 计算机视觉
R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据
R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据
|
8月前
|
数据挖掘 数据建模
R语言指数加权模型EWMA预测股市多变量波动率
R语言指数加权模型EWMA预测股市多变量波动率
R语言指数加权模型EWMA预测股市多变量波动率
|
8月前
|
算法 vr&ar Python
R语言隐马尔可夫模型HMM连续序列重要性重抽样CSIR估计随机波动率模型SV分析股票收益率时间序列
R语言隐马尔可夫模型HMM连续序列重要性重抽样CSIR估计随机波动率模型SV分析股票收益率时间序列
|
8月前
|
算法 数据可视化 数据挖掘
R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白宫风云》在线收视率
R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白宫风云》在线收视率
|
8月前
|
前端开发 数据库
R语言基于Bootstrap的线性回归预测置信区间估计方法分析汽车制动距离|数据分享
R语言基于Bootstrap的线性回归预测置信区间估计方法分析汽车制动距离|数据分享
|
8月前
R语言广义加性模型GAMs分析温度、臭氧环境数据绘制偏回归图与偏残差图
R语言广义加性模型GAMs分析温度、臭氧环境数据绘制偏回归图与偏残差图
|
8月前
|
机器学习/深度学习 算法
R语言非参数方法:使用核回归平滑估计和K-NN(K近邻算法)分类预测心脏病数据
R语言非参数方法:使用核回归平滑估计和K-NN(K近邻算法)分类预测心脏病数据
|
8月前
|
前端开发 索引
R语言BOOTSTRAP(自举法,自抽样法)估计回归模型置信区间分析股票收益
R语言BOOTSTRAP(自举法,自抽样法)估计回归模型置信区间分析股票收益