作者,追風少年i
hello,大家好,周五了,馬上大家就可以過一個美好的禮拜天了,不過現在還是工作的時間,今天分享一個分析細胞類型空間依賴性的代碼,分析的結果如下圖所示:
圖片.png
談起空間依賴性,其實跟生態位、細胞“單元”的意思差不多,就是某些細胞類型通常會聚集在一起,其實之前分享了很多空間共定位的文章,放在這里,供大家參考。
10X空間轉錄組時空基因細胞動態(共定位)繪圖
10X空間轉錄組分析之細胞的空間連接性
10X空間轉錄組分析之空間模式與共定位
首先呢,我們需要思考一個問題,我們要計算細胞的空間共定位或者叫依賴性,距離怎么判定??是必須在同一個spot里面,還是一個spot涵蓋周圍的spot或者更遠??這種認知一方面需要我們對組織的結構有一個清楚的認知,另一方面,就需要通過生信手段的方法來輔助分析了。
分析前準備
- 單細胞空間聯合分析的結果矩陣(Seurat、cell2location結果均可)
好了,開始分享示例代碼
library(tidyverse)
library(Seurat)
library(mistyR)
source("misty_utilities.R") ####source腳本的代碼放在了最下面
future::plan(future::multisession)
需要source的腳本misty_utilities.R代碼我放在了最后面。
定義共定位的分析函數
run_colocalization <- function(slide,
assay,
useful_features,
out_label,
misty_out_alias = outdir) { ###輸出目錄大家自己制定
# Define assay of each view ---------------
view_assays <- list("main" = assay,
"juxta" = assay,
"para" = assay)
# Define features of each view ------------
view_features <- list("main" = useful_features,
"juxta" = useful_features,
"para" = useful_features)
# Define spatial context of each view -----
view_types <- list("main" = "intra",
"juxta" = "juxta",
"para" = "para")
# Define additional parameters (l in case of paraview,
# n of neighbors in case of juxta) --------
view_params <- list("main" = NULL,
"juxta" = 2,
"para" = 5)
misty_out <- paste0(misty_out_alias,
out_label, "_", assay)
run_misty_seurat(visium.slide = slide,
view.assays = view_assays,
view.features = view_features,
view.types = view_types,
view.params = view_params,
spot.ids = NULL,
out.alias = misty_out)
return(misty_out)
}
這個函數主要用來定義如何界定共定位的距離,在這里我設定了main就是點內,每個點周圍的2層spot為點間(juxta),第三種情況就是更遠的范圍,設置為外圍的5層spot(para),關于點內,點間,和other的定義,之前說過,如下圖,所不同的是外圍幾層的設定,當然名稱大家可以改成自己喜歡的方式。
18814178-6f5c7e72a3e0a35a.png
好了,我們要繼續代碼了
slide <- readRDS(rds) ###讀取單細胞空間聯合分析的rds,這里的rds包含了單細胞空間聯合分析的結果
####如果rds里面沒有包含單細胞空間聯合分析的結果,那么可以將分析的結果導入進去,方法如下
####anno = read.csv(sp_sc.csv,header = T,row.names = 1 ,check.names = F)
####library(matrix)
####slide@assays$SCT@data = as(anno,"dgCMatrix")
####assay = 'SCT'
DefaultAssay(slide) <- 'predictions'
useful_features <- rownames(slide) ####也可以自我設定感興趣的細胞類型
useful_features <- useful_features[! useful_features %in% "prolif"]
mout <- run_colocalization(slide = slide,
useful_features = useful_features,
out_label = slide_id,
assay = assay,
misty_out_alias = outdir) ###輸出目錄大家自己設定
分析到這里,基本上分析過程就結束了,文件如下,這里我選用了幾種細胞類型
圖片.png
這些文件包含了每種細胞類型在三種條件下細胞空間依賴性的結果,感興趣的大家可以分析看看,接下來我們要進行可視化。
文件里面的有些結果大家要認真對待一下,其中R2代表了absolute percentage,RMSE指均方根誤差。
好了,開始可視化
misty_res_slide <- collect_results(mout)
plot_folder <- paste0(mout, "/plots")
system(paste0("mkdir ", plot_folder))
pdf(file = paste0(plot_folder, "/", slide_id, "_", "summary_plots.pdf"))
mistyR::plot_improvement_stats(misty_res_slide)
mistyR::plot_view_contributions(misty_res_slide)
mistyR::plot_interaction_heatmap(misty_res_slide, "intra", cutoff = 0)
mistyR::plot_interaction_communities(misty_res_slide, "intra", cutoff = 0.5)
mistyR::plot_interaction_heatmap(misty_res_slide, "juxta_2", cutoff = 0)
mistyR::plot_interaction_communities(misty_res_slide, "juxta_2", cutoff = 0.5)
mistyR::plot_interaction_heatmap(misty_res_slide, "para_5", cutoff = 0)
mistyR::plot_interaction_communities(misty_res_slide, "para_5", cutoff = 0.5)
dev.off()
在得到的圖片summary_plots.pdf里面就有了我們想要的分析結果,我們來看一下
intra情況下細胞之間的依賴情況
圖片.png
圖片.png
包含外圍2層spot的情況下細胞的空間依賴性
圖片.png
圖片.png
包含外圍5層spot情況下細胞的空間依賴性
圖片.png
圖片.png
可見隨著距離的遠近細胞之間共定位的情況會發生變化,其實點內和點間是我們關注的重點,結果的解讀就留給大家做自己的課題的時候認真思考吧。
我們延伸一下,可以看到通路分析的空間供定位
圖片.png