自從周運來寫了一篇cellchat的中文介紹教程《CellChat:細胞間相互作用分析利器》,然后R包作者也在B站做了直播介紹,cellchat作為一個細胞通訊分析的新興R包,受到了廣泛關(guān)注。教程也如雨后春筍般涌現(xiàn)。
鑒于R包誕生之初有一些bug,作為初學(xué)者學(xué)習(xí)走通可能有一定難度,這里再次對cellchat進行系統(tǒng)介紹,希望對大家有所幫助。當(dāng)然現(xiàn)在也有些小bug,但這些基本都可以通過搜索解決,這些小bug我大都寫過教程了。
系列教程共三篇:單個數(shù)據(jù)集分析,多個數(shù)據(jù)集比較分析,具有較大成分差異的數(shù)據(jù)集比較分析。本教程是單個數(shù)據(jù)集分析流程
此教程概述了使用CellChat對單個數(shù)據(jù)集細胞通信網(wǎng)絡(luò)進行推斷、分析和可視化的步驟。我們通過將其應(yīng)用于人類患者病變皮膚細胞 (LS) 的 scRNA-seq 數(shù)據(jù)來展示 CellChat 的多種功能。
CellChat 要求將細胞的基因表達數(shù)據(jù)作為輸入,并通過將基因表達與信號配體、受體與其同因子之間的相互作用的先驗知識相結(jié)合來對細胞-細胞通信的概率進行模擬。
在推斷細胞間通信網(wǎng)絡(luò)后,CellChat 為進一步的數(shù)據(jù)探索、分析和可視化提供了功能。
library(CellChat)
library(patchwork)
options(stringsAsFactors = FALSE)
CellChat 需要兩個輸入:一個是細胞的基因表達數(shù)據(jù),另一個是用戶分配的細胞標(biāo)簽(即基于標(biāo)簽的模式)或單細胞數(shù)據(jù)的低維表示(即無標(biāo)簽?zāi)J剑τ诤笳?,CellChat 通過根據(jù)低維空間或偽時間軌跡空間中的細胞距離構(gòu)建共享的鄰近圖自動對細胞進行分組。
對于基因表達數(shù)據(jù)矩陣,要求基因為行名,細胞為列名。需要將標(biāo)準(zhǔn)化數(shù)據(jù)作為 CellChat 分析的輸入。如果用戶提供count數(shù)據(jù),我們提供一個函數(shù)normalizeData來計算文庫大小,然后進行l(wèi)og轉(zhuǎn)換。對于分組信息,需要使用帶有行名的數(shù)據(jù)作為CellChat 的輸入。
# Here we load a scRNA-seq data matrix and its associated cell meta data
load(url("https://ndownloader.figshare.com/files/25950872")) # This is a combined data from two biological conditions: normal and diseases
data.input = data_humanSkin$data # normalized data matrix
meta = data_humanSkin$meta # a dataframe with rownames containing cell mata data
cell.use = rownames(meta)[meta$condition == "LS"] # extract the cell names from disease data
# Prepare input data for CelChat analysis
data.input = data.input[, cell.use]
meta = meta[cell.use, ]
# meta = data.frame(labels = meta$labels[cell.use], row.names = colnames(data.input)) # manually create a dataframe consisting of the cell labels
unique(meta$labels) # check the cell labels
#> [1] Inflam. FIB FBN1+ FIB APOE+ FIB COL11A1+ FIB cDC2
#> [6] LC Inflam. DC cDC1 CD40LG+ TC Inflam. TC
#> [11] TC NKT
#> 12 Levels: APOE+ FIB FBN1+ FIB COL11A1+ FIB Inflam. FIB cDC1 cDC2 ... NKT
用戶可以從數(shù)據(jù)矩陣、Seurat 或 SingleCellExperiment對象創(chuàng)建新的 CellChat 對象。如果輸入是Seurat 或 SingleCellExperiment對象,則默認情況下將使用對象中的meta data,用戶必須提供該數(shù)據(jù)來定義細胞分組。例如,group.by=Seurat 對象中默認的細胞標(biāo)識。
NB:如果用戶加載以前計算的CellChat 對象(版本<0.5.0),請通過updateCellChat
更新對象
cellchat <- createCellChat(object = data.input, meta = meta, group.by = "labels")
#> Create a CellChat object from a data matrix
#> Set cell identities for the new CellChat object
#> The cell groups used for CellChat analysis are APOE+ FIB FBN1+ FIB COL11A1+ FIB Inflam. FIB cDC1 cDC2 LC Inflam. DC TC Inflam. TC CD40LG+ TC NKT
如果在創(chuàng)建cellchat對象時未添加細胞meta信息,用戶也可以稍后添加該信息,并使用setIdent設(shè)置該對象默認的細胞標(biāo)識。
cellchat <- addMeta(cellchat, meta = meta)
cellchat <- setIdent(cellchat, ident.use = "labels") # set "labels" as default cell identity
levels(cellchat@idents) # show factor levels of the cell labels
groupSize <- as.numeric(table(cellchat@idents)) # number of cells in each cell group
我們的數(shù)據(jù)庫 CellChatDB 是一個手動整理的文獻支持的配體受體在人和小鼠中的交互數(shù)據(jù)庫。小鼠中的CellChatDB包含2,021個經(jīng)驗證的分子相互作用,包括60%的自分泌/旁分泌信號相互作用、21%的細胞外基質(zhì)(ECM)受體相互作用和19%的細胞-細胞接觸相互作用。人的CellChatDB包含1,939個經(jīng)驗證的分子相互作用,包括61.8%的自分泌/旁分泌信號相互作用、21.7%的細胞外基質(zhì)(ECM)受體相互作用和16.5%的細胞-細胞接觸相互作用。
用戶可以通過添加自己精心整理的配體受體對來更新 CellChatDB。
CellChatDB <- CellChatDB.human # use CellChatDB.mouse if running on mouse data
showDatabaseCategory(CellChatDB)
# Show the structure of the database
dplyr::glimpse(CellChatDB$interaction)
#> Rows: 1,939
#> Columns: 11
#> $ interaction_name <chr> "TGFB1_TGFBR1_TGFBR2", "TGFB2_TGFBR1_TGFBR2", "TGF…
#> $ pathway_name <chr> "TGFb", "TGFb", "TGFb", "TGFb", "TGFb", "TGFb", "T…
#> $ ligand <chr> "TGFB1", "TGFB2", "TGFB3", "TGFB1", "TGFB1", "TGFB…
#> $ receptor <chr> "TGFbR1_R2", "TGFbR1_R2", "TGFbR1_R2", "ACVR1B_TGF…
#> $ agonist <chr> "TGFb agonist", "TGFb agonist", "TGFb agonist", "T…
#> $ antagonist <chr> "TGFb antagonist", "TGFb antagonist", "TGFb antago…
#> $ co_A_receptor <chr> "", "", "", "", "", "", "", "", "", "", "", "", ""…
#> $ co_I_receptor <chr> "TGFb inhibition receptor", "TGFb inhibition recep…
#> $ evidence <chr> "KEGG: hsa04350", "KEGG: hsa04350", "KEGG: hsa0435…
#> $ annotation <chr> "Secreted Signaling", "Secreted Signaling", "Secre…
#> $ interaction_name_2 <chr> "TGFB1 - (TGFBR1+TGFBR2)", "TGFB2 - (TGFBR1+TGFBR2…
# use a subset of CellChatDB for cell-cell communication analysis
CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling") # use Secreted Signaling
# use all CellChatDB for cell-cell communication analysis
# CellChatDB.use <- CellChatDB # simply use the default CellChatDB
# set the used database in the object
cellchat@DB <- CellChatDB.use
為了推斷細胞狀態(tài)特異的通信,我們識別一個細胞組中過度表達的配體或受體,然后識別過度表達的配體受體相互作用,是否過表達。
我們還提供將基因表達數(shù)據(jù)投影到蛋白質(zhì)-蛋白質(zhì)相互作用 (PPI) 網(wǎng)絡(luò)上的功能。具體來說,投影過程根據(jù)高度可信的實驗驗證的蛋白質(zhì)-蛋白質(zhì)網(wǎng)絡(luò)中定義的基因表達值來平滑基因的表達值。此功能在分析具有淺測序深度的單細胞數(shù)據(jù)時很有用,因為投影可減少信號基因的dropput效應(yīng),特別是對于配體/受體的可能的零表達。人們可能擔(dān)心這種投影過程可能引入的人為因素,但是,這幾乎可以忽略不計。用戶還可以通過在函數(shù)computeCommunProb()
中設(shè)置raw.use = TRUE
跳過此步驟。
cellchat <- subsetData(cellchat) # subset the expression data of signaling genes for saving computation cost
future::plan("multiprocess", workers = 4) # do parallel
#> Warning: [ONE-TIME WARNING] Forked processing ('multicore') is disabled
#> in future (>= 1.13.0) when running R from RStudio, because it is
#> considered unstable. Because of this, plan("multicore") will fall
#> back to plan("sequential"), and plan("multiprocess") will fall back to
#> plan("multisession") - not plan("multicore") as in the past. For more details,
#> how to control forked processing or not, and how to silence this warning in
#> future R sessions, see ?future::supportsMulticore
cellchat <- identifyOverExpressedGenes(cellchat)
cellchat <- identifyOverExpressedInteractions(cellchat)
cellchat <- projectData(cellchat, PPI.human)
CellChat 通過分配具有概率值的每個相互作用并進行排列檢驗,來推斷具有生物學(xué)意義的細胞-細胞通信。CellChat通過將基因表達與先前已知的信號配體、受體及其同因子之間的相互作用知識相結(jié)合,利用大量作用規(guī)律,對細胞-細胞通信的概率進行模擬。
推斷的配體受體對的數(shù)量顯然取決于計算每個細胞組平均基因表達的方法。默認情況下,CellChat 使用一種統(tǒng)計學(xué)上強大的均值方法,稱為"trimean",與其他方法相比,它產(chǎn)生的相互作用更少。然而,我們發(fā)現(xiàn) CellChat 在預(yù)測更強的交互方面表現(xiàn)良好,這非常有助于縮小交互范圍,以便進一步進行實驗驗證。在computeCommunProb中,我們提供了一個選項,用于使用其他方法,如5%和10%截斷均值,來計算平均基因表達。值得注意的是,"trimean"大約是25%的截斷平均值,這意味著如果一組表達細胞的百分比低于25%,則平均基因表達為零。要使用 10% 截斷的平均值,用戶可以設(shè)置type = "truncatedMean"
和對trim = 0.1
。
在分析未分類的單細胞轉(zhuǎn)錄組時,假設(shè)豐富的細胞群傾向于發(fā)送比稀有細胞群更強的信號,CellChat 還可以在概率計算中考慮每個細胞組中細胞比例的影響。用戶可以設(shè)置population.size = TRUE
cellchat <- computeCommunProb(cellchat, raw.use = TRUE)
# Filter out the cell-cell communication if there are only few number of cells in certain cell groups
cellchat <- filterCommunication(cellchat, min.cells = 10)
我們提供一個函數(shù)subsetCommunication
,以輕松訪問推斷感興趣的細胞-細胞通信。例如
df.net <- subsetCommunication(cellchat)
返回一個數(shù)據(jù)框架,該數(shù)據(jù)框架由配體/受體級別的所有推斷細胞通信組成。設(shè)置slot.name = "netP"可以在信號通路級別訪問推斷的通信df.net <- subsetCommunication(cellchat, sources.use = c(1,2), targets.use = c(4,5))
將推斷的細胞-細胞通信從細胞組1和2發(fā)送到細胞組4和5。df.net <- subsetCommunication(cellchat, signaling = c("WNT", "TGFb"))
通過向WNT和TGFb發(fā)出信號來調(diào)節(jié)推斷的細胞通信。CellChat 通過總結(jié)與每個信號通路相關(guān)的所有配體-受體相互作用的通信概率,來計算信號通路級別上的通信概率。
NB:每個配體受體對和每個信號通路的推斷細胞間通信網(wǎng)絡(luò)分別存儲在插槽"net"和"netP"中。
cellchat <- computeCommunProbPathway(cellchat)
我們可以通過計算鏈接數(shù)或匯總通信概率來計算整合的細胞通信網(wǎng)絡(luò)。用戶還可以通過設(shè)置sources.use和
targets.use`
cellchat <- aggregateNet(cellchat)
我們還可以可視化整合的細胞通信網(wǎng)絡(luò)。例如,使用圓圖顯示任意兩個細胞組之間的相互作用次數(shù)或總交互強度(比重)。
groupSize <- as.numeric(table(cellchat@idents))
par(mfrow = c(1,2), xpd=TRUE)
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")
由于細胞通信網(wǎng)絡(luò)復(fù)雜,我們可以檢查每個細胞組發(fā)送的信號。在這里,我們還控制參數(shù)edge.weight.max
,以便我們可以比較不同網(wǎng)絡(luò)之間的邊緣權(quán)重。
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])
}
在推斷細胞通信網(wǎng)絡(luò)后,CellChat 為進一步的數(shù)據(jù)探索、分析和可視化提供了各種功能。
層次結(jié)構(gòu)圖:用戶應(yīng)定義vertex.receiver,這是一個數(shù)字矢量,將細胞群的索引作為層次圖左側(cè)的目標(biāo)。此分層圖由兩個部分組成:左部分顯示自分泌和旁分泌向某些感興趣的細胞組(即定義的)發(fā)出信號,右部分顯示自分泌和旁分泌向數(shù)據(jù)集中剩余的細胞組發(fā)出信號。因此,層級圖提供了一種信息性和直觀的方式來可視化自分泌和旁分泌信號之間的細胞群之間的感興趣通信。例如,在研究成纖維細胞和免疫細胞之間的細胞-細胞通信時,用戶可以定義為所有成纖維細胞組。
和弦圖:CellChat 提供兩種功能netVisual_chord_cell
和netVisual_chord_gene,并可視化具有不同目的和不同級別的細胞通信。netVisual_chord_cell用于可視化不同細胞群之間的細胞-細胞通信(和弦圖中的每個部分是細胞組),netVisual_chord_gene用于可視化由多個配體受體或信號通路調(diào)節(jié)的細胞-細胞通信(和弦圖中的每個部分都是配體、受體或信號通路)。
邊緣顏色/權(quán)重、節(jié)點顏色/大小/形狀的解釋:在所有可視化圖中,邊緣顏色與發(fā)送者源一致,邊緣權(quán)重與交互強度成正比。較厚的邊緣線表示信號更強。在層次結(jié)構(gòu)圖和圓圖中,圓的大小與每個細胞組中的細胞數(shù)量成正比。在層次圖中,實心和開放的圓分別代表源和目標(biāo)。在和弦圖中,內(nèi)條顏色表示從相應(yīng)的外條接收信號的目標(biāo)。內(nèi)條大小與目標(biāo)接收的信號強度成正比。這種內(nèi)條有助于解釋復(fù)雜的和弦圖。請注意,有一些內(nèi)條沒有與任何一些細胞組鏈接,請忽略它,因為這是一個本包尚未解決的問題。
不同層次的細胞通信可視化:可以使用netVisual_aggregate可視化信號通路的推斷通信網(wǎng)絡(luò),并使用netVisual_individual可視化與該信號通路相關(guān)的單個L-R對的推斷通信網(wǎng)絡(luò)。
在這里,我們以輸入一個信號通路為例。所有顯示重要通信的信號通路均可通過cellchat@netP$pathways
獲取。
pathways.show <- c("CXCL")
# Hierarchy plot
# Here we define `vertex.receive` so that the left portion of the hierarchy plot shows signaling to fibroblast and the right portion shows signaling to immune cells
vertex.receiver = seq(1,4) # a numeric vector.
netVisual_aggregate(cellchat, signaling = pathways.show, vertex.receiver = vertex.receiver)
# Circle plot
par(mfrow=c(1,1))
netVisual_aggregate(cellchat, signaling = pathways.show, layout = "circle")
# Chord diagram
par(mfrow=c(1,1))
netVisual_aggregate(cellchat, signaling = pathways.show, layout = "chord")
#> Note: The first link end is drawn out of sector 'Inflam. FIB'.
# Heatmap
par(mfrow=c(1,1))
netVisual_heatmap(cellchat, signaling = pathways.show, color.heatmap = "Reds")
#> Do heatmap based on a single object
對于和弦圖,CellChat 具有獨立函數(shù)netVisual_chord_cell
,通過調(diào)整circlize[1] ]包中的不同參數(shù)來靈活可視化信號網(wǎng)絡(luò)。例如,我們可以定義一個group命名的字符矢量,以創(chuàng)建多組和弦圖,將細胞群集分組到不同的細胞類型。
# Chord diagram
group.cellType <- c(rep("FIB", 4), rep("DC", 4), rep("TC", 4)) # grouping cell clusters into fibroblast, DC and TC cells
names(group.cellType) <- levels(cellchat@idents)
netVisual_chord_cell(cellchat, signaling = pathways.show, group = group.cellType, title.name = paste0(pathways.show, " signaling network"))
#> Plot the aggregated cell-cell communication network at the signaling pathway level
#> Note: The first link end is drawn out of sector 'Inflam. FIB'.
netAnalysis_contribution(cellchat, signaling = pathways.show)
我們還可以可視化由單個配體受體對調(diào)節(jié)的細胞-細胞通信。我們提供一個函數(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
# Hierarchy plot
vertex.receiver = seq(1,4) # a numeric vector
netVisual_individual(cellchat, signaling = pathways.show, pairLR.use = LR.show, vertex.receiver = vertex.receiver)
# Circle plot
netVisual_individual(cellchat, signaling = pathways.show, pairLR.use = LR.show, layout = "circle")
#> [[1]]
# Chord diagram
netVisual_individual(cellchat, signaling = pathways.show, pairLR.use = LR.show, layout = "chord")
#> Note: The first link end is drawn out of sector 'Inflam. FIB'.
#> [[1]]
在實際使用中,用戶可以使用'for … loop’自動保存所有推斷網(wǎng)絡(luò)快速探索使用。netVisual,netVisual支持svg、png和pdf格式的輸出。
# Access all the signaling pathways showing significant communications
pathways.show.all <- cellchat@netP$pathways
# check the order of cell identity to set suitable vertex.receiver
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)
}
我們還可以使用netVisual_bubble顯示從某些細胞組到其他細胞組的所有重要相互作用(L-R對)。
# show all the significant interactions (L-R pairs) from some cell groups (defined by 'sources.use') to other cell groups (defined by 'targets.use')
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), remove.isolate = FALSE)
#> Comparing communications on a single object
# show all the significant interactions (L-R pairs) associated with certain signaling pathways
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), signaling = c("CCL","CXCL"), remove.isolate = FALSE)
#> Comparing communications on a single object
類似于氣泡圖,cellchat提供了繪制和弦圖的功能netVisual_chord_gene
# show all the significant interactions (L-R pairs) from some cell groups (defined by 'sources.use') to other cell groups (defined by 'targets.use')
# show all the interactions sending from Inflam.FIB
netVisual_chord_gene(cellchat, sources.use = 4, targets.use = c(5:11), lab.cex = 0.5,legend.pos.y = 30)
#> Note: The first link end is drawn out of sector 'MIF'.
# show all the interactions received by Inflam.DC
netVisual_chord_gene(cellchat, sources.use = c(1,2,3,4), targets.use = 8, legend.pos.x = 15)
# show all the significant interactions (L-R pairs) associated with certain signaling pathways
netVisual_chord_gene(cellchat, sources.use = c(1,2,3,4), targets.use = c(5:11), signaling = c("CCL","CXCL"),legend.pos.x = 8)
#> Note: The second link end is drawn out of sector 'CXCR4 '.
#> Note: The first link end is drawn out of sector 'CXCL12 '.
# show all the significant signaling pathways from some cell groups (defined by 'sources.use') to other cell groups (defined by 'targets.use')
netVisual_chord_gene(cellchat, sources.use = c(1,2,3,4), targets.use = c(5:11), slot.name = "netP", legend.pos.x = 10)
#> Note: The second link end is drawn out of sector ' '.
#> Note: The first link end is drawn out of sector 'MIF'.
#> Note: The second link end is drawn out of sector ' '.
#> Note: The first link end is drawn out of sector 'CXCL '.
NB:在生成圖時,請忽略注釋,例如 “Note: The first link end is drawn out of sector 'MIF’。如果基因名稱重疊,您可以通過降低small.gap值來調(diào)整參數(shù)。
我們可以利用Seurat 包裝的函數(shù)plotGeneExpression繪制與L-R對或信號通路相關(guān)的信號基因的基因表達分布圖。
plotGeneExpression(cellchat, signaling = "CXCL")
#> Registered S3 method overwritten by 'spatstat':
#> method from
#> print.boxx cli
#> Scale for 'y' is already present. Adding another scale for 'y', which will
#> replace the existing scale.
#> Scale for 'y' is already present. Adding another scale for 'y', which will
#> replace the existing scale.
#> Scale for 'y' is already present. Adding another scale for 'y', which will
#> replace the existing scale.
默認情況下,用戶可以通過plotGeneExpression
只顯示與推斷的重要通信相關(guān)的信號基因的表達。
plotGeneExpression(cellchat, signaling = "CXCL", enriched.only = FALSE)
或者,用戶可以使用extractEnrichedLR提取與推斷的L-R對或信號通路相關(guān)的信號基因,然后使用Seurat包繪制基因表達圖。
為了便于對復(fù)雜的細胞間通信網(wǎng)絡(luò)進行解釋,CellChat 通過從圖形理論、模式識別和多重學(xué)習(xí)中抽象的方法對網(wǎng)絡(luò)進行量化。
CellChat 允許通過計算每個細胞組的多個網(wǎng)絡(luò)中心測量,隨時識別細胞間通信網(wǎng)絡(luò)中占主導(dǎo)地位的發(fā)送者、接收者、調(diào)解者和影響者。具體來說,我們在加權(quán)導(dǎo)向網(wǎng)絡(luò)中采用了措施,包括度外、度內(nèi)、介于兩者之間流動和信息集中度,分別識別細胞間通信的主要發(fā)送者、接收者、調(diào)解者和影響者。在以權(quán)重為計算通信概率的加權(quán)定向網(wǎng)絡(luò)中,將外向度計算為來自細胞組的傳出信號的通信概率之和,并計算為傳入信號對單元組通信概率的總和的度內(nèi),可用于分別識別信號網(wǎng)絡(luò)的主要單元件發(fā)送器和接收器。有關(guān)信息中心之間流動的定義,請查看本文[2]及相關(guān)參考[3]文獻。
# 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
netAnalysis_signalingRole_network(cellchat, signaling = pathways.show, width = 8, height = 2.5, font.size = 10)
我們還提供了另一種直觀方法,使用散點圖在 2D 空間中可視化占主導(dǎo)地位的發(fā)射器(源)和接收器(目標(biāo))。
# Signaling role analysis on the aggregated cell-cell communication network from all signaling pathways
gg1 <- netAnalysis_signalingRole_scatter(cellchat)
#> Signaling role analysis on the aggregated cell-cell communication network from all signaling pathways
# Signaling role analysis on the cell-cell communication networks of interest
gg2 <- netAnalysis_signalingRole_scatter(cellchat, signaling = c("CXCL", "CCL"))
#> Signaling role analysis on the cell-cell communication network from user's input
gg1 + gg2
我們還可以回答以下問題:哪些信號對某些細胞組的傳出或傳入信號貢獻最大。
# Signaling role analysis on the aggregated cell-cell communication network from all signaling pathways
ht1 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "outgoing")
ht2 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "incoming")
ht1 + ht2
# Signaling role analysis on the cell-cell communication networks of interest
ht <- netAnalysis_signalingRole_heatmap(cellchat, signaling = c("CXCL", "CCL"))
除了探索單個通路的詳細通信外,一個重要問題是多個細胞組和信號通路如何協(xié)調(diào)功能。CellChat 采用模式識別方法識別全局通信模式。
隨著模式數(shù)量的增加,可能會有多余的模式,因此很難解釋通信模式。我們選擇了五種模式作為默認模式。一般來說,它具有生物學(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值開始突然下降的模式。
傳出模式揭示了發(fā)送者細胞(即作為信號源的細胞)如何相互協(xié)調(diào),以及它們?nèi)绾闻c某些信號通路協(xié)調(diào)以驅(qū)動通信。
為了直觀地顯示潛在模式與細胞群和配體受體對或信號通路的關(guān)聯(lián),我們使用了河流(沖積)圖。我們首先將每行 W 和 H 的每列標(biāo)準(zhǔn)化為 [0,1],然后在 W 和 H 中設(shè)置為零,如果它們小于 0.5。這種閾值允許發(fā)現(xiàn)與每個推斷模式相關(guān)的最豐富的細胞組和信號通路,即每個細胞組或信號通路僅與一個推斷模式相關(guān)聯(lián)。這些閾值矩陣 W 和 H 用作創(chuàng)建沖積圖的輸入。
為了將細胞群與其豐富的信號通路直接聯(lián)系起來,如果 W 和 H 中的元素少于 1/R(R 是潛在模式數(shù)),則我們將它們中的元素設(shè)置為零。通過使用不太嚴格的閾值,可以獲得與每個細胞組相關(guān)的更豐富的信號通路。我們使用每個細胞組對通過乘以 W 乘以 H 計算的每個信號通路的貢獻分數(shù),構(gòu)建了一個點圖,其中點大小與貢獻分數(shù)成正比,以顯示細胞組與其豐富信號通路之間的關(guān)聯(lián)。用戶還可以降低參數(shù)cutoff,以顯示每個細胞組關(guān)聯(lián)的更豐富的信號通路。
通信模式分析所需的包
library(NMF)
#> Loading required package: pkgmaker
#> Loading required package: registry
#> Loading required package: rngtools
#> Loading required package: cluster
#> NMF - BioConductor layer [OK] | Shared memory capabilities [NO: bigmemory] | Cores 15/16
#> To enable shared memory capabilities, try: install.extras('
#> NMF
#> ')
#>
#> Attaching package: 'NMF'
#> The following objects are masked from 'package:igraph':
#>
#> algorithm, compare
library(ggalluvial)
在這里,我們運行selectK
推斷模式的數(shù)量。
selectK(cellchat, pattern = "outgoing")
當(dāng)傳出模式數(shù)為 3 時,Cophenetic 和Silhouette值都開始突然下降。
nPatterns = 3
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "outgoing", k = nPatterns)
# river plot
netAnalysis_river(cellchat, pattern = "outgoing")
#> Please make sure you have load `library(ggalluvial)` when running this function
# dot plot
netAnalysis_dot(cellchat, pattern = "outgoing")
傳入模式顯示目標(biāo)細胞(即信號接收器中的細胞)如何相互協(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)
# river plot
netAnalysis_river(cellchat, pattern = "incoming")
#> Please make sure you have load `library(ggalluvial)` when running this function
# dot plot
netAnalysis_dot(cellchat, pattern = "incoming")
此外,CellChat 能夠量化所有重要信號通路之間的相似性,然后根據(jù)其CellChat 網(wǎng)絡(luò)的相似性對其進行分組。分組可以基于功能或結(jié)構(gòu)相似性進行。
功能相似性:功能相似度高表示主要發(fā)送器和接收器相似,可解釋為兩個信號通路或兩個配體受體對具有相似的作用。功能相似性分析要求兩個數(shù)據(jù)集之間的細胞群組成相同。
結(jié)構(gòu)相似性:結(jié)構(gòu)相似性用于比較其信號網(wǎng)絡(luò)結(jié)構(gòu),而不考慮發(fā)送器和接收器的相似性。
cellchat <- computeNetSimilarity(cellchat, type = "functional")
cellchat <- netEmbedding(cellchat, type = "functional")
#> Manifold learning of the signaling networks for a single dataset
cellchat <- netClustering(cellchat, type = "functional")
#> Classification learning of the signaling networks for a single dataset
# Visualization in 2D-space
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")
#> Manifold learning of the signaling networks for a single dataset
cellchat <- netClustering(cellchat, type = "structural")
#> Classification learning of the signaling networks for a single dataset
# Visualization in 2D-space
netVisual_embedding(cellchat, type = "structural", label.size = 3.5)
netVisual_embeddingZoomIn(cellchat, type = "structural", nCol = 2)
saveRDS(cellchat, file = "cellchat_humanSkin_LS.rds")
以方便后續(xù)使用。
circlize: https://github.com/jokergoo/circlize
[2]本文: https://www.biorxiv.org/content/10.1101/2020.07.21.214387v1
[3]參考: https://link.springer.com/article/10.1007/s12599-010-0127-3
聯(lián)系客服