本文首發(fā)于我的個(gè)人博客尘分, http://xuzhougeng.top/
往期回顧:
- 使用ArchR分析單細(xì)胞ATAC-seq數(shù)據(jù)(第一章)
- 使用ArchR分析單細(xì)胞ATAC-seq數(shù)據(jù)(第二章)
- 使用ArchR分析單細(xì)胞ATAC-seq數(shù)據(jù)(第三章)
- 使用ArchR分析單細(xì)胞ATAC-seq數(shù)據(jù)(第四章)
第5章: 使用ArchR聚類
大部分單細(xì)胞聚類算法都在降維后空間中計(jì)算最近鄰圖盘寡,然后鑒定"社區(qū)"或者細(xì)胞聚類橙困。這些方法效果表現(xiàn)都特別出色知牌,已經(jīng)是scRNA-seq的標(biāo)準(zhǔn)策略油狂,所以ArchR直接使用了目前scRNA-seq包中最佳的聚類算法用來對(duì)scATAC-seq數(shù)據(jù)進(jìn)行聚類赶盔。
5.1 使用Seurat的FindClusters()
函數(shù)進(jìn)行聚類
我們發(fā)現(xiàn)Seurat實(shí)現(xiàn)的圖聚類方法表現(xiàn)最好企锌,所以在ArchR中,addClusters()
函數(shù)本質(zhì)是上將額外的參數(shù)通過...
傳遞給Seurat::FindClusters()
函數(shù)于未,從而得到聚類結(jié)果撕攒。在分析中,我們發(fā)現(xiàn)Seurat::FindClusters()
是一個(gè)確定性的聚類算法烘浦,也就是相同的輸入總是能得到完全相同的輸出抖坪。
projHeme2 <- addClusters(
input = projHeme2,
reducedDims = "IterativeLSI",
method = "Seurat",
name = "Clusters",
resolution = 0.8
)
# 只展示部分信息
# Maximum modularity in 10 random starts: 0.8568
# Number of communities: 11
# Elapsed time: 1 seconds
我們可以使用$
符號(hào)來獲取聚類信息,輸出結(jié)果是每個(gè)細(xì)胞對(duì)應(yīng)的cluster
head(projHeme2$Clusters)
# [1] "C10" "C6" "C1" "C2" "C2" "C10"
我們統(tǒng)計(jì)下每個(gè)cluster的細(xì)胞數(shù)
table(projHeme2$Clusters)
# C1 C10 C11 C2 C3 C4 C5 C6 C7 C8 C9
# 310 1247 1436 480 323 379 852 1271 677 2550 726
為了更好了解樣本在cluster的分布闷叉,我們可以使用confusionMatrix()
函數(shù)通過每個(gè)樣本創(chuàng)建一個(gè)聚類混合矩陣(cluster confusion matrix)
從結(jié)果來看擦俐,這里的混合矩陣就是統(tǒng)計(jì)每個(gè)樣本在不同的cluster的分布情況。
cM <- confusionMatrix(paste0(projHeme2$Clusters), paste0(projHeme2$Sample))
cM
文字信息太多握侧,這里直接用熱圖進(jìn)行展示
library(pheatmap)
cM <- cM / Matrix::rowSums(cM)
p <- pheatmap::pheatmap(
mat = as.matrix(cM),
color = paletteContinuous("whiteBlue"),
border_color = "black"
)
p
細(xì)胞有時(shí)在二維嵌入中的相對(duì)位置與所識(shí)別的聚類并不完全一致蚯瞧。更確切的說,單個(gè)聚類中的細(xì)胞可能出現(xiàn)在嵌入的多個(gè)不同區(qū)域中品擎。在這些情況下埋合,可以適當(dāng)?shù)卣{(diào)整聚類參數(shù)或嵌入?yún)?shù),直到兩者之間達(dá)成一致孽查。
5.2 使用scran
聚類
除了Seurat
, ArchR還能夠使用scran進(jìn)行聚類分析,我們只需要修改addClusters()
中的method
參數(shù)即可坦喘。
projHeme2 <- addClusters(
input = projHeme2,
reducedDims = "IterativeLSI",
method = "scran",
name = "ScranClusters",
k = 15
)