細胞通訊-2單個數據集進行細胞間通訊分析

單個數據集分析,多個數據集比較分析,具有較大成分差異的數據集比較分析。本教程是單個數據集分析流程

此教程概述了使用 CellChat 的單個數據集對細胞通信網絡進行推斷、分析和可視化的步驟。我們通過將其應用于人類患者病變皮膚細胞 (LS) 的 scRNA-seq 數據來展示 CellChat 的多種功能。

CellChat 要求將細胞的基因表達數據作為輸入,并通過將基因表達與信號配體、受體與其同因子之間的相互作用的先驗知識相結合來對細胞-細胞通信的概率進行模擬。

在推斷細胞間通信網絡后,CellChat 為進一步的數據探索、分析和可視化提供了功能。

1、CellChat對象的數據輸入、處理及初始化

創建CellChat對象需要兩個文件:1.細胞的基因表達數據,可以直接是Seurat 或者 SingleCellExperiment 對象;2.用戶分配的細胞標簽(即基于標簽的模式)或單細胞數據的低維表示(即無標簽模式)。對于后者,CellChat 通過根據低維空間或偽時間軌跡空間中的細胞距離構建共享的鄰近圖自動對細胞進行分組。

用戶可以從數據矩陣、Seurat 或SingleCellExperiment對象創建新的 CellChat 對象。如果輸入是 Seurat 或SingleCellExperiment對象,則默認情況下將使用對象中的meta data,用戶必須提供該數據來定義細胞分組。例如,group.by=Seurat 對象中默認的細胞標識。

1.1使用Seurat對象創建CellChat對象
#加載包
library(CellChat)
library(ggplot2)
library(ggalluvial)
library(svglite)
library(Seurat)
library(SeuratData)
options(stringsAsFactors = FALSE)
#加載之前跑完Seurat標準流程的數據
load(file = 'sce-monocyte.Rdata')

cellchat<-createCellChat(sce)

str(cellchat)

 [1] "Formal class 'CellChat' [package \"CellChat\"] with 14 slots"                                                        
 [2] "  ..@ data.raw      : num[0 , 0 ] "                                                                                  
 [3] "  ..@ data          :Formal class 'dgCMatrix' [package \"Matrix\"] with 6 slots"                                     
 [4] "  .. .. ..@ i       : int [1:615321] 11 26 33 43 52 57 73 98 130 142 ..."                                            
 [5] "  .. .. ..@ p       : int [1:643] 0 960 1510 2568 3990 4867 6408 7776 8793 9810 ..."                                 
 [6] "  .. .. ..@ Dim     : int [1:2] 13714 642"                                                                           
 [7] "  .. .. ..@ Dimnames:List of 2"                                                                                      
 [8] "  .. .. .. ..$ : chr [1:13714] \"AL627309.1\" \"AP006222.2\" \"RP11-206L10.2\" \"RP11-206L10.9\" ..."                
 [9] "  .. .. .. ..$ : chr [1:642] \"AAACCGTGCTTCCG-1\" \"AAACGCTGTTTCTG-1\" \"AAAGAGACGCGAGA-1\" \"AAAGCAGATATCGG-1\" ..."
