單細(xì)胞轉(zhuǎn)錄組雙細(xì)胞判別軟件scDblFinder

起因:最近有個(gè)問(wèn)題樣本,跑完cellranger豆巨,樣本的cellranger結(jié)果如下,細(xì)胞數(shù)目極高(3W+)掐场。在后續(xù)數(shù)據(jù)質(zhì)控分析中往扔,線粒體基因占比和雙細(xì)胞率均很高贩猎,用scDblFinder進(jìn)行雙細(xì)胞預(yù)測(cè),雙細(xì)胞占率竟然高達(dá)34%萍膛。我很好奇吭服,雙細(xì)胞率為什么會(huì)這么高,如何審視這個(gè)結(jié)果蝗罗?決定看看scDblFinder的細(xì)節(jié)艇棕。

image.png


問(wèn)題1:如何理解Doublets?
在scRNA-seq的細(xì)胞捕獲步驟中串塑,兩個(gè)或多個(gè)細(xì)胞聚集成單個(gè)液滴(雙聯(lián)體/多聯(lián)體)會(huì)導(dǎo)致混合的轉(zhuǎn)錄組沼琉,也就是兩個(gè)或多個(gè)細(xì)胞共用一個(gè)barcode,稱為doublets或multiplets(后面統(tǒng)稱為doublets)桩匪。它是基于液滴的單細(xì)胞測(cè)序的技術(shù)副產(chǎn)品打瘪。雙細(xì)胞會(huì)造成每個(gè)“細(xì)胞”的高UMI計(jì)數(shù),改變cluster的細(xì)胞類型鑒定干擾到下游分析傻昙。這會(huì)導(dǎo)致對(duì)稀有細(xì)胞類型闺骚、中間細(xì)胞狀態(tài)和疾病相關(guān)轉(zhuǎn)錄組學(xué)特征的人為錯(cuò)誤發(fā)現(xiàn)。雙細(xì)胞率已被證明與捕獲的細(xì)胞數(shù)量成正比(Bloom 2018; Kang et al. 2018)妆档。

雙細(xì)胞可以分為同型(相同細(xì)胞類型)或異型(不同細(xì)胞類型)僻爽。

問(wèn)題2: Cell Ranger可以自動(dòng)剔除doublets和multiplets嗎?
答:目前沒(méi)有方法可以識(shí)別與雙細(xì)胞中單個(gè)細(xì)胞相關(guān)的轉(zhuǎn)錄本信息。
10X官網(wǎng)對(duì)雙細(xì)胞率的相關(guān)答復(fù)贾惦,我們目前沒(méi)有一種方法通過(guò)算法識(shí)別單個(gè)物種的單細(xì)胞基因表達(dá)數(shù)據(jù)进泼,barcode是否包含多個(gè)細(xì)胞。
目前纤虽,Cell Ranger 軟件僅在barnyard實(shí)驗(yàn)或多物種實(shí)驗(yàn)中估計(jì)雙細(xì)胞率。
對(duì)此绞惦,10X也給出三條參考意見(jiàn):

  1. Infer doublets in a single species case if there are known cell-type specific markers. For example, the presence of T cell and B cell specific markers coming from a single barcode may indicate a GEM with both T and B cells.
  2. Evaluate the suggested workflow in the R package, Seurat, which has some functionality for flagging cells with a clear outlier number of UMIs or genes detected http://satijalab.org/seurat/pbmc3k_tutorial.html ("QC and selecting cells for further analysis.)
  3. Evaluate the doublet identification method in the R package DoubletFinder.

他的意思是:1) 通過(guò)已知細(xì)胞類型的marker基因來(lái)鑒別雙細(xì)胞逼纸,比如T/B細(xì)胞的marker基因,在同一個(gè)barcode細(xì)胞中同時(shí)高表達(dá)就可判定為雙細(xì)胞济蝉;2) seurat標(biāo)準(zhǔn)分析流程杰刽,質(zhì)控環(huán)節(jié)通過(guò)UMI和gene指標(biāo)過(guò)濾;3)運(yùn)用scDblFinder雙細(xì)胞預(yù)測(cè)軟件王滤。

問(wèn)題3:10X Genomics 單細(xì)胞實(shí)驗(yàn)中估計(jì)的雙細(xì)胞率是多少贺嫂?
假設(shè)不存在細(xì)胞結(jié)團(tuán),可使用下表(取自10X基因組學(xué)用戶指南)來(lái)估計(jì)單細(xì)胞實(shí)驗(yàn)中估計(jì)的雙細(xì)胞率雁乡。

Recommended starting point is to load ~1,600 cells per reaction, resulting in recovery of ~1000 cells, and a multiplet rate of ~0.8%. The optimal input cell concentration is 700-1,200 cells/μl

雙細(xì)胞率(0.8%/1000cells)第喳,如果細(xì)胞數(shù)為1W,雙細(xì)胞率為7.6%踱稍,約8%曲饱。

image.png

但是悠抹,在scDblFinder的文章中,提到在單細(xì)胞實(shí)驗(yàn)中扩淀,雙細(xì)胞率為10-20%楔敌。
image.png

It is therefore at present common in singlecell experiments to have 10-20% doublets, making accurate doublet detection critical.

