單細胞PCA降維的時候,肘部圖(ElbowPlot)上顯示排名較高的 PC 比排名較低的 PC 解釋了更多的數(shù)據(jù)差異(具有更高的標(biāo)準(zhǔn)差)。PC的解釋方差變化趨勢屬于非線性曲線,肘部圖中前幾個PC 方差曲線急劇下降,然后變慢并變得平坦。一般假設(shè)PC的解釋方差曲線的驟降第一階段代表與細胞群之間的生物學(xué)差異相關(guān)的“真實”信號,而第二階段主要代表技術(shù)變異或單個細胞的隨機噪音。
關(guān)于量化挑選構(gòu)建聚類圖的主成分數(shù)量面臨的問題:
- 很難根據(jù)肘部圖精確定義曲線的轉(zhuǎn)折點,因為它通常不是完美的彎頭。
- 排名較高的主成分確實比排名較低的主成分解釋了更多的變異,但更多解釋的變異并不一定意味著更高的生物學(xué)信息含量。有時會有有趣但微弱的信號隱藏在噪音中,作為較低等級主成分的一部分。
Seurat 官方提供了一個通過PCA隨機檢驗的方式選擇有效主成分的方法
JackStraw,它也可以幫助確定要考慮多少 PC 進行下游分析。不過該方法因為它依賴于數(shù)據(jù)的排列檢驗,它的計算過程非常緩慢。它所做的是估計每個主成分的統(tǒng)計顯著性(是否顯著有效),但同樣,“顯著” PC 并不意味著它具有信息量。當(dāng)細胞數(shù)量增加時,越來越多的 PC 在統(tǒng)計上變得“顯著”,即使它們解釋的變異并不大。【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的定義和肘部圖的特點出發(fā)來設(shè)計識別拐點:
- 通過篩選貢獻 小于5% 方差和累計貢獻 90% 方差的PC截斷點作為曲線拐點;
- 連續(xù) PC 之間的差異方差貢獻百分比變化小于 0.1% 的點作為曲線拐點;
以下是該方法的實現(xiàn)
1、加載數(shù)據(jù)
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】
