單個數(shù)據(jù)集分析包颁,多個數(shù)據(jù)集比較分析拌牲,具有較大成分差異的數(shù)據(jù)集比較分析。本教程是單個數(shù)據(jù)集分析流程
此教程概述了使用 CellChat 的單個數(shù)據(jù)集對細(xì)胞通信網(wǎng)絡(luò)進(jìn)行推斷拂铡、分析和可視化的步驟陨溅。我們通過將其應(yīng)用于人類患者病變皮膚細(xì)胞 (LS) 的 scRNA-seq 數(shù)據(jù)來展示 CellChat 的多種功能终惑。
CellChat 要求將細(xì)胞的基因表達(dá)數(shù)據(jù)作為輸入,并通過將基因表達(dá)與信號配體声登、受體與其同因子之間的相互作用的先驗知識相結(jié)合來對細(xì)胞-細(xì)胞通信的概率進(jìn)行模擬狠鸳。
在推斷細(xì)胞間通信網(wǎng)絡(luò)后,CellChat 為進(jìn)一步的數(shù)據(jù)探索悯嗓、分析和可視化提供了功能。
1卸察、CellChat對象的數(shù)據(jù)輸入脯厨、處理及初始化
創(chuàng)建CellChat對象需要兩個文件:1.細(xì)胞的基因表達(dá)數(shù)據(jù),可以直接是Seurat 或者 SingleCellExperiment 對象坑质;2.用戶分配的細(xì)胞標(biāo)簽(即基于標(biāo)簽的模式)或單細(xì)胞數(shù)據(jù)的低維表示(即無標(biāo)簽?zāi)J剑┖衔洹τ诤笳撸珻ellChat 通過根據(jù)低維空間或偽時間軌跡空間中的細(xì)胞距離構(gòu)建共享的鄰近圖自動對細(xì)胞進(jìn)行分組涡扼。
用戶可以從數(shù)據(jù)矩陣稼跳、Seurat 或SingleCellExperiment對象創(chuàng)建新的 CellChat 對象。如果輸入是 Seurat 或SingleCellExperiment對象吃沪,則默認(rèn)情況下將使用對象中的meta data汤善,用戶必須提供該數(shù)據(jù)來定義細(xì)胞分組。例如票彪,group.by=Seurat 對象中默認(rèn)的細(xì)胞標(biāo)識红淡。
1.1使用Seurat對象創(chuàng)建CellChat對象
#加載包
library(CellChat)
library(ggplot2)
library(ggalluvial)
library(svglite)
library(Seurat)
library(SeuratData)
options(stringsAsFactors = FALSE)
#加載之前跑完Seurat標(biāo)準(zhǔn)流程的數(shù)據(jù)
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使用表達(dá)矩陣創(chuàng)建CellChat對象
對于基因表達(dá)數(shù)據(jù)矩陣,要求基因為行名降铸,細(xì)胞為列名在旱。需要將標(biāo)準(zhǔn)化數(shù)據(jù)作為 CellChat 分析的輸入。如果用戶提供count數(shù)據(jù)推掸,我們提供一個函數(shù)normalizeData來計算文庫大小桶蝎,然后進(jìn)行l(wèi)og轉(zhuǎn)換驻仅。對于分組信息,需要使用帶有行名的數(shù)據(jù)作為CellChat 的輸入登渣。
# 加載scRNA-seq 數(shù)據(jù)矩陣及其meta數(shù)據(jù)
load(url("https://ndownloader.figshare.com/files/25950872")) # 該數(shù)據(jù)集包含兩組: 正常組和疾病組
data.input = data_humanSkin$data # 標(biāo)準(zhǔn)化過的矩陣
meta = data_humanSkin$meta
cell.use = rownames(meta)[meta$condition == "LS"] # 從疾病組中提取細(xì)胞名
# 整理數(shù)據(jù):將疾病組單細(xì)胞數(shù)據(jù)提取出來
data.input = data.input[, cell.use]
meta = meta[cell.use, ]
# meta = data.frame(labels = meta$labels[cell.use], row.names = colnames(data.input)) # 手動創(chuàng)建包含細(xì)胞labels的數(shù)據(jù)框
unique(meta$labels) # check the cell labels
cellchat <- createCellChat(object = data.input, meta = meta, group.by = "labels")
#從表達(dá)矩陣創(chuàng)建CellChat對象
#添加亞群信息
cellchat <- addMeta(cellchat, meta = meta)
cellchat <- setIdent(cellchat, ident.use = "labels")
levels(cellchat@idents)
groupSize <- as.numeric(table(cellchat@idents)) # 每個亞群細(xì)胞數(shù)
1.3設(shè)置配體受體交互數(shù)據(jù)庫
我們的數(shù)據(jù)庫 CellChatDB 是一個手動整理的文獻(xiàn)支持的配體受體在人和小鼠中的交互數(shù)據(jù)庫雾家。小鼠中的CellChatDB包含2,021個經(jīng)驗證的分子相互作用绍豁,包括60%的自分泌/旁分泌信號相互作用芯咧、21%的細(xì)胞外基質(zhì)(ECM)受體相互作用和19%的細(xì)胞-細(xì)胞接觸相互作用。人的CellChatDB包含1竹揍,939個經(jīng)驗證的分子相互作用敬飒,包括61.8%的自分泌/旁分泌信號相互作用、21.7%的細(xì)胞外基質(zhì)(ECM)受體相互作用和16.5%的細(xì)胞-細(xì)胞接觸相互作用芬位。
用戶可以通過添加自己精心整理的配體受體對來更新 CellChatDB无拗。
CellChatDB <- CellChatDB.human
# 如果是小鼠數(shù)據(jù),使用CellChatDB.mouse
showDatabaseCategory(CellChatDB)
#查看下數(shù)據(jù)庫結(jié)構(gòu)
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)",…
# 使用數(shù)據(jù)庫中的自分泌/旁分泌信號相互作用部分進(jìn)行后續(xù)分析昧碉,可根據(jù)試驗方案英染、目的選擇
# 這一步是把分泌的通路取出來,類似取子集 pbmc < - subset(pbmc, ident ='T cell')
CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling")
# 使用數(shù)據(jù)庫所有內(nèi)容進(jìn)行分析
# CellChatDB.use <- CellChatDB
# 在cellchat對象中設(shè)置使用的數(shù)據(jù)庫
cellchat@DB <- CellChatDB.use # 將數(shù)據(jù)庫內(nèi)容載入cellchat對象中
1.4 表達(dá)數(shù)據(jù)的預(yù)處理
為了推斷細(xì)胞的通訊狀態(tài)被饿,首先識別一個細(xì)胞組中過度表達(dá)的配體或受體四康,然后識別過度表達(dá)的配體受體相互作用。
還可以將基因表達(dá)數(shù)據(jù)投影到蛋白質(zhì)-蛋白質(zhì)相互作用 (PPI) 網(wǎng)絡(luò)上狭握。投影過程根據(jù)實驗驗證的蛋白質(zhì)-蛋白質(zhì)網(wǎng)絡(luò)中定義的基因表達(dá)值來平滑基因的表達(dá)值闪金。此功能在分析具有淺測序深度的單細(xì)胞數(shù)據(jù)時很有用,因為投影可減少信號基因的dropput效應(yīng)论颅,特別是對于配體/受體的可能的零表達(dá)哎垦。用戶可以通過在computeCommunProb()中設(shè)置raw.use = TRUE跳過此步驟。
#這一步是取出表達(dá)數(shù)據(jù)恃疯,如果你有感興趣的基因可以填在features里漏设,沒有的話,就寫NULL
cellchat <- subsetData(cellchat, features = NULL)
# subset the expression data of signaling genes for saving computation cost
#設(shè)置并行運(yùn)算
future::plan("multicore", workers = 40)
#識別細(xì)胞組中過度表達(dá)的配體或受體
cellchat <- identifyOverExpressedGenes(cellchat)
#識別過度表達(dá)的配體受體相互作用今妄,也就是通路
cellchat <- identifyOverExpressedInteractions(cellchat)
#將基因表達(dá)數(shù)據(jù)投射到PPI網(wǎng)絡(luò)上
cellchat <- projectData(cellchat, PPI.human)
2郑口、細(xì)胞通信網(wǎng)絡(luò)推斷
CellChat 通過分配具有概率值的每個相互作用并進(jìn)行排列檢驗,來推斷具有生物學(xué)意義的細(xì)胞-細(xì)胞通信蛙奖。CellChat通過將基因表達(dá)與先前已知的信號配體潘酗、受體及其同因子之間的相互作用知識相結(jié)合,利用大量作用規(guī)律雁仲,對細(xì)胞-細(xì)胞通信的概率進(jìn)行模擬仔夺。
推斷的配體受體對的數(shù)量顯然取決于計算每個細(xì)胞組平均基因表達(dá)的方法。默認(rèn)情況下攒砖,CellChat 使用一種統(tǒng)計學(xué)上強(qiáng)大的均值方法缸兔,稱為"trimean"日裙,與其他方法相比,它產(chǎn)生的相互作用更少惰蜜。然而昂拂,我們發(fā)現(xiàn) CellChat 在預(yù)測更強(qiáng)的交互方面表現(xiàn)良好,這非常有助于縮小交互范圍抛猖,以便進(jìn)一步進(jìn)行實驗驗證格侯。在computeCommunProb中,我們提供了一個選項财著,用于使用其他方法联四,如5%和10%截斷均值,來計算平均基因表達(dá)撑教。值得注意的是朝墩,"trimean"大約是25%的截斷平均值,這意味著如果一組表達(dá)細(xì)胞的百分比低于25%伟姐,則平均基因表達(dá)為零收苏。要使用 10% 截斷的平均值,用戶可以設(shè)置type = "truncatedMean"和對trim = 0.1愤兵。
在分析未分類的單細(xì)胞轉(zhuǎn)錄組時鹿霸,假設(shè)豐富的細(xì)胞群傾向于發(fā)送比稀有細(xì)胞群更強(qiáng)的信號,CellChat 還可以在概率計算中考慮每個細(xì)胞組中細(xì)胞比例的影響恐似。用戶可以設(shè)置population.size = TRUE
2.1 計算通信概率并推斷cellchat網(wǎng)絡(luò)
#默認(rèn)的cutoff的值為20%杜跷,即表達(dá)比例在25%以下的基因會被認(rèn)為是0,trim=0.1 可以調(diào)整比例閾值
cellchat <- computeCommunProb(cellchat, raw.use = TRUE)
# 如果在某些細(xì)胞群中只有少數(shù)細(xì)胞矫夷,則過濾掉細(xì)胞間的通信
cellchat <- filterCommunication(cellchat, min.cells = 10)
2.2 提取推斷的cellchat網(wǎng)絡(luò)作為數(shù)據(jù)框架
我們提供一個函數(shù)subsetCommunication,以輕松訪問推斷感興趣的細(xì)胞-細(xì)胞通信憋槐。例如
df.net <- subsetCommunication(cellchat)返回一個數(shù)據(jù)框架双藕,該數(shù)據(jù)框架由配體/受體級別的所有推斷細(xì)胞通信組成。設(shè)置slot.name = "netP"可以在信號通路級別訪問推斷的通信
df.net <- subsetCommunication(cellchat, sources.use = c(1,2), targets.use = c(4,5))將推斷的細(xì)胞-細(xì)胞通信從細(xì)胞組1和2發(fā)送到細(xì)胞組4和5阳仔。
df.net <- subsetCommunication(cellchat, signaling = c("WNT", "TGFb"))通過向WNT和TGFb發(fā)出信號來調(diào)節(jié)推斷的細(xì)胞通信忧陪。
df.net <- subsetCommunication(cellchat) # 將細(xì)胞通訊預(yù)測結(jié)果以數(shù)據(jù)框的形式取出來
class(df.net) # 看一下是什么格式, 是數(shù)據(jù)框
# 既然是數(shù)據(jù)框格式近范,那就可以用View 查看嘶摊;也可以用DT函數(shù)查看
View(df.net)
DT:: datatable(df.net)
# 把預(yù)測的結(jié)果寫出來
write.csv(df.net, '01.df.net.csv')
2.3 在信號通路級別推斷細(xì)胞-細(xì)胞通信
CellChat 通過總結(jié)與每個信號通路相關(guān)的所有配體-受體相互作用的通信概率,來計算信號通路級別上的通信概率评矩。
NB:每個配體受體對和每個信號通路的推斷細(xì)胞間通信網(wǎng)絡(luò)分別存儲在插槽"net"和"netP"中叶堆。
cellchat <- computeCommunProbPathway(cellchat)
2.4 計算整合的細(xì)胞通信網(wǎng)絡(luò)
我們可以通過計算鏈接數(shù)或匯總通信概率來計算整合的細(xì)胞通信網(wǎng)絡(luò)。用戶還可以通過設(shè)置sources.use和targets.use`
每對配體受體的預(yù)測結(jié)果存在net中斥杜,每條通路的預(yù)測結(jié)果保存在netp中
#每對配體受體的預(yù)測結(jié)果存在net中虱颗,每條通路的預(yù)測結(jié)果保存在netp中
cellchat <- aggregateNet(cellchat)
可視化整合的細(xì)胞通信網(wǎng)絡(luò)沥匈。 使用圓圖顯示任意兩個細(xì)胞組之間的相互作用次數(shù)或總交互強(qiáng)度(比重)。
--------可視化----------
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") # 展示互作數(shù)量
netVisual_circle(cellchat@net$weight, vertex.weight = groupSize, weight.scale = T, label.edge= F, title.name = "Interaction weights/strength") #展示互作權(quán)重
netVisual_circle(cellchat@net$weight, vertex.weight = groupSize, weight.scale = T, label.edge= F, title.name = "Interaction weights/strength",targets.ues = 'CD2') #只展示與CD2相關(guān)的互作高帖,箭頭指向DC2
互作數(shù)量與重要性圖
由于細(xì)胞通信網(wǎng)絡(luò)較為復(fù)雜,我們可以檢查每個細(xì)胞組發(fā)送的信號畦粮。在這里散址,我們還控制參數(shù)edge.weight.max,以便我們可以比較不同網(wǎng)絡(luò)之間的邊緣權(quán)重宣赔。
#互作數(shù)量與重要性圖
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])
} # 循環(huán)函數(shù)畫出每種細(xì)胞與其他細(xì)胞之間互作的關(guān)系
3. 細(xì)胞通信網(wǎng)絡(luò)的可視化
在推斷細(xì)胞通信網(wǎng)絡(luò)后预麸,CellChat 為進(jìn)一步的數(shù)據(jù)探索、分析和可視化提供了各種功能拉背。
CellChat提供了幾種可視化細(xì)胞通信網(wǎng)絡(luò)的方法师崎,包括分層圖岛啸、圓圖黔龟、和弦圖和氣泡圖。還提供了一個易于使用的工具产弹,用于提取和可視化推斷網(wǎng)絡(luò)的高階信息两疚。例如床估,它允許對細(xì)胞群的主要信號輸入和輸出以及這些群和信號如何協(xié)調(diào)功能進(jìn)行現(xiàn)成預(yù)測。CellChat可以通過結(jié)合通訊網(wǎng)絡(luò)分析诱渤、模式識別和多重學(xué)習(xí)方法丐巫,使用綜合方法對推斷出的細(xì)胞-細(xì)胞通信網(wǎng)絡(luò)進(jìn)行定量表征和比較。
3.1 使用層次結(jié)構(gòu)圖勺美、圓圖或和弦圖可視化每個信號通路
層次結(jié)構(gòu)圖: 用戶應(yīng)定義vertex.receiver递胧,這是一個數(shù)字矢量,將細(xì)胞群的索引作為層次圖左側(cè)的目標(biāo)赡茸。此分層圖由兩個部分組成:左部分顯示自分泌和旁分泌向某些感興趣的細(xì)胞組(即定義的)發(fā)出信號缎脾,右部分顯示自分泌和旁分泌向數(shù)據(jù)集中剩余的細(xì)胞組發(fā)出信號。因此占卧,層級圖提供了一種信息性和直觀的方式來可視化自分泌和旁分泌信號之間的細(xì)胞群之間的感興趣通信遗菠。例如,在研究成纖維細(xì)胞和免疫細(xì)胞之間的細(xì)胞-細(xì)胞通信時华蜒,用戶可以定義為所有成纖維細(xì)胞組辙纬。
和弦圖: CellChat 提供兩種功能netVisual_chord_cell和netVisual_chord_gene,并可視化具有不同目的和不同級別的細(xì)胞通信叭喜。netVisual_chord_cell用于可視化不同細(xì)胞群之間的細(xì)胞-細(xì)胞通信(和弦圖中的每個部分是細(xì)胞組)贺拣,netVisual_chord_gene用于可視化由多個配體受體或信號通路調(diào)節(jié)的細(xì)胞-細(xì)胞通信(和弦圖中的每個部分都是配體、受體或信號通路)。
邊緣顏色/權(quán)重纵柿、節(jié)點顏色/大小/形狀的解釋: 在所有可視化圖中蜈抓,邊緣顏色與發(fā)送者源一致,邊緣權(quán)重與交互強(qiáng)度成正比昂儒。較厚的邊緣線表示信號更強(qiáng)沟使。在層次結(jié)構(gòu)圖和圓圖中,圓的大小與每個細(xì)胞組中的細(xì)胞數(shù)量成正比渊跋。在層次圖中腊嗡,實心和開放的圓分別代表源和目標(biāo)。在和弦圖中拾酝,內(nèi)條顏色表示從相應(yīng)的外條接收信號的目標(biāo)燕少。內(nèi)條大小與目標(biāo)接收的信號強(qiáng)度成正比。這種內(nèi)條有助于解釋復(fù)雜的和弦圖蒿囤。請注意客们,有一些內(nèi)條沒有與任何一些細(xì)胞組鏈接,請忽略它材诽,因為這是一個本包尚未解決的問題底挫。
不同層次的細(xì)胞通信可視化: 可以使用netVisual_aggregate可視化信號通路的推斷通信網(wǎng)絡(luò),并使用netVisual_individual可視化與該信號通路相關(guān)的單個L-R對的推斷通信網(wǎng)絡(luò)脸侥。
以輸入一個信號通路為例建邓。所有顯示重要通信的信號通路均可通過cellchat@netP$pathways獲取。
這里的代碼和視頻里面的不太一樣U稣怼9俦摺!
#進(jìn)階可視化
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 計算每個配體受體對整體信號通路的貢獻(xiàn)外遇,并可視化由單個配體受體對調(diào)節(jié)的細(xì)胞通信
netAnalysis_contribution(cellchat, signaling = pathways.show)
還可以可視化由單個配體受體對調(diào)節(jié)的細(xì)胞-細(xì)胞通信注簿。函數(shù)extractEnrichedLR來提取給定信號通路的所有重要相互作用(L-R對)和相關(guān)信號基因。
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 自動保存所有推斷網(wǎng)絡(luò)的模塊以進(jìn)行快速探索
可以使用‘for … loop’自動保存所有推斷網(wǎng)絡(luò)快速探索使用跳仿。netVisual滩援,netVisual支持svg、png和pdf格式的輸出塔嬉。
# 所有顯著的信號通路
pathways.show.all <- cellchat@netP$pathways
# 檢查細(xì)胞排序,選擇合適的受配體
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 可視化由多個配體受體或信號通路調(diào)節(jié)的細(xì)胞通信
氣泡圖
可以使用netVisual_bubble顯示從某些細(xì)胞組到其他細(xì)胞組的所有重要相互作用(L-R對)租悄。
# 顯示從某些細(xì)胞組到其他細(xì)胞組的所有顯著的相互作用(L-R 對)
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), remove.isolate = FALSE)
#去掉sources.use = 4, targets.use = c(5:11)展示的是所有組的相互通訊
# 顯示從某細(xì)胞組到其他細(xì)胞組的某個通路的相互作用(L-R 對)
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), signaling = c("CCL","CXCL"), remove.isolate = FALSE)
和弦圖
顯示從某些細(xì)胞組到其他細(xì)胞組的所有相互作用(L-R對或信號通路)谨究。兩個特殊情況:一個顯示從一個細(xì)胞組發(fā)送的所有交互,另一個顯示一個細(xì)胞組接收的所有交互;顯示用戶輸入的交互或用戶定義的某些信號通路
#顯示從某些細(xì)胞組到其他細(xì)胞組的所有顯著的相互作用(L-R 對)
netVisual_chord_gene(cellchat, sources.use = 4, targets.use = c(5:11), lab.cex = 0.5,legend.pos.y = 30)
#同氣泡圖一樣泣棋,和弦圖也可以通過調(diào)整sources.use 胶哲、targets.use及signaling展示不同的通路,如果基因名稱重疊潭辈,可以通過降低small.gap值來調(diào)整參數(shù)鸯屿。
3.5 使用小提琴/點圖繪制信號基因表達(dá)分布
可以利用Seurat 包裝的函數(shù)plotGeneExpression繪制與L-R對或信號通路相關(guān)的信號基因的基因表達(dá)分布圖澈吨。
plotGeneExpression(cellchat, signaling = "CXCL")
默認(rèn)情況下,可以通過plotGeneExpression只顯示與推斷的重要通信相關(guān)的信號基因的表達(dá),或者寄摆,用戶可以使用extractEnrichedLR提取與推斷的L-R對或信號通路相關(guān)的信號基因谅辣,然后使用Seurat包繪制基因表達(dá)圖。
plotGeneExpression(cellchat, signaling = "CXCL", enriched.only = FALSE)
4. 細(xì)胞通信網(wǎng)絡(luò)系統(tǒng)分析
為了便于對復(fù)雜的細(xì)胞間通信網(wǎng)絡(luò)進(jìn)行解釋婶恼,CellChat 通過從圖形理論桑阶、模式識別和多重學(xué)習(xí)中抽象的方法對網(wǎng)絡(luò)進(jìn)行量化。
- 它可以使用網(wǎng)絡(luò)分析的集中度措施確定給定信號網(wǎng)絡(luò)中的主要信號源和目標(biāo)以及調(diào)節(jié)者和影響者
- 它可以通過利用模式識別方法預(yù)測特定細(xì)胞類型的關(guān)鍵傳入和傳出信號勾邦,以及不同細(xì)胞類型之間的協(xié)調(diào)響應(yīng)蚣录。
- 它可以通過定義相似度測量方法和從功能和拓?fù)浣嵌冗M(jìn)行多重學(xué)習(xí)來分組信號通路。
- 它可以通過對多個網(wǎng)絡(luò)的聯(lián)合多重學(xué)習(xí)來描繪保存上下文特定的信號通路眷篇。
4.1 識別細(xì)胞組的信號角色(例如萎河,占主導(dǎo)地位的發(fā)送器、接收器)以及主要貢獻(xiàn)信號
<meta charset="utf-8">
CellChat 允許通過計算每個細(xì)胞組的多個網(wǎng)絡(luò)中心測量蕉饼,隨時識別細(xì)胞間通信網(wǎng)絡(luò)中占主導(dǎo)地位的發(fā)送者虐杯、接收者、調(diào)解者和影響者椎椰。具體來說厦幅,我們在加權(quán)導(dǎo)向網(wǎng)絡(luò)中采用了措施,包括度外慨飘、度內(nèi)确憨、介于兩者之間流動和信息集中度,分別識別細(xì)胞間通信的主要發(fā)送者瓤的、接收者休弃、調(diào)解者和影響者。在以權(quán)重為計算通信概率的加權(quán)定向網(wǎng)絡(luò)中圈膏,將外向度計算為來自細(xì)胞組的傳出信號的通信概率之和塔猾,并計算為傳入信號對單元組通信概率的總和的度內(nèi),可用于分別識別信號網(wǎng)絡(luò)的主要單元件發(fā)送器和接收器稽坤。有關(guān)信息中心之間流動的定義丈甸,請查看參考文獻(xiàn)1及參考文獻(xiàn)2。
計算和可視化網(wǎng)絡(luò)中心分?jǐn)?shù)
cellchat <- netAnalysis_computeCentrality(cellchat, slot.name = "netP") # “netP”:推斷出的信號通路的細(xì)胞間通信網(wǎng)絡(luò)
#使用熱圖可視化計算的中心性得分尿褪,以便及早識別細(xì)胞群的主要信號作用
netAnalysis_signalingRole_network(cellchat, signaling = pathways.show, width = 8, height = 2.5, font.size = 10)
在 2D 空間中可視化占主導(dǎo)地位的發(fā)送器(源)和接收器(目標(biāo))
使用散點圖在 2D 空間中可視化占主導(dǎo)地位的發(fā)射器(源)和接收器(目標(biāo))睦擂。
x軸和y軸分別為與每個單元組相關(guān)的總傳出或傳入通信概率。點的大小與每個單元組關(guān)聯(lián)的推斷鏈接(包括傳出鏈接和傳入鏈接)的數(shù)量成正比杖玲。點的顏色表示不同的細(xì)胞群顿仇。如果定義了“組”,點形狀表示單元格組的不同類別。
# 聚合細(xì)胞-細(xì)胞通信網(wǎng)絡(luò)中所有信號通路的信號作用分析
gg1 <- netAnalysis_signalingRole_scatter(cellchat)
# 感興趣的細(xì)胞-細(xì)胞通信網(wǎng)絡(luò)的信號作用分析
gg2 <- netAnalysis_signalingRole_scatter(cellchat, signaling = c("CXCL", "CCL"))
gg1 + gg2
識別對某些細(xì)胞組的傳出或傳入信號貢獻(xiàn)最大的信號
#識別所有信號對某些細(xì)胞組的傳出或傳入的貢獻(xiàn)
ht1 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "outgoing")
ht2 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "incoming")
ht1 + ht2
識別所有信號對某些細(xì)胞組的傳出或傳入的貢獻(xiàn)
# #識別所有信號對某些細(xì)胞組的傳出或傳入的貢獻(xiàn)
ht <- netAnalysis_signalingRole_heatmap(cellchat, signaling = c("CXCL", "CCL"))
4.2 確定全局通信模式臼闻,探索多個細(xì)胞類型和信號通路如何協(xié)調(diào)在一起
除了探索單個通路的詳細(xì)通信外鸿吆,一個重要問題是多個細(xì)胞組和信號通路如何協(xié)調(diào)功能。CellChat 采用模式識別方法識別全局通信模式述呐。
隨著模式數(shù)量的增加惩淳,可能會有多余的模式,因此很難解釋通信模式市埋。我們選擇了五種模式作為默認(rèn)模式黎泣。一般來說,它具有生物學(xué)意義缤谎,模式數(shù)量要大于2抒倚。此外,我們還提供了一個函數(shù)selectK來推斷模式的數(shù)量坷澡,該數(shù)基于 NMF R 包中已實施的兩個指標(biāo)Cophenetic和Silhouette托呕。這兩個指標(biāo)都根據(jù)共識矩陣的分層聚類來衡量特定數(shù)量模式的穩(wěn)定性。對于一系列模式频敛,適當(dāng)?shù)哪J綌?shù)量是Cophenetic 和 Silhouette值開始突然下降的模式项郊。
識別和可視化分泌細(xì)胞的傳出通信模式
傳出模式揭示了發(fā)送者細(xì)胞(即作為信號源的細(xì)胞)如何相互協(xié)調(diào),以及它們?nèi)绾闻c某些信號通路協(xié)調(diào)以驅(qū)動通信斟赚。
為了直觀地顯示潛在模式與細(xì)胞群和配體受體對或信號通路的關(guān)聯(lián)着降,我們使用了河流(沖積)圖。我們首先將每行 W 和 H 的每列標(biāo)準(zhǔn)化為 [0拗军,1]任洞,然后在 W 和 H 中設(shè)置為零,如果它們小于 0.5发侵。這種閾值允許發(fā)現(xiàn)與每個推斷模式相關(guān)的最豐富的細(xì)胞組和信號通路交掏,即每個細(xì)胞組或信號通路僅與一個推斷模式相關(guān)聯(lián)。這些閾值矩陣 W 和 H 用作創(chuàng)建沖積圖的輸入刃鳄。
為了將細(xì)胞群與其豐富的信號通路直接聯(lián)系起來盅弛,如果 W 和 H 中的元素少于 1/R(R 是潛在模式數(shù)),則我們將它們中的元素設(shè)置為零叔锐。通過使用不太嚴(yán)格的閾值挪鹏,可以獲得與每個細(xì)胞組相關(guān)的更豐富的信號通路。我們使用每個細(xì)胞組對通過乘以 W 乘以 H 計算的每個信號通路的貢獻(xiàn)分?jǐn)?shù)愉烙,構(gòu)建了一個點圖狰住,其中點大小與貢獻(xiàn)分?jǐn)?shù)成正比,以顯示細(xì)胞組與其豐富信號通路之間的關(guān)聯(lián)齿梁。用戶還可以降低參數(shù)cutoff,以顯示每個細(xì)胞組關(guān)聯(lián)的更豐富的信號通路。
#加載需要的包
library(NMF)
library(ggalluvial)
運(yùn)行selectK推斷模式的數(shù)量
#我們根據(jù)在NMF R包中實現(xiàn)的兩個指標(biāo)推斷出模式的數(shù)量勺择,這兩個指標(biāo)包括Cophenetic和Silhouette创南。這兩個度量標(biāo)準(zhǔn)都是基于共識矩陣的層次聚類來衡量特定數(shù)量的模式的穩(wěn)定性。對于一個模式數(shù)量范圍省核,一個合適的模式數(shù)量是Cophenetic和Silhouette值開始突然下降的那個稿辙。
selectK(cellchat, pattern = "outgoing")
當(dāng)傳出模式數(shù)為 3 時,Cophenetic 和Silhouette值都開始突然下降气忠。
nPatterns = 3
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "outgoing", k = nPatterns)
河流圖
netAnalysis_river(cellchat, pattern = "outgoing")
點圖
netAnalysis_dot(cellchat, pattern = "outgoing")
識別和可視化目標(biāo)細(xì)胞的傳入通信模式
傳入模式顯示目標(biāo)細(xì)胞(即信號接收器中的細(xì)胞)如何相互協(xié)調(diào)邻储,以及它們?nèi)绾闻c某些信號通路協(xié)調(diào)以響應(yīng)傳入的信號。
selectK(cellchat, pattern = "incoming")
當(dāng)傳入模式的數(shù)量為 4 時旧噪,Cophenetic 值開始下降吨娜。
nPatterns = 4
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "incoming", k = nPatterns)
河流圖
netAnalysis_river(cellchat, pattern = "incoming")
點圖
netAnalysis_dot(cellchat, pattern = "incoming")
4.3 信號網(wǎng)絡(luò)的多重和分類學(xué)習(xí)分析
CellChat 能夠量化所有重要信號通路之間的相似性,然后根據(jù)其CellChat 網(wǎng)絡(luò)的相似性對其進(jìn)行分組淘钟。分組可以基于功能或結(jié)構(gòu)相似性進(jìn)行宦赠。
功能相似性:功能相似度高表示主要發(fā)送器和接收器相似,可解釋為兩個信號通路或兩個配體受體對具有相似的作用米母。功能相似性分析要求兩個數(shù)據(jù)集之間的細(xì)胞群組成相同勾扭。
結(jié)構(gòu)相似性:結(jié)構(gòu)相似性用于比較其信號網(wǎng)絡(luò)結(jié)構(gòu),而不考慮發(fā)送器和接收器的相似性铁瞒。
根據(jù)信號組的功能相似性識別信號組
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')
#之后再運(yùn)行妙色,如若還是報錯,重啟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)
基于結(jié)構(gòu)相似性識別信號組
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對象
以便后續(xù)使用
saveRDS(cellchat, file = "cellchat_humanSkin_LS.rds")
參考:單細(xì)胞轉(zhuǎn)錄組之使用CellChat對單個數(shù)據(jù)集進(jìn)行細(xì)胞間通訊分析