隨著空間轉(zhuǎn)錄組技術(shù)的普及,越來越多的課題開始使用這一技術(shù)检诗。當(dāng)前甩鳄,以10X Visium為代表的空間轉(zhuǎn)錄組技術(shù)是目前最常見的技術(shù)。然而,10X Visium由于技術(shù)本身的局限性渴逻,其分辨率較低疾党,所得到spot并非單細(xì)胞水平,往往由10個左右的細(xì)胞構(gòu)成一個spot惨奕,這給后續(xù)的分析帶來了巨大的困擾雪位。
1. 概念
所謂空間轉(zhuǎn)錄組反卷積算法是一種利用單細(xì)胞轉(zhuǎn)錄組數(shù)據(jù)作為參考,來推斷空間轉(zhuǎn)錄組數(shù)據(jù)中每個位置的細(xì)胞類型和比例的方法梨撞”⑾矗空間轉(zhuǎn)錄組數(shù)據(jù)是指在保留組織或細(xì)胞的空間信息的同時,測量基因表達(dá)的數(shù)據(jù)卧波。由于空間轉(zhuǎn)錄組數(shù)據(jù)的分辨率有限时肿,每個位置可能包含多種細(xì)胞類型的混合物,因此需要一種方法來解析每個位置的細(xì)胞組成港粱。
空間轉(zhuǎn)錄組反卷積算法的意義是螃成,它可以幫助我們更好地理解組織或細(xì)胞的空間結(jié)構(gòu)和功能,揭示細(xì)胞類型之間的相互作用和通訊查坪,發(fā)現(xiàn)空間上的細(xì)胞異質(zhì)性和狀態(tài)變化寸宏,以及探索空間轉(zhuǎn)錄組數(shù)據(jù)與其他空間數(shù)據(jù)(如組織形態(tài)學(xué),免疫組化偿曙,熒光原位雜交等)的關(guān)聯(lián)性氮凝。空間轉(zhuǎn)錄組反卷積算法在生物醫(yī)學(xué)領(lǐng)域有著廣泛的應(yīng)用遥昧,例如神經(jīng)科學(xué)覆醇,腫瘤學(xué),發(fā)育生物學(xué)炭臭,免疫學(xué)等永脓。
2 原理
按照實現(xiàn)的原理來說主要可以分為三種實現(xiàn)反卷積的方法:
(1)概率模型:這類方法假設(shè)每個位置的基因表達(dá)服從一個多項式分布,其參數(shù)由參考單細(xì)胞數(shù)據(jù)中的細(xì)胞類型的基因表達(dá)的加權(quán)和決定鞋仍。這類方法的優(yōu)點是可以考慮基因表達(dá)的離散性和噪聲常摧,以及細(xì)胞類型的先驗信息。這類方法的代表RCTD威创,Cell2location等落午;
(2)非負(fù)矩陣分解和非負(fù)最小二乘:這類方法將空間轉(zhuǎn)錄組反卷積問題轉(zhuǎn)化為一個非負(fù)矩陣分解或非負(fù)最小二乘的優(yōu)化問題,即尋找一組非負(fù)的權(quán)重肚豺,使得每個位置的基因表達(dá)與參考單細(xì)胞數(shù)據(jù)中的細(xì)胞類型的基因表達(dá)的加權(quán)和的差異最小溃斋。這類方法的優(yōu)點是可以利用現(xiàn)有的高效的優(yōu)化算法,以及可以加入正則化項來防止過擬合吸申。這類方法的代表有SpatialDWLS,Splotlight等梗劫;
(3)深度學(xué)習(xí)框架:這類方法利用深度神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)一個從空間轉(zhuǎn)錄組數(shù)據(jù)到細(xì)胞類型比例的映射函數(shù)享甸。這類方法的優(yōu)點是可以自動提取特征,以及可以處理非線性和復(fù)雜的關(guān)系梳侨。這類方法的代表有Tangram蛉威。
按照是否需要對應(yīng)的單細(xì)胞轉(zhuǎn)錄組的數(shù)據(jù)有可以分為有參算法和無參算法:
(1)有參算法:RCTD、Cell2location等走哺;
(2)無參算法:STdeconvolve等蚯嫌。
那么哪些這么多算法究竟哪些才比較符合真實的情況呢,我們看一下文獻(xiàn)的總結(jié):
右邊是使用ISS法基于原位雜交得到的“陽性”結(jié)果丙躏,而左邊則是靠軟件反卷積去“猜測”的細(xì)胞組成結(jié)果择示。
在圖中可以非常明顯的觀察到RCTD、cell2locaiton等有參考算法明顯優(yōu)于無參考的算法彼哼。且在各類算法中对妄,RCTD所得到的結(jié)果和真實的更吻合,具有更突出的性能敢朱。
3 實戰(zhàn)
這里以Seurat提供的代碼為例進(jìn)行講解
#devtools::install_github("dmcable/spacexr", build_vignettes = FALSE) #安裝RCTD
library(spacexr)
# set up reference
ref <- readRDS("mouse_hippocampus_reference.rds")
ref <- UpdateSeuratObject(ref)
Idents(ref) <- "celltype"
# extract information to pass to the RCTD Reference function
counts <- ref[["RNA"]]$counts
cluster <- as.factor(ref$celltype)
names(cluster) <- colnames(ref)
nUMI <- ref$nCount_RNA
names(nUMI) <- colnames(ref)
reference <- Reference(counts, cluster, nUMI) #構(gòu)建用于參考的單細(xì)胞數(shù)據(jù)剪菱,這里其實重點就是counts單細(xì)胞表達(dá)矩陣,cluster是我們的celltype的注釋拴签,nUMI可以為空
# set up query with the RCTD function SpatialRNA
st_data <- readRDS("st_data.rds") #載入我們的空間轉(zhuǎn)錄組數(shù)據(jù)孝常,如果是標(biāo)準(zhǔn)的space ranger數(shù)據(jù)可以使用Load10X_Spatial載入
counts <- st_data[["Spatial"]]$counts
coords <- GetTissueCoordinates(slide.seq)
colnames(coords) <- c("x", "y")
coords[is.na(colnames(coords))] <- NULL
query <- SpatialRNA(coords, counts, colSums(counts))
#運行RCTD開始反卷積
RCTD <- create.RCTD(query, reference, max_cores = 8)
RCTD <- run.RCTD(RCTD, doublet_mode = "full") # 我們使用10X Visium的數(shù)據(jù),由于spot的特性蚓哩,使用full构灸,如果是高分辨率的平臺可以使用doublet或singlet
decon_mtrx <- as.matrix(RCTD@results$weights)
運行到這里我們就得到了各Spot的成分了,我們會得到一張表格岸梨,標(biāo)題為細(xì)胞的類型喜颁,列為spot的名字,然后每一個單元格就是我們這個spot中各細(xì)胞的占比曹阔。
接下來如果如何畫出類似上面文章的占比的圖呢半开,代碼如下:
library(SPOTlight)
st_data$cell <- names(st_data$orig.ident)
st_data <- subset(st_data, cell %in% rownames(decon_mtrx))
p = plotSpatialScatterpie(st_data, decon_mtrx, scatterpie_alpha = 1, pie_scale = 0.3)
4 寫在后面
對于10X Visium的數(shù)據(jù)來說,按照傳統(tǒng)單細(xì)胞的分析十分荒謬赃份,每個spot中包含的細(xì)胞已經(jīng)多如牛毛寂拆,cluster中的細(xì)胞類型更是如繁星般。因此抓韩,充分的了解我們的組織上的細(xì)胞構(gòu)成纠永,做反卷積進(jìn)行“真正”的細(xì)胞注釋才是最大化的利用我們的空間轉(zhuǎn)錄組數(shù)據(jù)。