單細(xì)胞實(shí)驗(yàn)雙細(xì)胞率為10-20%,這個(gè)數(shù)值明顯高于上面10X給出的雙細(xì)胞率(~8%)驻谆。這個(gè)怎么理解呢卵凑?
我想到的幾個(gè)原因:
1)10X給出的是理想情況的雙細(xì)胞率(細(xì)胞不結(jié)團(tuán)),用標(biāo)準(zhǔn)樣本做基準(zhǔn)比較胜臊;
2)雙細(xì)胞率跟實(shí)驗(yàn)環(huán)節(jié)中的樣本處理和細(xì)胞上樣量都有關(guān)系勺卢;
3)還取決如何計(jì)算雙細(xì)胞,雙細(xì)胞率=雙細(xì)胞數(shù)目/總細(xì)胞數(shù)区端;因計(jì)算的細(xì)胞總體不同而不同值漫;
我們一般會(huì)進(jìn)行QC細(xì)胞質(zhì)控,用UMI/genes指標(biāo)過(guò)濾掉低質(zhì)量細(xì)胞和異常值細(xì)胞织盼;
如果QC細(xì)胞質(zhì)控后計(jì)算雙細(xì)胞率杨何,和QC細(xì)胞質(zhì)控前計(jì)算雙細(xì)胞率,預(yù)測(cè)的雙細(xì)胞率會(huì)不一致沥邻;

最近危虱,在網(wǎng)上找到一個(gè)10x Genomics 提供的估計(jì)雙細(xì)胞率是:


image.png

比如1W個(gè)細(xì)胞,雙細(xì)胞率為:0.008*(10000/1000)=0.08=8%唐全。

下面我們看看scDblFinder軟件是如何具體執(zhí)行的埃跷。


雙細(xì)胞在單細(xì)胞測(cè)序數(shù)據(jù)中很普遍,可能會(huì)導(dǎo)致人為錯(cuò)誤的發(fā)現(xiàn)邮利。
目前弥雹,實(shí)驗(yàn)層面還是無(wú)法檢測(cè)同一樣本的細(xì)胞形成的雙細(xì)胞,包括異型雙細(xì)胞延届。

算法層剪勿,已經(jīng)開(kāi)發(fā)了許多計(jì)算方法來(lái)根據(jù)轉(zhuǎn)錄譜識(shí)別雙細(xì)胞。大多數(shù)這些方法依賴于通過(guò)對(duì)真實(shí)細(xì)胞求和或求平均來(lái)生成人造雙細(xì)胞方庭,并對(duì)它們與真實(shí)細(xì)胞之間的相似性進(jìn)行評(píng)分厕吉。 例如,DoubletFinder在真實(shí)細(xì)胞和人工雙細(xì)胞的合集上生成k最近鄰近圖(kNN) 械念,并估計(jì)每個(gè)細(xì)胞附近人造雙細(xì)胞的密度(McGinnis, Murrow, and Gartner 2019)头朱。 以類似的方式,Bais和Kostka (2020) 提出的bcds算法和共表達(dá)評(píng)分cxds算法龄减。

Xi 和 Li (2021a) 最近發(fā)表的文章中對(duì)雙細(xì)胞檢測(cè)方法進(jìn)行基準(zhǔn)測(cè)試项钮,使用模擬數(shù)據(jù)和包含雙細(xì)胞實(shí)驗(yàn)標(biāo)記的真實(shí)數(shù)據(jù)數(shù)據(jù)集,發(fā)現(xiàn)DoubletFinder的算法最為準(zhǔn)確。 但是寄纵,基準(zhǔn)測(cè)試也發(fā)現(xiàn)鳖敷,沒(méi)有一種方法在所有數(shù)據(jù)集上都是系統(tǒng)性最優(yōu),強(qiáng)調(diào)在各種數(shù)據(jù)集上測(cè)試和基準(zhǔn)測(cè)試方法的必要性程拭,并表明某些算法在不同情況下可能具有優(yōu)勢(shì)和劣勢(shì)定踱。
沒(méi)有一種算法是完美不缺的,特別是預(yù)測(cè)模型算法恃鞋。

scDblFinder achieves the highest mean AUPRC and AUROC values, and it is also the top method in terms of the precision, recall, and TNR under the 10% identification rate.

下圖比較了scDblFinder 這個(gè)包中一些方法(以粗體顯示)與其他方法:


image.png

因此崖媚,我們?cè)趩渭?xì)胞轉(zhuǎn)錄組數(shù)據(jù)質(zhì)控過(guò)濾時(shí),會(huì)考慮到雙細(xì)胞的因素恤浪,通過(guò)相關(guān)軟件進(jìn)行預(yù)測(cè)雙細(xì)胞畅哑。常用的軟件有scDblFinder(R語(yǔ)言)和Scrublet(python)。這里僅討論scDblFinder水由。

image.png

1.scDblFinder安裝

安裝scDblFinder需要滿足R >= 4.0 和 Bioconductor >= 3.12

if (!requireNamespace("BiocManager", quietly = TRUE)) 
    install.packages("BiocManager") 
BiocManager::install("scDblFinder") 
# or, to get that latest developments: 
BiocManager::install("plger/scDblFinder")

2.scDblFinder使用

