單細胞轉(zhuǎn)錄組之使用CellChat 對多個數(shù)據(jù)集細胞通訊進行比較分析

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市删性,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尔破,死亡現(xiàn)場離奇詭異,居然都是意外死亡浇衬,警方通過查閱死者的電腦和手機懒构,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來径玖,“玉大人痴脾,你說我怎么就攤上這事颤介∈嵝牵” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵滚朵,是天一觀的道長冤灾。 經(jīng)常有香客問我,道長辕近,這世上最難降的妖魔是什么韵吨? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮移宅,結(jié)果婚禮上归粉,老公的妹妹穿的比我還像新娘。我一直安慰自己漏峰,他們只是感情好糠悼,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浅乔,像睡著了一般倔喂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上靖苇,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天席噩,我揣著相機與錄音,去河邊找鬼贤壁。 笑死悼枢,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的脾拆。 我是一名探鬼主播馒索,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼给梅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了双揪?” 一聲冷哼從身側(cè)響起动羽,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渔期,沒想到半個月后运吓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡疯趟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年拘哨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片信峻。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡倦青,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盹舞,到底是詐尸還是另有隱情产镐,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布踢步,位于F島的核電站癣亚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏获印。R本人自食惡果不足惜述雾,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兼丰。 院中可真熱鬧玻孟,春花似錦、人聲如沸鳍征。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟆技。三九已至玩敏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間质礼,已是汗流浹背旺聚。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眶蕉,地道東北人砰粹。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碱璃。 傳聞我的和親對象是個殘疾皇子弄痹,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容