簡介 CellChat V2現(xiàn)在支持從多個空間解析轉(zhuǎn)錄組學(xué)數(shù)據(jù)集中推斷細(xì)胞間的通信。CellChat需要輸入細(xì)胞(Spot)的的基因表達(dá)信息和空間位置數(shù)據(jù),并通過整合基因表達(dá)與空間距離信息以及信號配體、受體及其輔因子之間相互作用的先驗知識(CellChat的數(shù)據(jù)庫DB,支持人、小鼠、斑馬魚),來建模細(xì)胞間通信的概率。
輸入數(shù)據(jù) 在從空間分辨轉(zhuǎn)錄組學(xué)數(shù)據(jù)推斷空間鄰近的細(xì)胞間通訊時,用戶還需提供Spot/細(xì)胞質(zhì)心的空間坐標(biāo)/位置。此外,為了濾除超出分子最大擴(kuò)散范圍(如約250微米)的細(xì)胞間通訊,CellChat需要計算以微米為單位的細(xì)胞質(zhì)心到質(zhì)心的距離。因此,對于僅提供像素坐標(biāo)的空間技術(shù),CellChat會通過要求用戶提供轉(zhuǎn)換系數(shù),將空間坐標(biāo)從像素轉(zhuǎn)換為微米。
因此輸入的數(shù)據(jù)有
data_input
細(xì)胞(Spot)的基因表達(dá)信息) 標(biāo)準(zhǔn)化的基因表達(dá)量矩陣,行基因列細(xì)胞meta
(細(xì)胞和樣本的信息):一個數(shù)據(jù)框,行是細(xì)胞列可以是樣本名(samples
)、細(xì)胞標(biāo)簽、組織類型、分組等信息;coordinates
** (細(xì)胞(Spot)的空間坐標(biāo)信息): 一個數(shù)據(jù)框,每一行是一個細(xì)胞或Spot的x,y軸位置spatial.factors
(空間距離因子): 一個數(shù)據(jù)框,包括兩個因子,ratio
和 tol
;ratio
的作用是將像素坐標(biāo)轉(zhuǎn)換成微米坐標(biāo);tol
是 tolerance factortol作為比較質(zhì)心間距離與交互范圍時增強(qiáng)穩(wěn)健性的耐受因子。其值可設(shè)定為細(xì)胞/點大小的一半,單位為微米。若細(xì)胞/點大小未知,我們提供了一個名為computeCellDistance
的函數(shù)來計算細(xì)胞質(zhì)心間的距離。此時,tol可取最小質(zhì)心間距離的一半。需要注意的是,CellChat并不需要精確的耐受因子,它主要用于判斷當(dāng)一對細(xì)胞的距離大于交互范圍但小于“交互范圍 + tol”時,是否仍視為空間鄰近。contact.range
: 一個給定的交互范圍值(單位:微米),用于限制依賴接觸的信號傳遞。對于單細(xì)胞分辨率的空間轉(zhuǎn)錄組學(xué),contact.range
大致等于估計的細(xì)胞直徑(即細(xì)胞質(zhì)心間距離),這意味著依賴接觸或旁分泌的信號傳遞僅發(fā)生在兩細(xì)胞相互接觸時。通常,contact.range
設(shè)為10,這是一個典型的人類細(xì)胞大小。然而,對于低分辨率的空間數(shù)據(jù),如10X Visium數(shù)據(jù),應(yīng)將其設(shè)為細(xì)胞質(zhì)心間距離(例如,對于10X Visium數(shù)據(jù),contact.range
= 100)??梢允褂?code style="background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05);width: auto;margin-left: 2px;margin-right: 2px;padding: 2px 4px;border-style: none;border-width: 3px;border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4);border-radius: 4px;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">computeCellDistance函數(shù)來計算質(zhì)心間距離。contact.knn.k
除了提供contact.range
外,用戶還可以選擇提供contact.knn.k
值,以便將依賴接觸的信號傳遞限制在k最近鄰(knn)范圍內(nèi)。讀入Seurat空轉(zhuǎn)數(shù)據(jù) using替代library加載包
using(Seurat,magrittr,CellChat)
讀入注釋好的空轉(zhuǎn)數(shù)據(jù),文末掃碼加群獲取本文數(shù)據(jù)
load("visium_mouse_cortex_annotated.RData" ) srt <- visium.brain
準(zhǔn)備CellChat所需的輸入數(shù)據(jù) 細(xì)胞(Spot)的基因表達(dá)信息
data_input <- SeuratObject::GetAssayData(srt, layer = "data" , assay = "SCT" )
細(xì)胞和樣本的信息
meta <- srt@meta.data %>% dplyr::select(orig.ident, label) %>% dplyr::rename(samples = orig.ident, labels = label)
空間坐標(biāo)信息
coordinates <- SeuratObject::GetTissueCoordinates(srt, scale = NULL , cols = c("imagerow" , "imagecol" ))
spatial_factors
(空間距離因子)
spot_diameter_fullres <- jsonlite::fromJSON("spatial/scalefactors_json.json" )$spot_diameter_fullres# 理論上10X Visum的spot直徑大小(單位微米) spot_size <- 65 conversion_factor <- spot_size / spot_diameter_fullres spatial_factors <- data.frame(ratio = conversion_factor, tol = spot_size / 2 ) d_spatial <- CellChat::computeCellDistance(coordinates = coordinates, ratio = spatial_factors$ratio, tol = spatial_factors$tol)# 10X Visum 約為100微米 min(d_spatial[d_spatial != 0 ]) # 99.52178
創(chuàng)建CellChat對象 cellchat <- CellChat::createCellChat(object = data_input, meta = meta, group.by = "labels" , datatype = "spatial" , coordinates = coordinates, spatial.factors = spatial_factors) cellchat@DB <- CellChat::subsetDB(CellChatDB.mouse)
預(yù)處理
future::plan("multisession" , workers = 8 ) cellchat %<>% CellChat::subsetData()
識別高表達(dá)的基因
cellchat %<>% CellChat::identifyOverExpressedGenes()
識別高表達(dá)受體或配體
cellchat %<>% CellChat::identifyOverExpressedInteractions(variable.both = FALSE )
(可選)projectData將基因表達(dá)數(shù)據(jù)投影到蛋白質(zhì)-蛋白質(zhì)相互作用(PPI)網(wǎng)絡(luò)上。具體來說,使用擴(kuò)散過程根據(jù)高可信度實驗驗證的蛋白質(zhì)-蛋白質(zhì)網(wǎng)絡(luò)中定義的鄰居來平滑基因的表達(dá)值。當(dāng)分析測序深度較淺的單細(xì)胞數(shù)據(jù)時,此函數(shù)非常有用,因為投影可以減少信號基因的缺失效應(yīng),特別是配體/受體亞基可能為零表達(dá)的情況。有人可能會擔(dān)心這種擴(kuò)散過程可能引入的潛在偏差,然而,它只會引入非常微弱的通信。默認(rèn)情況下,CellChat使用原始數(shù)據(jù)(即object@data.signaling),而不是投影數(shù)據(jù)。若要使用投影數(shù)據(jù),應(yīng)在運行computeCommunProb之前運行projectData函數(shù),并在運行computeCommunProb時將raw.use設(shè)置為FALSE。
cellchat %<>% CellChat::projectData(adjMatrix = PPI.mouse)
細(xì)胞間通信網(wǎng)絡(luò)的推斷 CellChat通過為每種相互作用分配一個概率值并進(jìn)行置換檢驗,推斷出具有生物學(xué)意義的細(xì)胞間通信。CellChat利用質(zhì)量作用定律,結(jié)合基因表達(dá)與已知的信號配體、受體及其輔因子之間的相互作用先驗知識,來建模細(xì)胞間通信的概率。
注意事項:推斷出的配體-受體對的數(shù)量明顯取決于計算每個細(xì)胞群體平均基因表達(dá)的方法。默認(rèn)情況下,CellChat使用一種稱為“trimean”的統(tǒng)計穩(wěn)健均值方法,與其他方法相比產(chǎn)生的交互作用較少。然而,發(fā)現(xiàn)CellChat在預(yù)測較強(qiáng)的交互作用方面表現(xiàn)出色,這對于進(jìn)一步實驗驗證時縮小關(guān)注的交互作用范圍非常有幫助。在computeCommunProb中,提供了使用其他方法(如5%和10%截斷均值)計算平均基因表達(dá)的選項。需要注意的是,“trimean”近似于25%截斷均值,這意味著如果一個群體中表達(dá)細(xì)胞的比例小于25%,則平均基因表達(dá)為零。要使用10%截斷均值,可以設(shè)置type = "truncatedMean"和trim = 0.1。為了確定trim的合適值,CellChat提供了一個名為computeAveExpr的函數(shù),可以幫助檢查感興趣的信號基因(例如,computeAveExpr(cellchat, features = c("CXCL12","CXCR4"), type = "truncatedMean", trim = 0.1))的平均表達(dá)。因此,如果研究生物過程中公認(rèn)的信號通路未被預(yù)測到,可以嘗試使用較低trim值的截斷均值來更改計算每個細(xì)胞群體平均基因表達(dá)的方法。
計算通信概率并推斷細(xì)胞通信網(wǎng)絡(luò) 為了快速查看推斷結(jié)果,用戶可以在computeCommunProb中設(shè)置nboot = 20。此時,“pvalue < 0.05”意味著沒有一個置換結(jié)果大于觀察到的通信概率。
如果研究生物過程中公認(rèn)的信號通路未被預(yù)測到,用戶可以嘗試使用較低trim值的截斷均值來更改計算每個細(xì)胞群體平均基因表達(dá)的方法。
在處理來自其他空間轉(zhuǎn)錄組學(xué)技術(shù)的數(shù)據(jù)時可能需要調(diào)整scale.distance參數(shù)。請通過?computeCommunProb詳細(xì)查看文檔說明。
在推斷依賴接觸或相鄰信號傳遞時,應(yīng)提供contact.range的值,并設(shè)置contact.dependent = TRUE。簡而言之,可以設(shè)置contact.range = 10,這是典型的人類細(xì)胞大小。然而,對于低分辨率的空間數(shù)據(jù)(如10X Visium數(shù)據(jù)),應(yīng)將其設(shè)置為中心到中心的距離(即,對于10X Visium數(shù)據(jù),contact.range = 100)。
cellchat %<>% CellChat::computeCommunProb( type = "truncatedMean" , trim = 0.1 , distance.use = TRUE , interaction.range = 250 , scale.distance = 0.01 , contact.dependent = TRUE , contact.range = 100 )
如果某些細(xì)胞群體中只有少數(shù)細(xì)胞,可以過濾掉這些細(xì)胞間的通信。默認(rèn)情況下,細(xì)胞間通信所需的每個細(xì)胞群體中的最小細(xì)胞數(shù)為10。
cellchat %<>% CellChat::filterCommunication(min.cells = 10 )
推斷細(xì)胞間通信在信號通路水平上的情況 CellChat通過匯總與每個信號通路相關(guān)的所有配體-受體相互作用的通信概率,來計算信號通路水平上的通信概率。
注:對于每個配體-受體對和每個信號通路推斷出的細(xì)胞間通信網(wǎng)絡(luò)分別存儲在'net’和'netP’中。
cellchat %<>% CellChat::computeCommunProbPathway()
匯總細(xì)胞間通信網(wǎng)絡(luò) 可以通過計數(shù)鏈接數(shù)量或匯總通信概率來計算聚合的細(xì)胞間通信網(wǎng)絡(luò)。還可以通過設(shè)置sources.use和targets.use來計算特定細(xì)胞組子集之間的聚合網(wǎng)絡(luò)。
cellchat %<>% CellChat::aggregateNet()
可視化聚合的細(xì)胞間通信網(wǎng)絡(luò)。例如,使用環(huán)形圖或熱圖來展示任意兩組細(xì)胞之間交互的數(shù)量或總交互強(qiáng)度(權(quán)重)。
groupSize <- as.numeric(table(cellchat@idents)) par(mfrow = c(1 ,2 ), xpd=TRUE ) netVisual_circle(cellchat@net$count, vertex.weight = rowSums(cellchat@net$count), weight.scale = T , label.edge= F , title.name = "Number of interactions" ) netVisual_circle(cellchat@net$weight, vertex.weight = rowSums(cellchat@net$weight), weight.scale = T , label.edge= F , title.name = "Interaction weights/strength" )
netVisual_heatmap(cellchat, measure = "count" , color.heatmap = "Blues" ,font.size = 18 ,font.size.title = 28 )
netVisual_heatmap(cellchat, measure = "weight" , color.heatmap = "Blues" ,font.size = 18 ,font.size.title = 28 )
細(xì)胞間通信網(wǎng)絡(luò)的可視化 在推斷出細(xì)胞間通信網(wǎng)絡(luò)后,CellChat提供了多種用于進(jìn)一步數(shù)據(jù)探索、分析和可視化的功能。此處僅展示環(huán)形圖和新的空間圖。
在不同層次上可視化細(xì)胞間通信:可以使用netVisual_aggregate來可視化信號通路的推斷通信網(wǎng)絡(luò),并使用netVisual_individual來可視化與該信號通路關(guān)聯(lián)的單個配體-受體對的推斷通信網(wǎng)絡(luò)。
此處以一個信號通路作為輸入示例。通過cellchat@netP$pathways可訪問到所有顯示出顯著通信的信號通路。
par(mfrow=c(1 ,1 ), xpd = TRUE ) # `xpd = TRUE` should be added to show the title netVisual_aggregate(cellchat, signaling = c("IGF" ) , layout = "circle" )
可視化組織中的細(xì)胞通訊 par(mfrow=c(1 ,1 )) netVisual_aggregate(cellchat, signaling = c("IGF" ), layout = "spatial" , edge.width.max = 2 , vertex.size.max = 1 , alpha.image = 0.2 , vertex.label.cex = 3.5 )
計算并可視化網(wǎng)絡(luò)中心性得分 # Compute the network centrality scores cellchat <- netAnalysis_computeCentrality(cellchat, slot.name = "netP" ) # the slot 'netP' means the inferred intercellular communication network of signaling pathways # Visualize the computed centrality scores using heatmap, allowing ready identification of major signaling roles of cell groups par(mfrow=c(1 ,1 )) netAnalysis_signalingRole_network(cellchat, signaling = c("IGF" ), width = 8 , height = 2.5 , font.size = 10 )
可以在可視化信號網(wǎng)絡(luò)時在空間轉(zhuǎn)錄組學(xué)上顯示這些信息,例如,較大的圓圈表示更大的輸入信號
par(mfrow=c(1 ,1 )) netVisual_aggregate(cellchat, signaling = c("IGF" ), layout = "spatial" , edge.width.max = 2 , alpha.image = 0.2 , vertex.weight = "incoming" , vertex.size.max = 4 , vertex.label.cex = 3.5 )
可視化基因表達(dá)在組織上的分布 spatialFeaturePlot(cellchat, features = c("Igf1" ,"Igf1r" ), point.size = 0.8 , color.heatmap = "Reds" , direction = 1 )
受配體表達(dá)在組織上的分布 spatialFeaturePlot(cellchat, pairLR.use = "IGF1_IGF1R" , point.size = 0.5 , do.binary = FALSE , cutoff = 0.05 , enriched.only = F , color.heatmap = "Reds" , direction = 1 )
Reference https://htmlpreview./?https://github.com/jinworks/CellChat/blob/master/tutorial/CellChat_analysis_of_spatial_transcriptomics_data.html