scDblFinder的輸入數(shù)據(jù)是SingleCellExperiment對(duì)象(空的drops已經(jīng)移出)荠呐,至少要包含counts矩陣(assay ‘counts’)。即sce對(duì)象都不應(yīng)該包含空滴砂客,但不應(yīng)該經(jīng)過(guò)非常嚴(yán)格的過(guò)濾(這會(huì)影響雙細(xì)胞率的估計(jì))泥张。
如果還包含歸一化矩陣 (assay ‘logcounts’) 和PCA (reducedDim ‘PCA’),可以使用scDblFinder的cluster模式(不常見(jiàn))鞠值。

理解SingleCellExperiment對(duì)象媚创?
SingleCellExperiment對(duì)象是Bioconductor針對(duì)單細(xì)胞scRNA-seq,定義的通用的標(biāo)準(zhǔn)數(shù)據(jù)對(duì)象彤恶。scater和seurat等均可操作此對(duì)象钞钙。

基因表達(dá)數(shù)據(jù)通常儲(chǔ)存樣本-基因定量表達(dá)矩陣。在scRNA-seq分析中声离,我們通常從計(jì)數(shù)矩陣開(kāi)始芒炼,即每個(gè)細(xì)胞的特定特征的reads/UMIs數(shù)目。這個(gè)特征可以是基因术徊、亞型或外顯子等本刽,通常我們?cè)诨蛩竭M(jìn)行分析。
除了基因量化矩陣弧关,我們還可能有關(guān)于基因的信息(例如基因組位置、它們是哪種基因類型唤锉、它們的長(zhǎng)度等)和細(xì)胞的信息(例如它們的起源組織世囊、患者供體、處理批次窿祥、疾病狀態(tài)株憾、治療暴露等)。

我們還可以從原始計(jì)數(shù)數(shù)據(jù)中生成其他矩陣,例如歸一化計(jì)數(shù)矩陣嗤瞎。由于單細(xì)胞實(shí)驗(yàn)數(shù)據(jù)的維數(shù)非常高(有數(shù)千個(gè)細(xì)胞和數(shù)千個(gè)基因)墙歪,我們經(jīng)常采用降維技術(shù)來(lái)捕捉較低維數(shù)據(jù)中的主要變化。

SingleCellExperiment(簡(jiǎn)稱 sce)是R語(yǔ)言中特殊的S4對(duì)象贝奇,以同步方式存儲(chǔ)所有這些信息虹菲。對(duì)象的不同部分被稱為“slot”:

  • 一個(gè)或多個(gè)表達(dá)式矩陣 - 存儲(chǔ)在‘a(chǎn)ssay’ slot中;
  • 關(guān)于基因(對(duì)象的行)的信息 - 存儲(chǔ)在‘rowData’ slot中掉瞳;
  • 有關(guān)細(xì)胞(對(duì)象的列)的信息 - 存儲(chǔ)在‘colData’ slot中毕源;


2.1 單樣本

set.seed(123) 
library(scDblFinder) 
# we create a dummy dataset; since it's small we set a higher doublet rate 
sce <- mockDoubletSCE(dbl.rate=0.1) 
# we run scDblFinder (providing the unsually high doublet rate) 
sce <- scDblFinder(sce, dbr=0.1)

對(duì)于 10x 數(shù)據(jù),通常將dbr留空是安全的陕习,它會(huì)自動(dòng)估計(jì)霎褐。 scDblFinder的輸出會(huì)在sce的colData中添加一些以‘scDblFinder’為前綴的列,其中最重要的是:

  • sce$scDblFinder.score : the final doublet score(最終的doublet分?jǐn)?shù))
  • sce$scDblFinder.class : the classification (doublet or singlet)判定的分類(雙細(xì)胞或單細(xì)胞)
table(truth=sce$type, call=sce$scDblFinder.class) 
##          call 
## truth     singlet doublet 
##   singlet     499       1 
##   doublet       0      34

2.2 多樣本

如果你有多個(gè)樣本(理解為不同的細(xì)胞捕獲)该镣,那么最好為每個(gè)樣本分別進(jìn)行雙細(xì)胞識(shí)別(對(duì)于cell hashes實(shí)驗(yàn)中的多重樣本冻璃,那意味著每個(gè)批次)。 可以通過(guò)簡(jiǎn)單地向scDblFinder的samples參數(shù)提供樣本 id來(lái)完成损合,或者省艳,將樣本信息存儲(chǔ)在colData列中,提供列名即可塌忽。另外拍埠,還可以考慮使用BPPARAM參數(shù)對(duì)其進(jìn)行多線程處理(假設(shè)有足夠的RAM)。 例如:

library(BiocParallel) 
sce <- scDblFinder(sce, samples="sample_id", BPPARAM=MulticoreParam(3)) 
table(sce$scDblFinder.class)

2.3 案例實(shí)戰(zhàn)

我們用之前案例中的數(shù)據(jù)測(cè)試下scDblFinder函數(shù)土居。
單個(gè)樣本

rat <- CreateSeuratObject(adj.matrix,project = "pbmc10k")  
srat 
##  Detect Doublets 
set.seed(123) 
sce <- as.SingleCellExperiment(srat) 
sce <- scDblFinder(sce, dbr=0.1) 
sce$doublet_logic <- ifelse(sce$scDblFinder.class == "doublet", TRUE, FALSE) 
plotDoubletMap(sce) 
table(sce$scDblFinder.class) 
# singlet doublet  
# 9209     985