[10] "  .. .. ..@ x       : num [1:615321] 3.56 1.57 2.52 1.57 1.57 ..."                                                   
[11] "  .. .. ..@ factors : list()"                                                                                        
[12] "  ..@ data.signaling: num[0 , 0 ] "                                                                                  
[13] "  ..@ data.scale    : num[0 , 0 ] "                                                                                  
[14] "  ..@ data.project  : num[0 , 0 ] "                                                                                  
[15] "  ..@ net           : list()"                                                                                        
[16] "  ..@ netP          : list()"                                                                                        
[17] "  ..@ meta          :'data.frame':\t642 obs. of  7 variables:"                                                       
[18] "  .. ..$ orig.ident     : Factor w/ 1 level \"pbmc3k\": 1 1 1 1 1 1 1 1 1 1 ..."                                     
[19] "  .. ..$ nCount_RNA     : num [1:642] 2639 1103 3033 4584 2683 ..."                                                  
[20] "  .. ..$ nFeature_RNA   : int [1:642] 960 550 1058 1422 877 1541 1368 1017 1017 822 ..."                             
[21] "  .. ..$ percent.mt     : num [1:642] 1.74 2.9 1.42 1.4 2.5 ..."                                                     
[22] "  .. ..$ RNA_snn_res.0.5: Factor w/ 9 levels \"0\",\"1\",\"2\",\"3\",..: 2 6 2 2 2 6 6 2 2 2 ..."                    
[23] "  .. ..$ seurat_clusters: Factor w/ 9 levels \"0\",\"1\",\"2\",\"3\",..: 2 6 2 2 2 6 6 2 2 2 ..."                    
[24] "  .. ..$ ident          : Factor w/ 2 levels \"CD14+ Mono\",\"FCGR3A+ Mono\": 1 2 1 1 1 2 2 1 1 1 ..."               
[25] "  ..@ idents        : Factor w/ 2 levels \"CD14+ Mono\",\"FCGR3A+ Mono\": 1 2 1 1 1 2 2 1 1 1 ..."                   
[26] "  ..@ DB            : list()"                                                                                        
[27] "  ..@ LR            : list()"                                                                                        
[28] "  ..@ var.features  : list()"                                                                                        
[29] "  ..@ dr            : list()"                                                                                        
[30] "  ..@ options       :List of 1"                                                                                      
[31] "  .. ..$ mode: chr \"single\""                                               
1.2使用表達矩陣創建CellChat對象

對于基因表達數據矩陣,要求基因為行名,細胞為列名。需要將標準化數據作為 CellChat 分析的輸入。如果用戶提供count數據,我們提供一個函數normalizeData來計算文庫大小,然后進行log轉換。對于分組信息,需要使用帶有行名的數據作為CellChat 的輸入。

# 加載scRNA-seq 數據矩陣及其meta數據
load(url("https://ndownloader.figshare.com/files/25950872")) # 該數據集包含兩組: 正常組和疾病組
data.input = data_humanSkin$data # 標準化過的矩陣
meta = data_humanSkin$meta 
cell.use = rownames(meta)[meta$condition == "LS"] # 從疾病組中提取細胞名

# 整理數據:將疾病組單細胞數據提取出來
data.input = data.input[, cell.use]
meta = meta[cell.use, ]
# meta = data.frame(labels = meta$labels[cell.use], row.names = colnames(data.input)) # 手動創建包含細胞labels的數據框
unique(meta$labels) # check the cell labels

cellchat <- createCellChat(object = data.input, meta = meta, group.by = "labels")
#從表達矩陣創建CellChat對象
#添加亞群信息
cellchat <- addMeta(cellchat, meta = meta)
cellchat <- setIdent(cellchat, ident.use = "labels") 
levels(cellchat@idents) 
groupSize <- as.numeric(table(cellchat@idents)) # 每個亞群細胞數
1.3設置配體受體交互數據庫

我們的數據庫 CellChatDB 是一個手動整理的文獻支持的配體受體在人和小鼠中的交互數據庫。小鼠中的CellChatDB包含2,021個經驗證的分子相互作用,包括60%的自分泌/旁分泌信號相互作用、21%的細胞外基質(ECM)受體相互作用和19%的細胞-細胞接觸相互作用。人的CellChatDB包含1,939個經驗證的分子相互作用,包括61.8%的自分泌/旁分泌信號相互作用、21.7%的細胞外基質(ECM)受體相互作用和16.5%的細胞-細胞接觸相互作用。

用戶可以通過添加自己精心整理的配體受體對來更新 CellChatDB。

CellChatDB <- CellChatDB.human 
# 如果是小鼠數據,使用CellChatDB.mouse
showDatabaseCategory(CellChatDB)
#查看下數據庫結構
dplyr::glimpse(CellChatDB$interaction) # 展示互作記錄

