1. 數(shù)據(jù)的準備
#加載需要的包
library(CellChat)
library(patchwork)
#創(chuàng)建圖片保存的目錄
data.dir <- './Result_CellChat'
dir.create(data.dir)
setwd(data.dir)
#加載對應數(shù)據(jù)集的cellchat對象
cellchat.NL <- readRDS(url("https://ndownloader.figshare.com/files/25954199"))
cellchat.LS <- readRDS(url("https://ndownloader.figshare.com/files/25956518"))
#合并數(shù)據(jù)集
object.list <- list(NL = cellchat.NL, LS = cellchat.LS)
cellchat <- mergeCellChat(object.list, add.names = names(object.list))
#需要在每個數(shù)據(jù)集上單獨運行 CellChat孽椰,然后合并對象旨剥。如果使用較早版本(< 0.5.0)獲得的 CellChat 對象炭玫,先updateCellChat
2.預測細胞通信
在比較多種生物條件下的細胞-細胞通信時,可以得知細胞通信是否增強庆聘;細胞類型顯著變化之間的相互作用胜臊;不同條件下,source和target的變化
2.1 比較交互總數(shù)和交互強度
gg1 <- compareInteractions(cellchat, show.legend = F, group = c(1,2))
gg2 <- compareInteractions(cellchat, show.legend = F, group = c(1,2), measure = "weight")
gg1 + gg2
2.2 比較不同細胞亞群之間的相互作用數(shù)量和強度
邊的寬度表示交互的相對數(shù)量或交互強度伙判。與第一個數(shù)據(jù)集相比象对,第二個數(shù)據(jù)集中的紅色(或藍色)邊緣表示增加(或減少)的信號。
par(mfrow = c(1,2), xpd=TRUE)
netVisual_diffInteraction(cellchat, weight.scale = T)
netVisual_diffInteraction(cellchat, weight.scale = T, measure = "weight")
可以使用熱圖在更大的細節(jié)中顯示交互的差異數(shù)或交互強度宴抚。頂部彩色條形圖表示熱圖(傳入信號)中顯示的列值的總和勒魔。右邊的彩色條形圖表示一行值(傳出信號)的總和。在色條中紅色或藍色表示第二個數(shù)據(jù)集中與第一個數(shù)據(jù)集相比增加或[減少]信號菇曲。
gg1 <- netVisual_heatmap(cellchat, measure = "count")
gg2 <- netVisual_heatmap(cellchat, measure = "weight")
gg1 + gg2
#measure "count" or "weight". "count": comparing the number of interactions; "weight": comparing the total interaction weights (strength)
差異網(wǎng)絡(luò)分析僅適用于配對數(shù)據(jù)集冠绢。如果有更多的數(shù)據(jù)集進行比較,直接顯示每個數(shù)據(jù)集中任意兩個細胞群之間的交互次數(shù)或交互強度常潮。
為了更好地控制不同數(shù)據(jù)集中推斷網(wǎng)絡(luò)的節(jié)點大小和邊緣權(quán)重弟胀,計算每個細胞組的最大細胞數(shù)量以及所有數(shù)據(jù)集中交互(或交互權(quán)重)的最大數(shù)量。
weight.max <- getMaxWeight(object.list, attribute = c("idents","count"))
par(mfrow = c(1,2), xpd=TRUE)
for (i in 1:length(object.list)) {
netVisual_circle(object.list[[i]]@net$count, weight.scale = T, label.edge= F, edge.weight.max = weight.max[2], edge.width.max = 12, title.name = paste0("Number of interactions - ", names(object.list)[i]))
}
2.3 比較 2D 空間中的主要source和target
比較二D空間中的傳出和傳入交互強度喊式,可以識別不同數(shù)據(jù)集之間顯著變化的發(fā)送或接收信號的細胞群孵户。
num.link <- sapply(object.list, function(x) {rowSums(x@net$count) + colSums(x@net$count)-diag(x@net$count)})
weight.MinMax <- c(min(num.link), max(num.link))
# 控制不同數(shù)據(jù)集中的氣泡大小
gg <- list()
for (i in 1:length(object.list)) {
gg[[i]] <- netAnalysis_signalingRole_scatter(object.list[[i]], title = names(object.list)[i], weight.MinMax = weight.MinMax)
}
#從所有信號通路分析聚合細胞-細胞通信網(wǎng)絡(luò)的信號作用
patchwork::wrap_plots(plots = gg)
從散點圖中,可以看到與 NL 相比岔留,Inflam.DC 和 cDC1 成為 LS 中的主要source和target之一夏哭。纖維細胞群也成為LS的主要source。
3.識別保守和環(huán)境特異的信號通路
CellChat 可以根據(jù)對象在多種生物條件下的細胞通信網(wǎng)絡(luò)献联,識別差異較大(或更少)的信號網(wǎng)絡(luò)竖配、信號組以及基于其細胞通信網(wǎng)絡(luò)的保守和環(huán)境特異的信號通路何址。
3.1 根據(jù)信號/結(jié)構(gòu)的相似性識別差異較大(或更少)的信號網(wǎng)絡(luò)以及信號組
CellChat 根據(jù)推斷的通信網(wǎng)絡(luò)的功能和拓撲相似性,對其進行聯(lián)合多重學習和分類进胯。NB:此類分析適用于兩個以上的數(shù)據(jù)集用爪。
功能相似性:功能相似度高表示主要source和target相似,可解釋為兩個信號通路或兩個配體受體對具有相似的作用龄减。功能相似性分析不適用于具有不同細胞類型成分的多個數(shù)據(jù)集项钮。
結(jié)構(gòu)相似性:結(jié)構(gòu)相似性用于比較其信號網(wǎng)絡(luò)結(jié)構(gòu)班眯,而不考慮source和target的相似性希停。結(jié)構(gòu)相似性分析適用于具有相同細胞類型組成或截然不同的細胞類型組成多個數(shù)據(jù)集。
在這里署隘,我們可以根據(jù)功能相似性運行多重和分類學習分析宠能,因為兩個數(shù)據(jù)集具有相同的單元類型組成。
根據(jù)信號組的功能相似性識別信號組
cellchat <- computeNetSimilarityPairwise(cellchat, type = "functional")
#計算數(shù)據(jù)集信號網(wǎng)絡(luò)相似性
cellchat <- netEmbedding(cellchat, type = "functional")
#數(shù)據(jù)集網(wǎng)絡(luò)的多重學習
cellchat <- netClustering(cellchat, type = "functional")
#數(shù)據(jù)集網(wǎng)絡(luò)的分類
# 2D 可視化
netVisual_embeddingPairwise(cellchat, type = "functional", label.size = 3.5)
# netVisual_embeddingZoomIn(cellchat, type = "functional", nCol = 2)
根據(jù)信號組的結(jié)構(gòu)相似性識別信號組
cellchat <- computeNetSimilarityPairwise(cellchat, type = "structural")
cellchat <- netEmbedding(cellchat, type = "structural")
cellchat <- netClustering(cellchat, type = "structural")
netVisual_embeddingPairwise(cellchat, type = "structural", label.size = 3.5)
netVisual_embeddingPairwiseZoomIn(cellchat, type = "structural", nCol = 2)
計算和可視化通路距離
我們可以根據(jù)信號網(wǎng)絡(luò)在共享雙維空間中的歐幾里德距離來識別差異較大(或更少)的信號網(wǎng)絡(luò)磁餐。更大的距離意味著兩個數(shù)據(jù)集之間的通信網(wǎng)絡(luò)在功能或結(jié)構(gòu)相似性方面存在更大的差異违崇。只計算兩個數(shù)據(jù)集之間重疊信號通路的距離。此處未考慮僅在一個數(shù)據(jù)集中標識的信號通路诊霹。如果有三個以上的數(shù)據(jù)集羞延,可以通過在函數(shù)rankSimilarity中定義comparison進行對比。
#計算歐幾里德距離
rankSimilarity(cellchat, type = "functional")
3.2 識別并可視化保守和環(huán)境特異的信號通路
通過比較每個信號通路的信息流/交互脾还,可以識別信號通路的狀態(tài):關(guān)閉伴箩,減少,打開鄙漏,增加嗤谚。
比較每個信號通路的整體信息流
可以通過簡單地比較每個信號通路的信息流來識別保守和環(huán)境特異的信號通路,該信息流由推斷網(wǎng)絡(luò)中所有一對細胞群之間的通信概率之和(即網(wǎng)絡(luò)中的總權(quán)重)定義怔蚌。
此條形圖可在堆疊模式下繪制巩步。根據(jù) NL 和 LS 之間推斷的網(wǎng)絡(luò)中整體信息流的差異對重要信號通路進行排名。紅色的頂部信號通路富含 NL 桦踊,綠色在 LS 中得到了富集椅野。
gg1 <- rankNet(cellchat, mode = "comparison", stacked = T, do.stat = TRUE)
gg2 <- rankNet(cellchat, mode = "comparison", stacked = F, do.stat = TRUE)
gg1 + gg2
比較與每個細胞群相關(guān)的傳出(或傳入)信號
上述分析將傳出和傳入信號的信息匯總在一起。還可以比較兩個數(shù)據(jù)集之間的傳出(或傳入)信號模式籍胯,從而識別顯示不同信號模式的信號通路/受配體竟闪。
可以將來自不同數(shù)據(jù)集的所有已識別的信號通路進行組合,從而并排比較它們芒炼,包括傳出信號瘫怜、傳入信號和整體信號,方法是將傳出和傳入信號聚合在一起本刽。rankNet還顯示了整體信號的比較鲸湃,但它沒有顯示特定細胞群中的信號強度赠涮。
library(ComplexHeatmap)
i = 1
# 組合來自不同數(shù)據(jù)集的所有已識別的信號通路
pathway.union <- union(object.list[[i]]@netP$pathways, object.list[[i+1]]@netP$pathways)
ht1 = netAnalysis_signalingRole_heatmap(object.list[[i]], pattern = "outgoing", signaling = pathway.union, title = names(object.list)[i], width = 5, height = 6)
ht2 = netAnalysis_signalingRole_heatmap(object.list[[i+1]], pattern = "outgoing", signaling = pathway.union, title = names(object.list)[i+1], width = 5, height = 6)
draw(ht1 + ht2, ht_gap = unit(0.5, "cm"))
ht1 = netAnalysis_signalingRole_heatmap(object.list[[i]], pattern = "incoming", signaling = pathway.union, title = names(object.list)[i], width = 5, height = 6, color.heatmap = "GnBu")
ht2 = netAnalysis_signalingRole_heatmap(object.list[[i+1]], pattern = "incoming", signaling = pathway.union, title = names(object.list)[i+1], width = 5, height = 6, color.heatmap = "GnBu")
draw(ht1 + ht2, ht_gap = unit(0.5, "cm"))
ht1 = netAnalysis_signalingRole_heatmap(object.list[[i]], pattern = "all", signaling = pathway.union, title = names(object.list)[i], width = 5, height = 6, color.heatmap = "OrRd")
ht2 = netAnalysis_signalingRole_heatmap(object.list[[i+1]], pattern = "all", signaling = pathway.union, title = names(object.list)[i+1], width = 5, height = 6, color.heatmap = "OrRd")
draw(ht1 + ht2, ht_gap = unit(0.5, "cm"))
4. 識別上調(diào)和下調(diào)的信號配體對
可以比較由某些細胞群到其他細胞亞群的配體受體對調(diào)節(jié)的通信概率“堤簦可以通過設(shè)置comparison在函數(shù)netVisual_bubble中來完成笋除。
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), comparison = c(1, 2), angle.x = 45)
此外,可以在一個數(shù)據(jù)集中識別與另一個數(shù)據(jù)集相比炸裆,上升(增加)和下降調(diào)節(jié)(減少)信號配體受體對垃它。可以通過函數(shù)netVisual_bubble指定max.dataset和min.dataset完成烹看。信號增加意味著這些信號在一個數(shù)據(jù)集中與其他數(shù)據(jù)集相比具有更高的通信概率(強度)国拇。
gg1 <- netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), comparison = c(1, 2), max.dataset = 2, title.name = "Increased signaling in LS", angle.x = 45, remove.isolate = T)
gg2 <- netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), comparison = c(1, 2), max.dataset = 1, title.name = "Decreased signaling in LS", angle.x = 45, remove.isolate = T)
gg1 + gg2
氣泡圖中顯示的配體受體對可以通過signaling.LSIncreased = gg1$data 訪問。
通過比較每個 L-R 對和每對細胞組的兩個數(shù)據(jù)集之間的通信概率惯殊,可以采用上述方法來識別上調(diào)和下調(diào)的信號酱吝。另外,可以根據(jù)微分基因表達分析來識別上調(diào)和下調(diào)的信號配體對土思。具體來說务热,對每個細胞組執(zhí)行兩種生物條件(即NL和LS)之間的微分表達分析,然后根據(jù)發(fā)送者細胞中配體和接收器細胞中受體的折疊變化獲得上調(diào)和下調(diào)的信號己儒。此類分析可如下所示崎岂。
# 定義一個陽性數(shù)據(jù)集
pos.dataset = "LS"
# 定義一個字符名稱,用于存儲差分表達式分析的結(jié)果
features.name = pos.dataset
# 進行差異表達分析
cellchat <- identifyOverExpressedGenes(cellchat, group.dataset = "datasets", pos.dataset = pos.dataset, features.name = features.name, only.pos = FALSE, thresh.pc = 0.1, thresh.fc = 0.1, thresh.p = 1)
#將差異表達分析的結(jié)果映射到推斷的細胞-細胞通信上
net <- netMappingDEG(cellchat, features.name = features.name)
# 提取LS中上調(diào)的受配體對
net.up <- subsetCommunication(cellchat, net = net, datasets = "LS",ligand.logFC = 0.2, receptor.logFC = NULL)
# 提取NS中上調(diào)的受配體對
net.down <- subsetCommunication(cellchat, net = net, datasets = "NL",ligand.logFC = -0.1, receptor.logFC = -0.1)
由于信號基因在多細胞中可能很復雜闪湾,我們可以使用net.upnet.down進一步的來獲得單個信號基因冲甘。
gene.up <- extractGeneSubsetFromPair(net.up, cellchat)
gene.down <- extractGeneSubsetFromPair(net.down, cellchat)
然后,使用氣泡圖或和弦圖可視化上調(diào)和向下調(diào)的信號配體對响谓。
pairLR.use.up = net.up[, "interaction_name", drop = F]
gg1 <- netVisual_bubble(cellchat, pairLR.use = pairLR.use.up, sources.use = 4, targets.use = c(5:11), comparison = c(1, 2), angle.x = 90, remove.isolate = T,title.name = paste0("Up-regulated signaling in ", names(object.list)[2]))
pairLR.use.down = net.down[, "interaction_name", drop = F]
gg2 <- netVisual_bubble(cellchat, pairLR.use = pairLR.use.down, sources.use = 4, targets.use = c(5:11), comparison = c(1, 2), angle.x = 90, remove.isolate = T,title.name = paste0("Down-regulated signaling in ", names(object.list)[2]))
gg1 + gg2
5. 使用層次結(jié)構(gòu)圖损合、圓圖或和弦圖可視比較細胞-細胞通信
同單個數(shù)據(jù)集可視化類似,可以使用層次結(jié)構(gòu)圖娘纷、圓圖或和弦圖可視化細胞通信網(wǎng)絡(luò)嫁审。
邊緣顏色/重量、節(jié)點顏色/大小/形狀:在所有可視化圖中赖晶,邊緣顏色與發(fā)送者源一致律适,邊緣權(quán)重與交互強度成正比。較厚的邊緣線表示信號更強遏插。
在層次結(jié)構(gòu)圖和圓圖中捂贿,圓的大小與每個細胞組中的細胞數(shù)量成正比。在層次圖中胳嘲,實心和開放的圓分別代表源和目標厂僧。
在和弦圖中,內(nèi)條顏色表示從相應的外條接收信號的目標了牛。內(nèi)條大小與目標接收的信號強度成正比。這種內(nèi)條有助于解釋復雜的和弦圖。
展示某個通路的細胞通信
pathways.show <- c("CXCL")
weight.max <- getMaxWeight(object.list, slot.name = c("netP"), attribute = pathways.show)
# 控制不同數(shù)據(jù)集的邊的權(quán)重
par(mfrow = c(1,2), xpd=TRUE)
for (i in 1:length(object.list)) {
netVisual_aggregate(object.list[[i]], signaling = pathways.show, layout = "circle", edge.weight.max = weight.max[1], edge.width.max = 10, signaling.name = paste(pathways.show, names(object.list)[i]))
}
pathways.show <- c("CXCL")
par(mfrow = c(1,2), xpd=TRUE)
ht <- list()
for (i in 1:length(object.list)) {
ht[[i]] <- netVisual_heatmap(object.list[[i]], signaling = pathways.show, color.heatmap = "Reds",title.name = paste(pathways.show, "signaling ",names(object.list)[i]))
}
ComplexHeatmap::draw(ht[[1]] + ht[[2]], ht_gap = unit(0.5, "cm"))
6. 比較不同數(shù)據(jù)集之間的信號基因表達分布
同樣使用seurat包裝的函數(shù)plotGeneExpression繪制與信號通路相關(guān)的信號基因的基因表達分布圖贾费。
cellchat@meta$datasets = factor(cellchat@meta$datasets, levels = c("NL", "LS")) # set factor level
plotGeneExpression(cellchat, signaling = "CXCL", split.by = "datasets", colors.ggplot = T)
保存合并的cellchat對象
saveRDS(cellchat, file = "cellchat_comparisonAnalysis_humanSkin_NL_vs_LS.rds")
參考來源
CellChat三部曲2:使用CellChat 對多個數(shù)據(jù)集細胞通訊進行比較分析
致謝
I thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.
THE END