該樣本共10194個(gè)細(xì)胞枣购,其中968個(gè)細(xì)胞被預(yù)測(cè)為雙細(xì)胞,雙細(xì)胞率為9.5%

image.png

image.png

問(wèn)題樣本
拿最開(kāi)始提到的問(wèn)題樣本擦耀,不設(shè)置dbr棉圈,雙細(xì)胞率為34.1%;設(shè)置dbr=0.1眷蜓,雙細(xì)胞率為11.4%分瘾。很顯然,對(duì)于這個(gè)樣本吁系,不同參數(shù)下德召,預(yù)測(cè)雙細(xì)胞數(shù)值差異很大。

scrna.matrix <- Read10X("data/sample1/filtered_feature_bc_matrix") 
seurat_obj <- CreateSeuratObject(scrna.matrix,project = "sample", min.cells = 3, min.features = 200) 
dim(seurat_obj)
# [1] 18975 31340
##  Detect Doublets
set.seed(123)
sce <- as.SingleCellExperiment(seurat_obj)
sce1 <- scDblFinder(sce, dbr=0.1)
# 3574 (11.4%) doublets called
table(sce1$scDblFinder.class)
# singlet doublet 
# 27766    3574 

sce2 <- scDblFinder(sce)
# 10698 (34.1%) doublets called
table(sce2$scDblFinder.class)
# singlet doublet 
# 20642   10698

那么該如何審視這個(gè)結(jié)果汽纤,選擇怎樣的參數(shù)上岗?
我想到的是,對(duì)于一個(gè)預(yù)測(cè)模型來(lái)說(shuō)蕴坪,調(diào)參的意義不大肴掷,我們對(duì)結(jié)果沒(méi)有預(yù)判敬锐,修改參數(shù),都會(huì)出現(xiàn)不同的預(yù)測(cè)值呆瞻。另外台夺,對(duì)于一個(gè)常規(guī)的10X單細(xì)胞轉(zhuǎn)錄組數(shù)據(jù),我們對(duì)雙細(xì)胞率是有一定預(yù)判的痴脾,10X的實(shí)驗(yàn)步驟大致固定颤介,cellranger的細(xì)胞數(shù)大致1W,雙細(xì)胞率大致10%明郭,我們知道預(yù)測(cè)的邊界买窟。我們有粗略的“標(biāo)尺”。
但是現(xiàn)在薯定,cellranger給出的細(xì)胞數(shù)是3W+始绍,我們其實(shí)是不清楚雙細(xì)胞率的邊界,細(xì)胞數(shù)“超綱”了话侄,只知道細(xì)胞數(shù)越多亏推,雙細(xì)胞也會(huì)越多。這類樣本太少年堆,我們沒(méi)有橫向可參考的實(shí)例吞杭。如果出現(xiàn)這種結(jié)果,最應(yīng)該審視的是實(shí)驗(yàn)端出了什么問(wèn)題变丧,線粒體基因占比也非常高芽狗。

2.4 基于cluster的雙細(xì)胞識(shí)別

scDblFinder有兩種生成人造雙細(xì)胞的主要模式:隨機(jī)模式(scDblFinder.random,clusters=FALSE, 默認(rèn)方式)和基于cluster的模式(scDblFinder.clusters痒蓬,clusters=TRUE 或提供你自定義的cluster - 以前版本的方法)童擎。在實(shí)際中,我們觀察到兩種方法都表現(xiàn)良好(比其他方法要好)攻晒。當(dāng)數(shù)據(jù)集被分成清晰的cluster時(shí)顾复,教程建議使用基于cluster的方法(例如發(fā)展軌跡),否則使用隨機(jī)模式鲁捏。

suppressPackageStartupMessages({
  library(scDblFinder)
  library(SingleCellExperiment)
})
sce <- readRDS("GSE162690.SCE.rds")
sce <- scDblFinder(sce, clusters=TRUE)
sce$scDblFinder.raw <- sce$scDblFinder.score
sce <- scDblFinder(sce, clusters=TRUE, aggregateFeatures=TRUE, nfeatures=25, 
                   processing="normFeatures")
CD <- colData(sce)
saveRDS(CD, file="atac.colData.rds")

3.scDblFinder算法的實(shí)現(xiàn)