Rows: 1,939
Columns: 11
$ interaction_name   <chr> "TGFB1_TGFBR1_TGFBR2", "TG…
$ pathway_name       <chr> "TGFb", "TGFb", "TGFb", "T…
$ ligand             <chr> "TGFB1", "TGFB2", "TGFB3",…
$ receptor           <chr> "TGFbR1_R2", "TGFbR1_R2", …
$ agonist            <chr> "TGFb agonist", "TGFb agon…
$ antagonist         <chr> "TGFb antagonist", "TGFb a…
$ co_A_receptor      <chr> "", "", "", "", "", "", ""…
$ co_I_receptor      <chr> "TGFb inhibition receptor"…
$ evidence           <chr> "KEGG: hsa04350", "KEGG: h…
$ annotation         <chr> "Secreted Signaling", "Sec…
$ interaction_name_2 <chr> "TGFB1 - (TGFBR1+TGFBR2)",…


# 使用數據庫中的自分泌/旁分泌信號相互作用部分進行后續分析,可根據試驗方案、目的選擇
 # 這一步是把分泌的通路取出來,類似取子集 pbmc < - subset(pbmc, ident ='T cell')
CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling") 
# 使用數據庫所有內容進行分析
# CellChatDB.use <- CellChatDB 

# 在cellchat對象中設置使用的數據庫
cellchat@DB <- CellChatDB.use # 將數據庫內容載入cellchat對象中
1.4 表達數據的預處理

為了推斷細胞的通訊狀態,首先識別一個細胞組中過度表達的配體或受體,然后識別過度表達的配體受體相互作用。

還可以將基因表達數據投影到蛋白質-蛋白質相互作用 (PPI) 網絡上。投影過程根據實驗驗證的蛋白質-蛋白質網絡中定義的基因表達值來平滑基因的表達值。此功能在分析具有淺測序深度的單細胞數據時很有用,因為投影可減少信號基因的dropput效應,特別是對于配體/受體的可能的零表達。用戶可以通過在computeCommunProb()中設置raw.use = TRUE跳過此步驟。

#這一步是取出表達數據,如果你有感興趣的基因可以填在features里,沒有的話,就寫NULL
cellchat <- subsetData(cellchat, features = NULL) 
# subset the expression data of signaling genes for saving computation cost

#設置并行運算
future::plan("multicore", workers = 40) 

#識別細胞組中過度表達的配體或受體
cellchat <- identifyOverExpressedGenes(cellchat)

#識別過度表達的配體受體相互作用,也就是通路
cellchat <- identifyOverExpressedInteractions(cellchat)

#將基因表達數據投射到PPI網絡上
cellchat <- projectData(cellchat, PPI.human)

2、細胞通信網絡推斷

CellChat 通過分配具有概率值的每個相互作用并進行排列檢驗,來推斷具有生物學意義的細胞-細胞通信。CellChat通過將基因表達與先前已知的信號配體、受體及其同因子之間的相互作用知識相結合,利用大量作用規律,對細胞-細胞通信的概率進行模擬。

推斷的配體受體對的數量顯然取決于計算每個細胞組平均基因表達的方法。默認情況下,CellChat 使用一種統計學上強大的均值方法,稱為"trimean",與其他方法相比,它產生的相互作用更少。然而,我們發現 CellChat 在預測更強的交互方面表現良好,這非常有助于縮小交互范圍,以便進一步進行實驗驗證。在computeCommunProb中,我們提供了一個選項,用于使用其他方法,如5%和10%截斷均值,來計算平均基因表達。值得注意的是,"trimean"大約是25%的截斷平均值,這意味著如果一組表達細胞的百分比低于25%,則平均基因表達為零。要使用 10% 截斷的平均值,用戶可以設置type = "truncatedMean"和對trim = 0.1。

在分析未分類的單細胞轉錄組時,假設豐富的細胞群傾向于發送比稀有細胞群更強的信號,CellChat 還可以在概率計算中考慮每個細胞組中細胞比例的影響。用戶可以設置population.size = TRUE

