空間轉錄組教程||用BayesSpace提高分群和基因分辨率

最近開發的空間基因表達技術,如空間轉錄組學可以在保留空間背景的同時,全面測量轉錄組譜。然而,現有的空間基因表達數據分析方法往往不能有效利用空間信息,不能解決技術分辨率有限的問題。

在空間數據的分析中,痛點像單細胞轉錄組一樣也是:聚類。我們希望聚出來的類不僅在uamp、tsne這樣的空間中是清楚明了的,也希望在空間坐標中也是這樣。同時也希望找到空間特異的基因表達模式。今天給大家介紹的BayesSpace,正是在做這方面的努力。

BayesSpace是一種完全貝葉斯統計方法,用于聚類分析來增強空間轉錄組數據的分辨率,并且可以無縫集成到當前的轉錄組分析工作流程中。BayesSpace利用多元t分布對基因表達的低維表示進行建模,然后通過Potts模型合并空間信息,這使得相鄰點屬于同一簇。這種方法借鑒了用于圖像分析的成熟的空間統計方法。有效地利用空間信息可以極大地提高了空間數據聚類的性能。

在算法考慮并鼓勵鄰居點屬于同一個簇的原則也可以用來提高點的分辨率到“子點(sub-spot)”水平。這里鼓勵子點屬于同一個簇。子點水平表達有時候并不能直接觀察到,但可以通過反復抖動點水平表達值,通過MCMC進行估計。在實踐中,bayesspace分辨率增強的聚類可以識別重要的生物結構,否則可能會錯過。

我們從10X下載他們做的示例數據,并安裝好了BayesSpace,下面讓我們探索一番,并與Seurat的聚類結果做一個比較。

library(SpatialExperiment)
library(SingleCellExperiment)
library(ggplot2)
library(BayesSpace)
library(Seurat)
library(cowplot)

allcolour=c("#DC143C","#0000FF","#20B2AA","#FFA500","#9370DB","#98FB98","#F08080","#1E90FF","#7CFC00","#FFFF00",
            "#808000","#FF00FF","#FA8072","#7B68EE","#9400D3","#800080","#A0522D","#D2B48C","#D2691E","#87CEEB","#40E0D0","#5F9EA0",
            "#FF1493","#0000CD","#008B8B","#FFE4B5","#8A2BE2","#228B22","#E9967A","#4682B4","#32CD32","#F0E68C","#FFFFE0","#EE82EE",
            "#FF6347","#6A5ACD","#9932CC","#8B008B","#8B4513","#DEB887")   # 我最愛的顏色搭配

分別用BayesSpaceh和Seurat讀入數據,這里小哥給Seurat的函數都加Seurat::以表示來自Seurat,以此提示親們函數的來源。同時創建sce和seo兩個對象。

sce <- readVisium("E:\\learnscanpy\\data\\V1_Breast_Cancer_Block_A_Section_1_spatial\\")
sce 
seo<-Seurat::Load10X_Spatial("E:\\learnscanpy\\data\\V1_Breast_Cancer_Block_A_Section_1_spatial\\")
seo

先走我們熟悉的Seurat空間流程:

plot1 <- Seurat::VlnPlot(seo, features = "nCount_Spatial", pt.size = 0.1) + NoLegend()
plot2 <- Seurat::SpatialFeaturePlot(seo, features = "nCount_Spatial") + theme(legend.position = "right")
plot_grid(plot1, plot2)

Seurat 默認聚類方法:

seo <- Seurat::SCTransform(seo, assay = "Spatial", return.only.var.genes = FALSE, verbose = FALSE)
seo <- Seurat::RunPCA(seo, assay = "SCT", verbose = FALSE)
seo <- Seurat::FindNeighbors(seo, reduction = "pca", dims = 1:30)
seo <- Seurat::FindClusters(seo, verbose = FALSE)
seo <- Seurat::RunUMAP(seo, reduction = "pca", dims = 1:30)
p1 <- Seurat::DimPlot(seo, reduction = "umap", label = TRUE)
p2 <- Seurat::SpatialDimPlot(seo, label = TRUE, label.size = 3)
plot_grid(p1, p2)

下面我們來用BayesSpace的一般聚類方法,對數據進行聚類。

set.seed(1314)
?spatialPreprocess
sce <- scater::logNormCounts(sce)
sce <- spatialPreprocess(sce, platform="Visium", 
                              n.PCs=7, n.HVGs=2000, log.normalize=FALSE)


sce <- qTune(sce, qs=seq(2, 10), platform="Visium", d=7)
qPlot(sce)

sce
class: SingleCellExperiment 
dim: 33538 3813 
metadata(2): BayesSpace.data chain.h5
assays(2): counts logcounts
rownames(33538): MIR1302-2HG FAM138A ... AC213203.1 FAM231C
rowData names(3): gene_id gene_name is.HVG
colnames(3813): CAGGATCCGCCCGACC-1 CACGATTGGTCGTTAA-1 ... CGCAGTTCTATCTTTC-1 GACAGGTAATCCGTGT-1
colData names(9): spot in_tissue ... cluster.init spatial.cluster
reducedDimNames(1): PCA
altExpNames(0):