雙細(xì)胞分為同型雙細(xì)胞('Homotypic' doublets)和異性雙細(xì)胞( 'Heterotypic' doublets)芯砸。同型雙細(xì)胞由相同類型的細(xì)胞(即相似的轉(zhuǎn)錄狀態(tài))組成,僅根據(jù)它們的轉(zhuǎn)錄組信息很難辨識(shí)给梅。而且假丧,它們對(duì)于大多數(shù)分析來(lái)說(shuō)也相對(duì)無(wú)害,因?yàn)樗鼈兛雌饋?lái)與單細(xì)胞高度相似动羽。 相反包帚,異型雙細(xì)胞(由具有不同轉(zhuǎn)錄狀態(tài)的細(xì)胞形成)表現(xiàn)為一種人為的新型細(xì)胞類型,會(huì)影響下游分析曹质。
scDblFinder只關(guān)注異性雙細(xì)胞婴噩。
step1:將數(shù)據(jù)集縮減到僅高表達(dá)的基因(默認(rèn)為 1000); 如果使用基于cluster的方法羽德,則會(huì)選擇每個(gè)cluster的表達(dá)靠前的基因几莽。另外使用基于cluster的方法(而不是人為指定cluster),將會(huì)執(zhí)行快速聚類(請(qǐng)參閱fastcluster)宅静。
step2:通過(guò)組合不同cluster的細(xì)胞來(lái)創(chuàng)建人工雙細(xì)胞章蚣,創(chuàng)建的人工雙細(xì)胞數(shù)與cluster的數(shù)目成比例。 我們主要關(guān)注不同cluster間的雙細(xì)胞姨夹,我們不會(huì)試圖識(shí)別同型雙細(xì)胞纤垂,無(wú)論如何,它們實(shí)際上無(wú)法識(shí)別且對(duì)下游分析相對(duì)無(wú)害磷账。因此峭沦,我們減少了人工雙細(xì)胞的必要數(shù)量, 也防止分類器被訓(xùn)練以識(shí)別與單細(xì)胞無(wú)法區(qū)分的細(xì)胞(因此將單細(xì)胞稱為雙細(xì)胞)逃糟。 scDblFinder另一種策略是生成完全隨機(jī)的人工雙細(xì)胞吼鱼,并使用迭代程序從訓(xùn)練中排除無(wú)法識(shí)別的人工雙細(xì)胞。 在實(shí)踐中绰咽,這兩種方法具有相當(dāng)?shù)男阅芄剿啵鼈円部梢越Y(jié)合使用。
step3:然后對(duì)真實(shí)細(xì)胞和人工雙細(xì)胞的合集進(jìn)行降維取募,并生成最近鄰網(wǎng)絡(luò)琐谤。 接著使用網(wǎng)絡(luò)來(lái)估計(jì)每個(gè)細(xì)胞的許多特征,特別是最近鄰居中人工雙細(xì)胞的比例玩敏。 該比率不是選擇特定的鄰域大小斗忌,該比率是在不同的 k 值下計(jì)算的,通過(guò)使用多個(gè)預(yù)測(cè)變量創(chuàng)建分類器聊品。預(yù)測(cè)變量還包括距離加權(quán)比飞蹂,進(jìn)一步添加了的細(xì)胞層面上的預(yù)測(cè)變量:對(duì)主成分的預(yù)測(cè);文庫(kù)大蟹陈哑; 和共表達(dá)分?jǐn)?shù)(基于Bais 和 Kostka2020 的變體)。 然后 scDblFinder訓(xùn)練梯度提升樹(shù)( gradient boosted trees )伸眶,以根據(jù)這些特征區(qū)分來(lái)自真實(shí)細(xì)胞的人工雙細(xì)胞惊窖。 最后,閾值程序通過(guò)同時(shí)最小化錯(cuò)誤分類率和預(yù)期的雙細(xì)胞率來(lái)決定調(diào)用細(xì)胞的分?jǐn)?shù)(參見(jiàn)Thresholding)厘贼。
step4:基于分類器方法的一個(gè)關(guān)鍵問(wèn)題是一些真實(shí)細(xì)胞被錯(cuò)誤標(biāo)記界酒,從某種意義上說(shuō),它們實(shí)際上是雙細(xì)胞嘴秸,但被標(biāo)記為單細(xì)胞毁欣。這些會(huì)誤導(dǎo)分類器庇谆。出于這個(gè)原因,分類和閾值處理以迭代方式執(zhí)行:在每一輪中凭疮,從下一輪的訓(xùn)練集中刪除識(shí)別為雙細(xì)胞的真實(shí)細(xì)胞饭耳。

Overview of the scDblFinder method.

方法說(shuō)明

3.1 拆分捕獲

雙細(xì)胞只能出現(xiàn)在給定的樣本或某次捕獲中,因此需要為每個(gè)樣本單獨(dú)進(jìn)行雙細(xì)胞判別执解,這也加快了分析速度寞肖。如果給定samples參數(shù),scDblFinder將利用該參數(shù)將細(xì)胞拆分為單個(gè)樣本/捕獲衰腌,并在給出BPPARAM參數(shù)的情況下并行分析新蟆。分類器將在全局范圍內(nèi)進(jìn)行訓(xùn)練,但閾值將在每個(gè)樣本的基礎(chǔ)上進(jìn)行優(yōu)化右蕊。如果你的樣品是多標(biāo)簽琼稻,即不同的樣品混合在不同的批次中,那么需要提供批次信息饶囚。

3.2 數(shù)據(jù)的降維和聚類

通過(guò)將數(shù)據(jù)集減少到僅高表達(dá)的基因(由nfeatures參數(shù)控制)欣簇,可以大大加快分析速度,即使會(huì)稍微影響到準(zhǔn)確度坯约。然后熊咽,根據(jù)cluster參數(shù),將執(zhí)行最終的PCA和聚類(使用內(nèi)部 fastcluster函數(shù))闹丐『崤梗基于cluster方法的基本原理是同型雙細(xì)胞幾乎不可能根據(jù)它們的轉(zhuǎn)錄組進(jìn)行區(qū)分,因此創(chuàng)建這種雙細(xì)胞是一種計(jì)算資源的浪費(fèi)卿拴,而且還會(huì)誤導(dǎo)分類器標(biāo)記為單細(xì)胞衫仑。
然而,另一種方法是隨機(jī)生成雙細(xì)胞(將clusters設(shè)置為 FALSE 或 NULL)堕花,并使用迭代方法從訓(xùn)練中排除無(wú)法識(shí)別的人工雙細(xì)胞文狱。