2.1 計算通信概率并推斷cellchat網絡
#默認的cutoff的值為20%,即表達比例在25%以下的基因會被認為是0,trim=0.1 可以調整比例閾值
cellchat <- computeCommunProb(cellchat, raw.use = TRUE)

# 如果在某些細胞群中只有少數細胞,則過濾掉細胞間的通信
cellchat <- filterCommunication(cellchat, min.cells = 10)
2.2 提取推斷的cellchat網絡作為數據框架

我們提供一個函數subsetCommunication,以輕松訪問推斷感興趣的細胞-細胞通信。例如

df.net <- subsetCommunication(cellchat)返回一個數據框架,該數據框架由配體/受體級別的所有推斷細胞通信組成。設置slot.name = "netP"可以在信號通路級別訪問推斷的通信

df.net <- subsetCommunication(cellchat, sources.use = c(1,2), targets.use = c(4,5))將推斷的細胞-細胞通信從細胞組1和2發送到細胞組4和5。

df.net <- subsetCommunication(cellchat, signaling = c("WNT", "TGFb"))通過向WNT和TGFb發出信號來調節推斷的細胞通信。

df.net <- subsetCommunication(cellchat) # 將細胞通訊預測結果以數據框的形式取出來
class(df.net) # 看一下是什么格式, 是數據框
# 既然是數據框格式,那就可以用View 查看;也可以用DT函數查看
View(df.net)
DT:: datatable(df.net)

# 把預測的結果寫出來
write.csv(df.net, '01.df.net.csv')

2.3 在信號通路級別推斷細胞-細胞通信

CellChat 通過總結與每個信號通路相關的所有配體-受體相互作用的通信概率,來計算信號通路級別上的通信概率。
NB:每個配體受體對和每個信號通路的推斷細胞間通信網絡分別存儲在插槽"net"和"netP"中。

cellchat <- computeCommunProbPathway(cellchat)
2.4 計算整合的細胞通信網絡

