作者:堯小飛
審稿:童蒙
編輯:amethyst
空間轉錄組技術發展史
如果說最近什么最紅火,那一定是奧運會,今年的奧運會從開始到現在就一直吸引著國人的注意,奧運會的精彩讓我差點忘記了地球外太空還有我們的國寶-“三位航天員”;在科研界,當紅辣子雞是誰呢?那肯定屬于空間轉錄組,空間轉錄組被Nature Methods雜志評為2020年度技術,今年空間轉錄組技術得到的廣泛的應用,已經成為了當前科研界名副其實的“當紅辣子雞“。
何為空間轉錄組?空間轉錄組與單細胞轉錄組有何區別?空間轉錄組學在空間上進行轉錄組分析,這保留了空間位置的轉錄組學,讓我們對實體組織空間上的異質性進入了一個全新的視角,單細胞組學是細胞分辨率上讓我們了解組織樣品的細胞異質性,可以讓我們知道樣品中的細胞圖譜。被Science評為2018年年度突破技術的單細胞組學技術和被Nature Methods評為2019年年度技術方法的單細胞多組學技術讓我們在了解生物異質性和從更高分辨率較多解決生物學問題提供了極大的方便,但是令科學界遺憾的是,這種單細胞組學技術沒有空間位置信息,就像我們知道銀河系有哪些行星,但是如果我們不知道其具體的位置信息的話,這對科學界了解事物本質問題還是有一定的困擾。因此空間轉錄組技術的誕生給我們提供了從空間位置了解事物本質方法途徑。目前空間轉錄組技術基本上還未到單細胞水平,一般一個空間位置spots上有多個細胞,10X Genomics Visum一般為1-10個細胞,空間轉錄組學能夠提供空間位置,但是分辨率達不到單細胞水平,單細胞轉錄組學分辨率能夠達到單細胞分辨率,但是沒有空間位置信息,因此將空間轉錄組與單細胞轉錄組結合的話,那就既有空間位置信息,又達到了單細胞分辨率,這為科學界提供了有力的工具,大大的提高了生物體的組織、器官等研究的分辨率和準確性。
其實空間轉錄組學的發展歷史可以追溯到上個世紀,經歷過漫長的發展,從早期的smFISH(單分子RNA熒光原位雜交技術)和LCM(激光線為切割)技術發展到目前的10X Visium(空間分辨的全轉錄組信息)、Slide-Seq(溶液中的珠子)、APEX-Seq(亞細胞定位),從早期的少量基因到目前的全轉錄組(所有的基因),空間轉錄組技術在近30年中得到的極大的發展,特別是隨著10X Genomics公司收購Visium以及后續10X Visium產品的推出,這極大的推動了空間轉錄組技術的應用。
10X Visium空間轉錄組基本原理
10X Visium空間轉錄組是目前應用最廣的空間轉錄組技術,其基本原理如下:一般有兩種載玻片,一種載玻片是組織透化條件優化玻片,另外一種載玻片為文庫構建載玻片。組織透化條件優化載玻片是主要在建庫之前,不同組織和樣品的透化條件可能不一樣,需要根據自己的樣品組織進行透化條件的優化,以達到最佳透化條件進行后續建庫,這里主要透化優化包括透化時間和透化濃度等優化。在建庫載玻片上有四個捕獲區域,每個捕獲區域的大小為6.5x6.5 mm,包含5000個spots(被條形碼標記的點),每個spots的直徑為55 μm,spots和spots之間中心的距離為100 μm,并且每個spots都有一個唯一的barcode序列,這與單細胞的細胞barcode一樣。一般將切割好的樣品平鋪在載玻片中間位置,然后根據優化獲得透化條件進行透化,組織樣品中細胞會釋放mRNA,然后與每個spots的polyT序列進行結合,然后進行后續的文庫構建測序,根據spots的barcode確定空位位置,從而實現空間轉錄組學的檢測。需要注意的是,這里的spots并不是單細胞級別的,一般含有1-10個細胞。
空間轉錄組與單細胞轉錄組整合分析
器官系統由不同的細胞亞群組成,它們在給定組織內的空間位置與其功能密切相關。單細胞轉錄組表征單個細胞的轉錄組,可以揭示給定器官內的細胞亞群。然而,在單細胞轉錄組必要的組織解離步驟中,單個細胞的分離破壞了它們在天然組織中的空間定位及其彼此接近的信息。鑒于近分泌和旁分泌信號的作用范圍為 0 到 200 μm,因此此類空間信息對于了解正常組織和患病組織的細胞間通訊至關重要。使用空間轉錄組學檢測完整組織,通過物理定位在單細胞轉錄組識別的特定細胞亞群中表達的基因集解決了這一挑戰。當前的空間轉錄組學方法本身還不能提供組織中精確定位的單細胞的深層轉錄組信息。然而,它們可以闡明富含不同基因集的空間位置。這將細胞亞群定位到它們所在的組織“鄰域”,并指定它們表達的配體和受體以影響局部細胞間通訊。因此,當結合使用時,單細胞轉錄組和空間轉錄組學可以在其天然組織環境中定位具有轉錄特征的單個細胞。因此,整合單細胞轉錄組和空間轉錄組學數據可能會增加我們對特定細胞亞群的作用及其在發育、穩態和疾病中的相互作用的理解。
空間轉錄組與單細胞轉錄組整合分析的方法隨著空間轉錄組技術的發展,已經有了很多種方法,目前主要有兩大類:
映射方法:映射方法就是將單細胞轉錄組 細胞映射到用戶定義的區域或2D或3D空間中的單細胞坐標。然而,這些方法依賴于具有原型結構的組織。
解卷積:就是認為空間轉錄組是spots是由混合細胞組織,通過解卷積方法將spots是細胞組成給預測出來,然后根據細胞類型的比例來進行后續研究。
其實空間轉錄組與單細胞轉錄組整合分析,在空間轉錄組分析上就是空間轉錄組上細胞亞群鑒定的一個過程,細胞亞群的鑒定是單細胞轉錄組分析中最為關鍵的一個步驟,同樣的空間轉錄組上,其細胞亞群的鑒定(空間轉錄組與單細胞轉錄組整合分析)也是空間轉錄組分析的關鍵步驟,也是下游的細胞通訊、發育軌跡分析的基礎。
空間轉錄組與單細胞轉錄組整合方法的映射方法,其實很多屬于多組學的整合方法,已經有很多成熟的工具用于其整合分析,比如LIGER、Seurat Integration( Seurat 3.0以上)和Harmony,這些整合方法得到的結果大部分是一個spots屬于某個細胞類型,但是實際上,每個spots是屬于多細胞,一般含有不同類型的細胞,因此這種映射方法在很多分析中應用不是很好。基于混合細胞的假設的解卷積的方法就很好的解決了這個問題,這種方法更符合研究實際,因此在這里,主要介紹解卷積的方法,這里介紹兩種工具:Robust cell-type decomposition (RCTD)和SPOTlight。
RCTD
RCTD(Robust cell-type decomposition),是一種將 RNA 測序混合物分解為單個細胞類型的監督學習方法,從而能夠將細胞類型分配給空間轉錄組像素。具體來說,我們利用帶注釋的 scRNA-seq 數據來定義空間轉錄組學數據中預期存在的細胞類型的細胞類型特異性概況。
有監督的細胞類型學習的一個相關挑戰是常說的平臺效應,即依賴于技術的文庫制備對測序平臺之間單個基因捕獲率的影響。研究表明,如果不考慮這些平臺效應,監督方法不太可能成功,因為系統技術可變性主導了相關的生物信號。這些影響先前已在同一生物樣本上的單細胞和單核 RNA-seq (snRNA-seq) 之間的比較中發現,但是RCTD解決了其平臺效應,可以應用于不同平臺的空間轉錄組的解卷積分析。
RCTD 可以準確地發現模擬和真實空間轉錄組數據中細胞類型的定位。此外,我們表明 RCTD 可以檢測細微的轉錄組差異以在空間上繪制細胞亞型。最后,我們使用 RCTD 來計算預期的細胞類型特異性基因表達,從而能夠根據細胞的空間環境檢測基因表達的變化。
軟件的安裝
最近安裝GitHub上的包老是不穩定,如果這樣安裝報錯的話,最好還是下載RCTD(https://github.com/dmcable/RCTD)到本地以后再安裝吧。
# install.packages("devtools")
devtools::install_github("dmcable/RCTD", build_vignettes = TRUE)
軟件測試
包的導入
library(RCTD)
library(Matrix)
library(Seurat)
library(ggplot2)
數據準備
單細胞轉錄組數據的準備,一般是用Seurat4.0(或者Seurat3.0以上版本)分析的單細胞轉錄組數據的對象,保存為RDS格式。通常單細胞對象中含有已經鑒定好的細胞類型的結果,保存在sc@meta.data矩陣中,列名為cell_annotation,當然也可以改成其他名稱。最后生成一個參考數據對象,并保存為RDS格式,便于下次使用和中間文件的保存。
sc<-readRDS('sc.celltype.rds')
### Load in/preprocess your data, this might vary based on your file type
#refdir <- system.file("extdata",'Reference/Vignette',package = 'RCTD') # directory for the reference
counts <- as.matrix(sc@assays$RNA@counts )#read.csv(file.path(refdir,"dge.csv")) # load in counts matrix
#rownames(counts) <- counts[,1]; counts[,1] <- NULL # Move first column to rownames
meta_data <- sc@meta.data #read.csv(file.path(refdir,"meta_data.csv")) # load in meta_data (barcodes, clusters, and nUMI)
cell_types <- meta_data$cell_annotation; names(cell_types) <- rownames(meta_data)#meta_data$barcode # create cell_types named list
cell_types <- as.factor(cell_types) # convert to factor data type
nUMI <- meta_data$nCount_RNA; names(nUMI) <- rownames(meta_data)#meta_data$barcode # create nUMI named list
### Create the Reference object
reference <- Reference(counts, cell_types, nUMI)
#> Warning in Reference(counts, cell_types, nUMI): Reference: nUMI does not match colSums of counts. If this is unintended, please correct this discrepancy. If this
#> is intended, there is no problem.
## Examine reference object (optional)
print(dim(reference@counts)) #observe Digital Gene Expression matrix
#> [1] 384 475
table(reference@cell_types)
saveRDS(reference,'ref.rds')
空間轉錄組數據的準備,空間轉錄組數據,一般使用Seurat包進行分析的空間轉錄組結果對象,如果不是,則需要主要對象中含有空間坐標信息,這是必須的,如果沒有,可以通過一定的方式手動添加。這里主要用的數據與單細胞數據一樣,是原始表達矩陣數據counts。
rds_file='spatial.rds'
spatial <- readRDS(rds_file)
#https://github.com/dmcable/RCTD/issues/26
coords <- spatial@tools$Staffli@meta.data[,1:2]#GetTissueCoordinates(spatial, scale = NULL) # pulling unscaled tissue coordinates
#https://support.10xgenomics.com/spatial-gene-expression/software/pipelines/latest/output/images
#spatialcounts <- as.matrix(GetAssayData(spatial, assay = "Spatial", slot = "counts"))
spatialcounts <- as.matrix(spatial@assays$RNA@counts)
nUMI <- spatial@meta.data$nCount_RNA
names(nUMI)<-rownames(spatial@meta.data)
### Create SpatialRNA object
puck <- SpatialRNA(coords, spatialcounts, nUMI)
結果預測
myRCTD <- create.RCTD(puck, reference, max_cores = 8)
myRCTD <- run.RCTD(myRCTD, doublet_mode = 'doublet') #doublet_mode = 'doublet'
經過前面數據的準備,這里的結果預測還是比較方便,一般只有兩行命令,首先創建RCTD對象,使用函數為:create.RCTD,一般的參數不用調整,這里主要參數為max_cores,這里為線程數目,可以根據自己的空間轉錄組數據和集群資源進行調整。具體其他參數如下,可以根據自己的需求進行調整。
create.RCTD(
spatialRNA,
reference,
max_cores = 8,
test_mode = FALSE,
gene_cutoff = 0.000125,
fc_cutoff = 0.5,
gene_cutoff_reg = 2e-04,
fc_cutoff_reg = 0.75,
UMI_min = 100,
UMI_max = 2e+07,
UMI_min_sigma = 300,
class_df = NULL,
CELL_MIN_INSTANCE = 25,
cell_type_names = NULL
)
然后再直接運行run.RCTD,這里主要參數為doublet_mode,為模型參數,模型參數一般為doublet,雙細胞模型,但是并不是所有的spots都為雙細胞模型,因此可以選擇其他的模型,比如multi和full,不過一般選擇doublet為多,multi表示spots可以有多個細胞類型,full表示可以有任何數目的細胞類型,如果選擇multi,則是通過一種貪婪算法,知道最后數目固定。具體說明如下:
If in doublet mode, fits at most two cell types per pixel. It classifies each pixel as 'singlet' or 'doublet' and searches for the cell types on the pixel. If in full mode, can fit any number of cell types on each pixel. In multi mode, cell types are added using a greedy algorithm, up to a fixed number.
結果展示說明
results <- myRCTD@results
# normalize the cell type proportions to sum to 1.
norm_weights = sweep(results$weights, 1, rowSums(results$weights), '/')
cell_type_names <- myRCTD@cell_type_info$info[[2]] #list of cell type names
spatialRNA <- myRCTD@spatialRNA
resultsdir <- 'RCTD_Plots' ## you may change this to a more accessible directory on your computer.
dir.create(resultsdir)
# make the plots
# Plots the confident weights for each cell type as in full_mode (saved as
# 'results/cell_type_weights_unthreshold.pdf')
plot_weights(cell_type_names, spatialRNA, resultsdir, norm_weights)
# Plots all weights for each cell type as in full_mode. (saved as
# 'results/cell_type_weights.pdf')
plot_weights_unthreshold(cell_type_names, spatialRNA, resultsdir, norm_weights)
# Plots the weights for each cell type as in doublet_mode. (saved as
# 'results/cell_type_weights_doublets.pdf')
plot_weights_doublet(cell_type_names, spatialRNA, resultsdir, results$weights_doublet,
results$results_df)
這里將結果提取出來,然后進行展示,這里抓手結果主要有三種,分別為:cell_type_weights_unthreshold.pdf、cell_type_weights.pdf、cell_type_weights_doublets.pdf,結果會直接在輸出目錄下,這里的輸出目錄為:RCTD_Plots。
cell_type_weights.pdf文件主要是單個細胞類型,分別畫圖,每個spots代表含有當前細胞類型的所有spots,顏色的深淺代表細胞的占比,越紅表示越高,越藍代表越低。
cell_type_weights_doublets.pdf表示雙細胞模型下,某個細胞類型所有spots的比例,顏色的深淺代表細胞的占比,越紅表示越高,越藍代表越低。前面兩種結果,都是有一定的閾值,過了閾值以后的結果,當然還有沒有閾值的原始結果cell_type_weights_unthreshold.pdf,其顏色含義與前面一致,這里是不管值多低,結果都進行展示。
上面展示了在空間位置上的spots細胞類型結果,接下來展示了空間聚類結果上面每種細胞類型的數目情況,如下圖所示,X軸代表每個空間聚類,縱坐標y軸代表屬于該顏色細胞類型的spots數目。具體代碼如下:
# Plots the number of confident pixels of each cell type in 'full_mode'. (saved as
# 'results/cell_type_occur.pdf')
plot_cond_occur(cell_type_names, resultsdir, norm_weights, spatialRNA)
這里RCTD結果展示完了,其實RCTD文件結果是一個矩陣,矩陣包含了每個細胞屬于所有細胞類型的一個概率值,其和加起來為1,具體結果如下圖所示:
需要注意的是,如果單細胞數據細胞類型含有未知的細胞類型,一定要刪掉,不然會影響結果。
請大家繼續關注我們的下篇,對SPOTlight的介紹。
參考文獻:
[1] Longo S K , Guo M G , Ji A L , et al. Integrating single-cell and spatial transcriptomics to elucidate intercellular tissue dynamics[J]. Nature Reviews Genetics.
[2] V Marx. Method of the Year: spatially resolved transcriptomics[J]. Nature Methods, 2021, 18(1):9-14.
[3] Asp M , Bergenstrhle J , Lundeberg J . Spatially Resolved Transcriptomes—Next Generation Tools for Tissue Exploration[J]. BioEssays, 2020, 42(10).
[4] Cable D M , Murray E , Zou L S , et al. Robust decomposition of cell type mixtures in spatial transcriptomics[J]. Nature Biotechnology, 2021:1-10.
[5] Dong R , Yuan G C . SpatialDWLS: accurate deconvolution of spatial transcriptomic data[J]. Genome Biology, 2021.