3.3 生成人工雙細(xì)胞

根據(jù)cluster和propRandom參數(shù),將通過(guò)合并隨機(jī)細(xì)胞和/或不相同的cluster對(duì)的細(xì)胞合并缘挽,形成人工雙細(xì)胞(這可以使用getArtificialDoublets函數(shù)手動(dòng)執(zhí)行)瞄崇。 一部分雙細(xì)胞將簡(jiǎn)單地使用組成細(xì)胞的counts總和,而其余的將進(jìn)行調(diào)整文庫(kù)大小和進(jìn)行泊松重采樣壕曼,數(shù)據(jù)校正苏研。

3.4 檢查每個(gè)細(xì)胞的k最近鄰 (kNN)

對(duì)真實(shí)細(xì)胞和人工細(xì)胞的組合執(zhí)行新的PCA,從中生成 kNN網(wǎng)絡(luò)腮郊。 使用這個(gè) kNN摹蘑,為每個(gè)細(xì)胞收集了許多參數(shù),例如 KNN中雙細(xì)胞的比例轧飞、到最近雙細(xì)胞和最近非雙細(xì)胞的距離之比等衅鹿。在輸出中報(bào)告了一些帶有“scDblFinder.”前綴的功能撒踪,例如:

  • distanceToNearest: 到最近細(xì)胞的距離(真實(shí)或人工細(xì)胞)
  • ratio: KNN 的雙細(xì)胞比例
  • weighted: 為雙細(xì)胞的KNN的比例,按其距離加權(quán)(對(duì)孤立細(xì)胞有用)

4.其他重要參數(shù)

scDblFinder有相當(dāng)多的參數(shù)來(lái)控制預(yù)處理大渤、雙細(xì)胞的生成糠涛、分類等(參見(jiàn)?scDblFinder)。 我們僅對(duì)重要參數(shù)進(jìn)行說(shuō)明兼犯。

4.1 雙細(xì)胞期望檢出率

雙細(xì)胞的期望檢出率對(duì)鄰域中人造雙細(xì)胞的密度沒(méi)有影響,但會(huì)影響分類器的分?jǐn)?shù)集漾,特別是分類臨界值切黔。是通過(guò)dbr和dbr.sd參數(shù)指定(dbr.sd指定dbr周圍的 +/- 范圍,在該范圍內(nèi)與dbr的偏差將被視為空)具篇。
對(duì)于10x數(shù)據(jù)纬霞,捕獲的細(xì)胞越多,產(chǎn)生雙細(xì)胞的概率越大驱显,Chromium文檔表明每1000個(gè)細(xì)胞捕獲的雙細(xì)胞率大約為 1%(因此對(duì)于 5000 個(gè)細(xì)胞诗芜,(0.015)5000 = 250 個(gè)雙細(xì)胞) ,scDblFinder默認(rèn)的預(yù)期雙細(xì)胞率將設(shè)置為0.1(默認(rèn)標(biāo)準(zhǔn)偏差為 0.015)埃疫。但是請(qǐng)注意伏恐,不同的實(shí)驗(yàn)方案可能會(huì)產(chǎn)生更多的雙細(xì)胞率,因此需要相應(yīng)地更新栓霜。如果不確定雙細(xì)胞率翠桦,您可能會(huì)考慮增加 dbr.sd,以便大多數(shù)/純粹從錯(cuò)誤分類錯(cuò)誤中估計(jì)它胳蛮。

5.高頻問(wèn)題

問(wèn)題1:我捕獲到太多雙細(xì)胞-這是怎么回事销凑?

那么你很可能有錯(cuò)誤的雙細(xì)胞率。 如果你沒(méi)有提供dbr參數(shù)仅炊,雙細(xì)胞率將使用10X Genomics預(yù)期雙細(xì)胞率自動(dòng)計(jì)算斗幼,這意味著捕獲的細(xì)胞越多,雙細(xì)胞率就越高抚垄。 如果你認(rèn)為不適用于你的數(shù)據(jù)蜕窿,可手動(dòng)設(shè)置dbr。

如果出現(xiàn)意外高的雙細(xì)胞率最常見(jiàn)原因是呆馁,1)你有一個(gè)多樣本數(shù)據(jù)集并且沒(méi)有按樣本進(jìn)行拆分渠羞。 scDblFinder會(huì)認(rèn)為數(shù)據(jù)是具有大量細(xì)胞的單次捕獲,因此具有非常高的雙細(xì)胞率智哀。 按樣本拆分應(yīng)該可以解決問(wèn)題次询。

閾值根據(jù)預(yù)期雙細(xì)胞數(shù)量和錯(cuò)誤分類(即人造雙細(xì)胞)試圖最小化方差,這意味著有效(即最終)雙細(xì)胞率將與給定的不同瓷叫。 scDblFinder還認(rèn)為假陽(yáng)性比假陰性對(duì)后續(xù)的分析問(wèn)題要小些屯吊。你可以通過(guò)設(shè)置 [dbr.sd=0]在一定程度上減少與輸入雙細(xì)胞率的偏差送巡。