我們可以通過計算鏈接數或匯總通信概率來計算整合的細胞通信網絡。用戶還可以通過設置sources.use和targets.use`

每對配體受體的預測結果存在net中,每條通路的預測結果保存在netp中

#每對配體受體的預測結果存在net中,每條通路的預測結果保存在netp中
cellchat <- aggregateNet(cellchat)

可視化整合的細胞通信網絡。 使用圓圖顯示任意兩個細胞組之間的相互作用次數或總交互強度(比重)。

--------可視化----------

groupSize <- as.numeric(table(cellchat@idents))
par(mfrow = c(1,2), xpd=TRUE)  #c(1,2)的意思是,畫一個 一行三列的圖片

netVisual_circle(cellchat@net$count, vertex.weight = groupSize, weight.scale = T, label.edge= F, title.name = "Number of interactions") # 展示互作數量

netVisual_circle(cellchat@net$weight, vertex.weight = groupSize, weight.scale = T, label.edge= F, title.name = "Interaction weights/strength")  #展示互作權重

netVisual_circle(cellchat@net$weight, vertex.weight = groupSize, weight.scale = T, label.edge= F, title.name = "Interaction weights/strength",targets.ues = 'CD2')  #只展示與CD2相關的互作,箭頭指向DC2

互作數量與重要性圖
由于細胞通信網絡較為復雜,我們可以檢查每個細胞組發送的信號。在這里,我們還控制參數edge.weight.max,以便我們可以比較不同網絡之間的邊緣權重。

#互作數量與重要性圖
mat <- cellchat@net$weight  # 畫一個 三行四列 的圖
par(mfrow = c(3,4), xpd=TRUE)
for (i in 1:nrow(mat)) {
  mat2 <- matrix(0, nrow = nrow(mat), ncol = ncol(mat), dimnames = dimnames(mat))
  mat2[i, ] <- mat[i, ]
  netVisual_circle(mat2, vertex.weight = groupSize, weight.scale = T, edge.weight.max = max(mat), title.name = rownames(mat)[i])
}  # 循環函數畫出每種細胞與其他細胞之間互作的關系

3. 細胞通信網絡的可視化

在推斷細胞通信網絡后,CellChat 為進一步的數據探索、分析和可視化提供了各種功能。
CellChat提供了幾種可視化細胞通信網絡的方法,包括分層圖、圓圖、和弦圖和氣泡圖。還提供了一個易于使用的工具,用于提取和可視化推斷網絡的高階信息。例如,它允許對細胞群的主要信號輸入和輸出以及這些群和信號如何協調功能進行現成預測。CellChat可以通過結合通訊網絡分析、模式識別和多重學習方法,使用綜合方法對推斷出的細胞-細胞通信網絡進行定量表征和比較。

3.1 使用層次結構圖、圓圖或和弦圖可視化每個信號通路

層次結構圖: 用戶應定義vertex.receiver,這是一個數字矢量,將細胞群的索引作為層次圖左側的目標。此分層圖由兩個部分組成:左部分顯示自分泌和旁分泌向某些感興趣的細胞組(即定義的)發出信號,右部分顯示自分泌和旁分泌向數據集中剩余的細胞組發出信號。因此,層級圖提供了一種信息性和直觀的方式來可視化自分泌和旁分泌信號之間的細胞群之間的感興趣通信。例如,在研究成纖維細胞和免疫細胞之間的細胞-細胞通信時,用戶可以定義為所有成纖維細胞組。

和弦圖: CellChat 提供兩種功能netVisual_chord_cell和netVisual_chord_gene,并可視化具有不同目的和不同級別的細胞通信。netVisual_chord_cell用于可視化不同細胞群之間的細胞-細胞通信(和弦圖中的每個部分是細胞組),netVisual_chord_gene用于可視化由多個配體受體或信號通路調節的細胞-細胞通信(和弦圖中的每個部分都是配體、受體或信號通路)。

邊緣顏色/權重、節點顏色/大小/形狀的解釋: 在所有可視化圖中,邊緣顏色與發送者源一致,邊緣權重與交互強度成正比。較厚的邊緣線表示信號更強。在層次結構圖和圓圖中,圓的大小與每個細胞組中的細胞數量成正比。在層次圖中,實心和開放的圓分別代表源和目標。在和弦圖中,內條顏色表示從相應的外條接收信號的目標。內條大小與目標接收的信號強度成正比。這種內條有助于解釋復雜的和弦圖。請注意,有一些內條沒有與任何一些細胞組鏈接,請忽略它,因為這是一個本包尚未解決的問題。

不同層次的細胞通信可視化: 可以使用netVisual_aggregate可視化信號通路的推斷通信網絡,并使用netVisual_individual可視化與該信號通路相關的單個L-R對的推斷通信網絡。

以輸入一個信號通路為例。所有顯示重要通信的信號通路均可通過cellchat@netP$pathways獲取。

這里的代碼和視頻里面的不太一樣?。?!

#進階可視化
pathways.show <- c("CXCL") 

netVisual_aggregate(cellchat, signaling = pathways.show)
# 和弦圖
par(mfrow=c(1,1))
netVisual_chord_cell(cellchat, signaling = pathways.show, title.name = paste0(pathways.show, " signaling network"))
# 熱圖
par(mfrow=c(1,1))
netVisual_heatmap(cellchat, signaling = pathways.show, color.heatmap = "Reds")
3.2 計算每個配體受體對整體信號通路的貢獻,并可視化由單個配體受體對調節的細胞通信
netAnalysis_contribution(cellchat, signaling = pathways.show)

還可以可視化由單個配體受體對調節的細胞-細胞通信。函數extractEnrichedLR來提取給定信號通路的所有重要相互作用(L-R對)和相關信號基因。

pairLR.CXCL <- extractEnrichedLR(cellchat, signaling = pathways.show, geneLR.return = FALSE)
LR.show <- pairLR.CXCL[1,] # show one ligand-receptor pair

netVisual_individual(cellchat, signaling = pathways.show,  pairLR.use = LR.show)
#同樣可以用熱圖(netVisual_heatmap)和和弦圖(netVisual_chord_cell)展示
3.3 自動保存所有推斷網絡的模塊以進行快速探索

可以使用‘for … loop’自動保存所有推斷網絡快速探索使用。netVisual,netVisual支持svg、png和pdf格式的輸出。

# 所有顯著的信號通路
pathways.show.all <- cellchat@netP$pathways
# 檢查細胞排序,選擇合適的受配體
levels(cellchat@idents)
vertex.receiver = seq(1,4)
for (i in 1:length(pathways.show.all)) {
  # Visualize communication network associated with both signaling pathway and individual L-R pairs
  netVisual(cellchat, signaling = pathways.show.all[i], vertex.receiver = vertex.receiver, layout = "hierarchy")
  # Compute and visualize the contribution of each ligand-receptor pair to the overall signaling pathway
  gg <- netAnalysis_contribution(cellchat, signaling = pathways.show.all[i])
  ggsave(filename=paste0(pathways.show.all[i], "_L-R_contribution.pdf"), plot=gg, width = 3, height = 2, units = 'in', dpi = 300)
}
3.4 可視化由多個配體受體或信號通路調節的細胞通信

氣泡圖
可以使用netVisual_bubble顯示從某些細胞組到其他細胞組的所有重要相互作用(L-R對)。

# 顯示從某些細胞組到其他細胞組的所有顯著的相互作用(L-R 對)
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), remove.isolate = FALSE)
#去掉sources.use = 4, targets.use = c(5:11)展示的是所有組的相互通訊
# 顯示從某細胞組到其他細胞組的某個通路的相互作用(L-R 對)
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), signaling = c("CCL","CXCL"), remove.isolate = FALSE)

和弦圖
顯示從某些細胞組到其他細胞組的所有相互作用(L-R對或信號通路)。兩個特殊情況:一個顯示從一個細胞組發送的所有交互,另一個顯示一個細胞組接收的所有交互;顯示用戶輸入的交互或用戶定義的某些信號通路

#顯示從某些細胞組到其他細胞組的所有顯著的相互作用(L-R 對)
netVisual_chord_gene(cellchat, sources.use = 4, targets.use = c(5:11), lab.cex = 0.5,legend.pos.y = 30)
#同氣泡圖一樣,和弦圖也可以通過調整sources.use 、targets.use及signaling展示不同的通路,如果基因名稱重疊,可以通過降低small.gap值來調整參數。
3.5 使用小提琴/點圖繪制信號基因表達分布

可以利用Seurat 包裝的函數plotGeneExpression繪制與L-R對或信號通路相關的信號基因的基因表達分布圖。

plotGeneExpression(cellchat, signaling = "CXCL")

默認情況下,可以通過plotGeneExpression只顯示與推斷的重要通信相關的信號基因的表達,或者,用戶可以使用extractEnrichedLR提取與推斷的L-R對或信號通路相關的信號基因,然后使用Seurat包繪制基因表達圖。

plotGeneExpression(cellchat, signaling = "CXCL", enriched.only = FALSE)

4. 細胞通信網絡系統分析

為了便于對復雜的細胞間通信網絡進行解釋,CellChat 通過從圖形理論、模式識別和多重學習中抽象的方法對網絡進行量化。

  • 它可以使用網絡分析的集中度措施確定給定信號網絡中的主要信號源和目標以及調節者和影響者
  • 它可以通過利用模式識別方法預測特定細胞類型的關鍵傳入和傳出信號,以及不同細胞類型之間的協調響應。
  • 它可以通過定義相似度測量方法和從功能和拓撲角度進行多重學習來分組信號通路。
  • 它可以通過對多個網絡的聯合多重學習來描繪保存上下文特定的信號通路。
4.1 識別細胞組的信號角色(例如,占主導地位的發送器、接收器)以及主要貢獻信號

<meta charset="utf-8">

CellChat 允許通過計算每個細胞組的多個網絡中心測量,隨時識別細胞間通信網絡中占主導地位的發送者、接收者、調解者和影響者。具體來說,我們在加權導向網絡中采用了措施,包括度外、度內、介于兩者之間流動和信息集中度,分別識別細胞間通信的主要發送者、接收者、調解者和影響者。在以權重為計算通信概率的加權定向網絡中,將外向度計算為來自細胞組的傳出信號的通信概率之和,并計算為傳入信號對單元組通信概率的總和的度內,可用于分別識別信號網絡的主要單元件發送器和接收器。有關信息中心之間流動的定義,請查看參考文獻1參考文獻2

計算和可視化網絡中心分數

cellchat <- netAnalysis_computeCentrality(cellchat, slot.name = "netP") # “netP”:推斷出的信號通路的細胞間通信網絡
#使用熱圖可視化計算的中心性得分,以便及早識別細胞群的主要信號作用
netAnalysis_signalingRole_network(cellchat, signaling = pathways.show, width = 8, height = 2.5, font.size = 10)

在 2D 空間中可視化占主導地位的發送器(源)和接收器(目標)

使用散點圖在 2D 空間中可視化占主導地位的發射器(源)和接收器(目標)。

x軸和y軸分別為與每個單元組相關的總傳出或傳入通信概率。點的大小與每個單元組關聯的推斷鏈接(包括傳出鏈接和傳入鏈接)的數量成正比。點的顏色表示不同的細胞群。如果定義了“組”,點形狀表示單元格組的不同類別。

# 聚合細胞-細胞通信網絡中所有信號通路的信號作用分析
gg1 <- netAnalysis_signalingRole_scatter(cellchat)

# 感興趣的細胞-細胞通信網絡的信號作用分析
gg2 <- netAnalysis_signalingRole_scatter(cellchat, signaling = c("CXCL", "CCL"))

gg1 + gg2

識別對某些細胞組的傳出或傳入信號貢獻最大的信號

#識別所有信號對某些細胞組的傳出或傳入的貢獻
ht1 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "outgoing")
ht2 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "incoming")
ht1 + ht2

識別所有信號對某些細胞組的傳出或傳入的貢獻

# #識別所有信號對某些細胞組的傳出或傳入的貢獻
ht <- netAnalysis_signalingRole_heatmap(cellchat, signaling = c("CXCL", "CCL"))
4.2 確定全局通信模式,探索多個細胞類型和信號通路如何協調在一起

除了探索單個通路的詳細通信外,一個重要問題是多個細胞組和信號通路如何協調功能。CellChat 采用模式識別方法識別全局通信模式。

隨著模式數量的增加,可能會有多余的模式,因此很難解釋通信模式。我們選擇了五種模式作為默認模式。一般來說,它具有生物學意義,模式數量要大于2。此外,我們還提供了一個函數selectK來推斷模式的數量,該數基于 NMF R 包中已實施的兩個指標Cophenetic和Silhouette。這兩個指標都根據共識矩陣的分層聚類來衡量特定數量模式的穩定性。對于一系列模式,適當的模式數量是Cophenetic 和 Silhouette值開始突然下降的模式。

識別和可視化分泌細胞的傳出通信模式

傳出模式揭示了發送者細胞(即作為信號源的細胞)如何相互協調,以及它們如何與某些信號通路協調以驅動通信。

為了直觀地顯示潛在模式與細胞群和配體受體對或信號通路的關聯,我們使用了河流(沖積)圖。我們首先將每行 W 和 H 的每列標準化為 [0,1],然后在 W 和 H 中設置為零,如果它們小于 0.5。這種閾值允許發現與每個推斷模式相關的最豐富的細胞組和信號通路,即每個細胞組或信號通路僅與一個推斷模式相關聯。這些閾值矩陣 W 和 H 用作創建沖積圖的輸入。

為了將細胞群與其豐富的信號通路直接聯系起來,如果 W 和 H 中的元素少于 1/R(R 是潛在模式數),則我們將它們中的元素設置為零。通過使用不太嚴格的閾值,可以獲得與每個細胞組相關的更豐富的信號通路。我們使用每個細胞組對通過乘以 W 乘以 H 計算的每個信號通路的貢獻分數,構建了一個點圖,其中點大小與貢獻分數成正比,以顯示細胞組與其豐富信號通路之間的關聯。用戶還可以降低參數cutoff,以顯示每個細胞組關聯的更豐富的信號通路。

#加載需要的包
library(NMF)
library(ggalluvial)

運行selectK推斷模式的數量

#我們根據在NMF R包中實現的兩個指標推斷出模式的數量,這兩個指標包括Cophenetic和Silhouette。這兩個度量標準都是基于共識矩陣的層次聚類來衡量特定數量的模式的穩定性。對于一個模式數量范圍,一個合適的模式數量是Cophenetic和Silhouette值開始突然下降的那個。
selectK(cellchat, pattern = "outgoing")

當傳出模式數為 3 時,Cophenetic 和Silhouette值都開始突然下降。

nPatterns = 3
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "outgoing", k = nPatterns)

河流圖

netAnalysis_river(cellchat, pattern = "outgoing")

點圖

netAnalysis_dot(cellchat, pattern = "outgoing")

識別和可視化目標細胞的傳入通信模式
傳入模式顯示目標細胞(即信號接收器中的細胞)如何相互協調,以及它們如何與某些信號通路協調以響應傳入的信號。

selectK(cellchat, pattern = "incoming")

當傳入模式的數量為 4 時,Cophenetic 值開始下降。

nPatterns = 4
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "incoming", k = nPatterns)

河流圖

netAnalysis_river(cellchat, pattern = "incoming")

點圖

netAnalysis_dot(cellchat, pattern = "incoming")
4.3 信號網絡的多重和分類學習分析

CellChat 能夠量化所有重要信號通路之間的相似性,然后根據其CellChat 網絡的相似性對其進行分組。分組可以基于功能或結構相似性進行。

功能相似性:功能相似度高表示主要發送器和接收器相似,可解釋為兩個信號通路或兩個配體受體對具有相似的作用。功能相似性分析要求兩個數據集之間的細胞群組成相同。

結構相似性:結構相似性用于比較其信號網絡結構,而不考慮發送器和接收器的相似性。

根據信號組的功能相似性識別信號組

cellchat <- computeNetSimilarity(cellchat, type = "functional")
cellchat <- netEmbedding(cellchat, type = "functional")
#Error in runUMAP(Similarity, min_dist = min_dist, n_neighbors = n_neighbors,  : 
  Cannot find UMAP, please install through pip (e.g. pip install umap-learn or reticulate::py_install(packages = 'umap-learn')).

#解決方案:
library(reticulate)
py_available()
reticulate::py_install(packages = 'umap-learn')
#之后再運行,如若還是報錯,重啟R
cellchat <- netEmbedding(cellchat, type = "functional")

cellchat <- netClustering(cellchat, type = "functional")

netVisual_embedding(cellchat, type = "functional", label.size = 3.5)

# netVisual_embeddingZoomIn(cellchat, type = "functional", nCol = 2)

基于結構相似性識別信號組

cellchat <- computeNetSimilarity(cellchat, type = "structural")
cellchat <- netEmbedding(cellchat, type = "structural")

cellchat <- netClustering(cellchat, type = "structural")

netVisual_embedding(cellchat, type = "structural", label.size = 3.5)
netVisual_embeddingZoomIn(cellchat, type = "structural", nCol = 2)

5. 保存CellChat對象

以便后續使用

saveRDS(cellchat, file = "cellchat_humanSkin_LS.rds")

參考:單細胞轉錄組之使用CellChat對單個數據集進行細胞間通訊分析

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容