推薦聚類個數:

雖然看到聚成8個是可以的,但是為了和Seurat有一定程度的比較,我們決定用10。

sce <- spatialCluster(sce, q=10, platform="Visium", d=7,
                           init.method="mclust", model="t", gamma=2,
                           nrep=1000, burn.in=100,    #  nrep建議大于10000 ,奈何我們為了演示只能犧牲點了
                           save.chain=TRUE)

比較一下二者的區別,為了顏色更加明顯,我們用黑色的背景:

p3 <-SpatialDimPlot(seo, label = T, label.size = 3)+ ggtitle("Seurat") +DarkTheme()
p4 <- clusterPlot(sce,label = "spatial.cluster" )+ ggtitle("BayesSpace")+DarkTheme()
plot_grid(p3, p4)
你就不能用PPT整好看點嗎?!

可以看到,Seurat默認的聚類方法在空間上有一定的混雜,雖然BayesSpace的一般聚類也有一些。但是BayesSpace還為我們準備了spatialEnhance()函數,可以增強主成分的分辨率,并將這些pc和預測的子點分辨率的聚類標簽添加到新的聚類單元中。正如上面我們對spatialCluster()的演示一樣,我們在這個示例中使用的迭代次數(nrep=1000)要少于我們在實踐中推薦的次數(nrep=100000或更大)。

sce.enhanced <- spatialEnhance(sce, q=10, platform="Visium", d=7,
                                    model="t", gamma=2,
                                    jitter_prior=0.3, jitter_scale=3.5,
                                    nrep=1000, burn.in=100,  #   為了向內存妥協
                                    save.chain=T)

增強的singlecelexperimental包括原始sce中的父點索引(spot.idx)以及子點索引。它向原始spot坐標添加偏移量,并提供增強的集群標簽(spatial.cluster)。

DataFrame with 6 rows and 9 columns
             spot.idx subspot.idx  spot.row  spot.col       row       col  imagerow  imagecol spatial.cluster
            <numeric>   <integer> <integer> <integer> <numeric> <numeric> <numeric> <numeric>       <numeric>
subspot_1.1         1           1         1        49  1.333333   49.3333   4362.18   10258.5               4
subspot_2.1         2           1         0        50  0.333333   50.3333   4125.18   10395.5               6
subspot_3.1         3           1         1        51  1.333333   51.3333   4363.18   10531.5               4
subspot_4.1         4           1         0        52  0.333333   52.3333   4126.18   10668.5               6
subspot_5.1         5           1         1        53  1.333333   53.3333   4363.18   10804.5               4
subspot_6.1         6           1         0        54  0.333333   54.3333   4126.18   10941.5               4

我們也將兩者做一個比較:

clusterPlot(sce.enhanced,label = "spatial.cluster" )+ ggtitle("enhanced")+DarkTheme()

bayesspace可視化基因可以提高基因表達的分辨率。BayesSpace處理基因表達矩陣的主成分,spatialEnhance()函數計算增強分辨率的PC向量。增強的基因表達不是直接計算,而是使用回歸算法輸入,對于每個基因訓練一個使用每個位點的PC載體的模型來預測位點水平的基因表達,并使用擬合的模型從子位點PCs中預測子點表達。

基因表達增強是在enhanceFeatures()函數中實現的。BayesSpace默認情況下使用xgboost預測表達式,但是線性回歸和狄利克雷回歸也可以通過model參數使用。在使用xgboost時,我們建議通過將nrounds參數設置為0來自動調優它,盡管這是以增加運行時為代價的(實際中比預先指定的nrounds要慢約4倍)。

enhanceFeatures()可用于計算所有基因或感興趣基因子集的子點水平表達。在這里,我們將通過增強四種標記基因的表達來證明:PMEL(黑色素瘤),CD2 (t細胞),CD19 (b細胞)和COL1A1(成纖維細胞)。

markers <- c("PMEL", "CD2", "CD19", "COL1A1")
sce.enhanced <- enhanceFeatures(sce.enhanced, sce,
                                      feature_names=markers,
                                     nrounds=0)


enhanced.plots <- purrr::map(markers, function(x) featurePlot(sce.enhanced, x))
spot.plots <- purrr::map(markers, function(x) featurePlot(sce, x))
patchwork::wrap_plots(c(enhanced.plots, spot.plots), ncol=4)

雖然我們的marker只是根據推測來選的,很明顯可以看出,enhanced之后基因的表達模式更加凸顯,而未處理的基因表達規律不強。


BayesSpace enables the robust characterization of spatial gene expression architecture in tissue sections at increased resolution
https://research.fredhutch.org/gottardo/en/blog/bayesspace.html
https://www.biorxiv.org/content/10.1101/2020.09.04.283812v1

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容