問(wèn)題2:我應(yīng)該使用基于cluster的雙細(xì)胞判別嗎?

雖然這兩種方法在基準(zhǔn)測(cè)試中的表現(xiàn)非常相似盒卸,但隨機(jī)生成方法在復(fù)雜數(shù)據(jù)集中通常略勝一籌骗爆。 如果你的數(shù)據(jù)被非常清晰地劃分為cluster,或者你對(duì)雙細(xì)胞的起源感興趣蔽介,則基于cluster的方法更可取摘投。 這也將能夠更準(zhǔn)確地計(jì)算同型雙細(xì)胞率,因此略好于閾值法(thresholding)虹蓄。 否則犀呼,特別是如果你的數(shù)據(jù)沒(méi)有非常清楚地劃分為cluster,則隨機(jī)方法(例如clusters= FALSE)更可取薇组。

問(wèn)題3:cluster沒(méi)有任何意義!

如果你在多樣本數(shù)據(jù)集上運(yùn)行scDblFinder但是未提供cluster標(biāo)簽外臂,而是基于特定樣本的標(biāo)簽(意味著一個(gè)樣本中的標(biāo)簽“1”可能與另一個(gè)樣本中的標(biāo)簽“1”無(wú)關(guān)),并且 在 tSNE上繪制它們看起來(lái)沒(méi)有意義律胀。 出于這個(gè)原因宋光,當(dāng)運(yùn)行多個(gè)樣本時(shí),建議首先將所有樣本聚集在一起(例如使用 sce$cluster <- fastcluster(sce))炭菌,然后將cluster信息提供給 scDblFinder罪佳。

問(wèn)題4:‘Size factors should be positive’報(bào)錯(cuò)

如果某些細(xì)胞的讀數(shù)為零(或非常接近于零),則會(huì)出現(xiàn)‘Size factors should be positive’此錯(cuò)誤黑低。 過(guò)濾掉這些細(xì)胞后菇民,錯(cuò)誤應(yīng)該消失了。 但是請(qǐng)注意投储,我們建議在運(yùn)行 scDblFinder之前不要進(jìn)行過(guò)于嚴(yán)格的過(guò)濾第练。

問(wèn)題5:我怎樣才能重現(xiàn)我的結(jié)果?

由于它依賴于人工雙細(xì)胞的部分隨機(jī)生成玛荞,因此對(duì)同一數(shù)據(jù)多次運(yùn)行scDblFinder會(huì)產(chǎn)生略有不同的結(jié)果娇掏。你可以使用 set.seed() 確保可重復(fù)性勋眯,但是在多線程時(shí)使用 set.seed() 是不行的婴梧。請(qǐng)使用以下程序:

bp <- MulticoreParam(3, RNGseed=1234) 
bpstart(bp) 
sce <- scDblFinder(sce, clusters="cluster", samples="sample", BPPARAM=bp) 
bpstop(bp)

問(wèn)題6:我可以將它與Seurat或其他工具結(jié)合使用嗎?

如果輸入的sce對(duì)象已經(jīng)包含歸一化矩陣( logcounts)或名為“PCA”的reducedDim數(shù)據(jù)客蹋,scDblFinder將使用它們進(jìn)行聚類分析塞蹭。 此外,可以使用 scDblFinder() 函數(shù)的 cluster參數(shù)手動(dòng)指定讶坯。 通過(guò)這種方式番电,seurat聚類可以例如用于創(chuàng)建人造雙細(xì)胞(參見(jiàn) ?Seurat::as.SingleCellExperiment.Seurat for conversion to SCE)。

在人造雙細(xì)胞生成之后,真實(shí)和人造雙細(xì)胞的計(jì)數(shù)必須一起重新處理(即歸一化和 PCA)漱办,在內(nèi)部使用scater執(zhí)行的这刷。 如果您希望以不同的方式執(zhí)行此步驟,您可以提供自定義函數(shù)來(lái)執(zhí)行此操作(請(qǐng)參閱 ?scDblFinder 中的處理參數(shù))娩井。 然而暇屋,我們注意到,這一步的變化對(duì)雙細(xì)胞檢測(cè)的影響不大洞辣。 事實(shí)上咐刨,例如,根本不執(zhí)行任何歸一化會(huì)降低雙峰識(shí)別的準(zhǔn)確性扬霜,但也是一點(diǎn)點(diǎn)定鸟。

問(wèn)題7:scDblFinder可以應(yīng)用到scATACseq數(shù)據(jù)嗎?

可以畜挥,專門處理峰值數(shù)據(jù)。由于單細(xì)胞ATAC-seq數(shù)據(jù)的稀疏性比轉(zhuǎn)錄組要大得多婴谱,而且scDblFinder需要處理一系列基因蟹但,因此使用默認(rèn)的標(biāo)準(zhǔn)參數(shù),運(yùn)行的性能較差(執(zhí)行慢)谭羔。因此华糖,我們推薦使用aggregateFeatures=TRUE,這將在正常的scDblFinder 過(guò)程之前聚合相似的基因(而不是選擇基因)瘟裸,會(huì)產(chǎn)生不錯(cuò)的結(jié)果客叉。如果基因足夠少,我們推薦直接基于距離計(jì)算而不是通過(guò)SVD步驟獲得话告,如下所示:

