起因:最近有個(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é)艇棕。
問(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):
- 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.
- 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.)
- 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%曲饱。
但是悠抹,在scDblFinder的文章中,提到在單細(xì)胞實(shí)驗(yàn)中扩淀,雙細(xì)胞率為10-20%楔敌。
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ì)胞率是:
比如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è)包中一些方法(以粗體顯示)與其他方法:
因此崖媚,我們?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水由。
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%
問(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ì)胞饭耳。
方法說(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ò)程差导。