sce <- scDblFinder(sce, aggregateFeatures=TRUE, nfeatures=25, processing="normFeatures")

問(wèn)題8:我是在雙細(xì)胞鑒定前還是鑒定后運(yùn)行QC細(xì)胞質(zhì)控兼搏?

cDblFinder的輸入數(shù)據(jù)不應(yīng)包含空液滴,并且可能需要移除覆蓋率非常低的細(xì)胞以避免錯(cuò)誤(例如 <200 reads)沙郭。
進(jìn)一步的細(xì)胞質(zhì)控應(yīng)該在雙細(xì)胞識(shí)別的下游進(jìn)行佛呻,有兩個(gè)理由:
1.默認(rèn)的預(yù)期雙細(xì)胞率是根據(jù)給定的細(xì)胞計(jì)算的,如果你排除了很多質(zhì)量低的細(xì)胞病线,scDblFinder可能會(huì)認(rèn)為雙細(xì)胞率應(yīng)該低于實(shí)際值吓著。
2.剔除所有低質(zhì)量細(xì)胞可能會(huì)妨礙我們檢測(cè)由高質(zhì)量細(xì)胞和低質(zhì)量細(xì)胞組合形成的雙細(xì)胞的能力。
話雖如此送挑,這些主要是理論依據(jù)绑莺,除非你的QC過(guò)濾非常嚴(yán)格(而且不應(yīng)該如此!)惕耕,否則結(jié)果不太可能有很大的不同纺裁。

scDblFinder運(yùn)行之前要做一些初次過(guò)濾,但不要太嚴(yán)格(例如 <200 UMI)
質(zhì)控粗略過(guò)濾->運(yùn)行scDblFinder->較嚴(yán)格過(guò)濾

pbmc.data <- Read10X(data.dir = "../data/pbmc3k/filtered_gene_bc_matrices/hg19/") 
# 粗略過(guò)濾
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells = 3, min.features = 200)

后記:
之前在群里看到有人問(wèn)司澎,雙細(xì)胞質(zhì)控后对扶,拿質(zhì)控后的數(shù)據(jù)重新跑scDblFinder区赵,還是會(huì)有大量雙細(xì)胞被檢出?
這個(gè)是必然的浪南,由scDblFinder的算法決定笼才,它是由輸入數(shù)據(jù)建立起預(yù)測(cè)分類模型,不像singleR有另外一套參考數(shù)據(jù)集络凿,拿輸入數(shù)據(jù)去map到參考數(shù)據(jù)集骡送。
只要你喂給scDblFinder數(shù)據(jù),它都會(huì)給輸入的細(xì)胞一個(gè)score值絮记,然后設(shè)置閾值進(jìn)行分類摔踱,值高的為雙細(xì)胞。
scDblFinder強(qiáng)烈依賴輸入數(shù)據(jù)怨愤,有它使用的范疇派敷,所以反復(fù)進(jìn)行雙細(xì)胞scDblFinder質(zhì)控,用法是不對(duì)的撰洗。
拿到單細(xì)胞轉(zhuǎn)錄組數(shù)據(jù)篮愉,先質(zhì)控粗略過(guò)濾->運(yùn)行scDblFinder進(jìn)行雙細(xì)胞質(zhì)控->較嚴(yán)格質(zhì)控過(guò)濾。
其實(shí)最好有一個(gè)相互驗(yàn)證的過(guò)程差导。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載试躏,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末设褐,一起剝皮案震驚了整個(gè)濱河市上枕,隨后出現(xiàn)的幾起案子寇僧,更是在濱河造成了極大的恐慌巫湘,老刑警劉巖娄猫,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異外冀,居然都是意外死亡弱判,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門锥惋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)昌腰,“玉大人,你說(shuō)我怎么就攤上這事膀跌≡馍蹋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵捅伤,是天一觀的道長(zhǎng)劫流。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么祠汇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任仍秤,我火速辦了婚禮,結(jié)果婚禮上可很,老公的妹妹穿的比我還像新娘诗力。我一直安慰自己,他們只是感情好我抠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布苇本。 她就那樣靜靜地躺著,像睡著了一般菜拓。 火紅的嫁衣襯著肌膚如雪瓣窄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天纳鼎,我揣著相機(jī)與錄音俺夕,去河邊找鬼。 笑死贱鄙,一個(gè)胖子當(dāng)著我的面吹牛劝贸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贰逾,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼悬荣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼菠秒!你這毒婦竟也來(lái)了疙剑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤践叠,失蹤者是張志新(化名)和其女友劉穎言缤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體禁灼,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡管挟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弄捕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片僻孝。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖守谓,靈堂內(nèi)的尸體忽然破棺而出穿铆,到底是詐尸還是另有隱情,我是刑警寧澤斋荞,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布荞雏,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凤优。R本人自食惡果不足惜悦陋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筑辨。 院中可真熱鬧俺驶,春花似錦、人聲如沸挖垛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)痢毒。三九已至送矩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哪替,已是汗流浹背栋荸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凭舶,地道東北人晌块。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像帅霜,于是被迫代替她去往敵國(guó)和親匆背。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容