前面关于细胞通讯的理论学习提到过,邻接型的传递主要包含我们所熟知的神经信号传递和抗原呈递,主要是细胞表明配体-受体的相互作用。而扩散型的信号传递方式则是以分泌蛋白为主,例如很多可溶性的小分子。所以现在如果想对单细胞数据研究细胞-细胞的互作,一般的做法就是通过配体-受体进行研究。而配体和受体归根结底就是特定的蛋白,所以最终还是落脚到研究基因-基因的互作。
今天,我们先学习其中一个常见的方法:CellChat,一个2021年发在NC上面的文章。
===CellChat原理====
从方法上来看,作者首先构建了一个人和小鼠的配体-受体数据库。
从构建的步骤来看,主要分为四步:
第一步:从KEGG里面提取两种类型的pathway(Signal transduction和Signaling molecules and interaction)
第二步:手动的提取这几个pathway中的配体-受体对,以及作用于配体-受体对的其它共调控元件(agonist, antagonist, co-stimulatory and co-inhibitory receptors)。
第三步:对于关键的一些调控元件,又进行了手动检查,例如:
Cytokine Receptors (ko04050), Cytokines and Growth Factors (ko04052), and Bioactive Peptides(br08005)。(这一步,没看懂挑选的原则和逻辑)
第四步:又去已发表的文献里面进行了查漏补缺。
所以,总共下来,在human里面有1939对interaction,mouse里面有2021对。相比别的大部分库的优势就是除了考虑单个配体-受体信息,还考虑了复合多聚体的调控,这点和cellphoneDB有点类似。
那么,基于这个库和single cell数据,CellChat具体能干什么呢?
构建细胞通讯网络
细胞通讯网络(intercellular communication network)是一个由相互作用的细胞组之间的显著的配体-受体对组成的加权有向图,显示不同的细胞组之间检测到配体-受体相互作用的数量。如下图中,不同颜色的实心圆表示不同细胞组,实心圆大小与该细胞组对应的细胞个数成正比,每条边的颜色与信号发送者保持一致,边的粗细与通讯强度成比例。
2. 推断细胞角色
因为在细胞通讯网络中,是个有向图。因此,同一个细胞组既可以发送信号(信号的发送者,sender),也可以接收信号(信号的接收者,receiver)。CellChat利用网络分析中的out-degree, in-degree推断细胞通讯过程中不同细胞组作为信号的发送者,接收者的强度。例如下图中点的颜色表示不同细胞组,点的大小与每个细胞组推断的配体和受体数量成正比,x轴和y轴分别表示细胞组作为信号发送者和接收者的强度。
out-degree:细胞作为信号的发送者,发出信号的概率之和;
in-degree:细胞作为信号的接收者,接收信号的概率之和。
3. 确认介导细胞交流的配体-受体
CellChat可展示不同细胞组通讯过程中显著的配体-受体。下图中表示信号发送者Inflam.FIB和信号接收者cDC1, cDC2, LC, Inflam. DC, TC , Inflam. TC, CD40LG+TC通讯时显著的配体-受体。点的颜色和大小分别表示配体-受体对介导细胞通讯的可能性和及该可能性对应的p-value,空意味着在该数据集中,对应的配体-受体不介导该细胞通讯。
4. 分组信号通路
为了以更有生物学意义的方式进一步分析细胞间通讯,配体-受体对被归入功能相关的信号通路。CellChat能够量化所有显著信号通路之间的相似性,根据其细胞通讯网络的相似性对它们进行分组,如下图将所有的信号通路降维后展示在二维图上,点的颜色和大小分别表示信号通路的分组及该信号通路代表的通讯的可能性。
5. 预测细胞间协调反应
CellChat可利用模式识别预测细胞间的协调反应。这种分析的输出是一组所谓的通讯模式(communication pattern),它将细胞组与信号通路连接起来。
下图中,cell groups和signaling分别表示细胞组和信号通路,流动的厚度表示细胞组或信号通路对每个通讯模式的贡献。a图表示传出模式(outgoing patterns)下,细胞作为信号发送者如何相互协调,以及它们如何与某些信号通路协调以驱动通信。
例如本次模式识别揭示了细胞组cDC1, cDC2, LC, Inflam. DC与同属于pattern1的信号通路GALECTIN,GAS, VEGF协调向外发送信号。b图表示传入模式(incoming patterns)下,细胞作为信号接收者如何相互协调,以及它们如何与某些信号通路协调以响应传入的信号。
但是,这个工具仍然有一个局限。
1. 目前的配体-受体数据库只包含小鼠和人类,因此该工具适用于小鼠和人;
2. 细胞分组是使用CellChat的前提条件,在进行细胞通讯分析之前,需要仔细进行细胞聚类,以捕捉有生物学意义的细胞组;
3. 计算过表达基因花费时间较长,可根据资源设置线程数进行时间控制;
4. 模式识别中,pattern的个数由自己定义,尽管CellChat会给出一些图帮助确定该值,但仍需注意设置不同数量的pattern会得到不同分辨率的结果。
===CellChat使用测试====
library(CellChat)
library(ggplot2)
library(ggalluvial)
library(svglite)
library(Seurat)
library(SeuratData)
options(stringsAsFactors = FALSE)
测试使用的是pbmc3k.final数据集,大部分的计算已经存在其对象中了。具体的计算和分析可以查看官网的分析流程。
按照我们刚才说的,我们在Seurat对象中提出CellChat需要的数据:
创建一个cellchat的对象
pbmc3k.final <- readRDS("pbmc3k_final.rds")
data.input <- GetAssayData(pbmc3k.final, assay = "RNA", slot = "data")
labels <- Idents(pbmc3k.final)
identity <- data.frame(group = labels, row.names = names(labels)) # create a dataframe of the cell labels
cellchat <- createCellChat(object = data.input)
cellchat <- addMeta(cellchat, meta = identity, meta.name = "labels")
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
导入配体-受体数据库
CellChatDB <- CellChatDB.human
colnames(CellChatDB$interaction)
CellChatDB$interaction[1:4,1:4]
CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling") # use Secreted Signaling for cell-cell communication analysis
cellchat@DB <- CellChatDB.use # set the used database in the object
unique(CellChatDB$interaction$annotation)
//所以我们当然也可以选择其它类别
预处理
//对表达数据进行预处理,用于细胞间的通信分析。首先在一个细胞组中识别过表达的配体或受体,然后将基因表达数据投射到蛋白-蛋白相互作用(PPI)网络上。如果配体或受体过表达,则识别过表达配体和受体之间的相互作用。
cellchat <- subsetData(cellchat) # subset the expression data of signaling genes for saving computation cost
future::plan("multiprocess", workers = 4)
cellchat <- identifyOverExpressedGenes(cellchat)
cellchat <- identifyOverExpressedInteractions(cellchat)
cellchat <- projectData(cellchat, PPI.human)
相互作用推断
environment(mycomputeCommunProb) <- environment(computeCommunProb)
cellchat <- mycomputeCommunProb(cellchat)
推测细胞间在信号通路水平上的通讯。我们还通过计算与每个信号通路相关的所有配体-受体相互作用的通信概率来推断信号通路水平上的通信概率。
注:推测的每个配体-受体对的细胞间通信网络和每个信号通路分别存储在“net”和“netP”槽中。
我们可以通过计算链路的数量或汇总通信概率来计算细胞间的聚合通信网络。
cellchat <- computeCommunProbPathway(cellchat)
cellchat <- aggregateNet(cellchat)
cellchat@netP$pathways
head(cellchat@LR$LRsig)
可视化
通过结合社会网络分析、模式识别和多种学习方法的综合方法,CellChat可以定量地描述和比较推断出的细胞-细胞通信网络。
你可以使用层次图或圈图可视化每个信号通路。如果使用层次图可视化通信网络,请定义vertex.receiver,它是一个数字向量,给出作为第一个层次结构图中的目标的细胞组的索引。我们可以使用netVisual_aggregate来可视化信号路径的推断通信网络,并使用netVisual_individual来可视化与该信号路径相关的单个L-R对的通信网络。
在层次图中,实体圆和空心圆分别表示源和目标。圆的大小与每个细胞组的细胞数成比例。边缘颜色与信源一致。线越粗,信号越强。这里我们展示了一个MIF信号网络的例子。所有显示重要通信的信令路径都可以通过cellchat@netP$pathways访问。
cellchat@netP$pathways
levels(cellchat@idents)
vertex.receiver = seq(1,4) # a numeric vector
pathways.show <- "MIF"
netVisual_aggregate(cellchat, signaling = pathways.show, vertex.receiver = vertex.receiver, vertex.size = groupSize)
下图就是经典的受体-配体圈图
//计算和可视化每个配体-受体对整个信号通路的贡献度。
netAnalysis_contribution(cellchat, signaling = pathways.show)
为了便于解释复杂的细胞间通信网络,CellChat通过从图论、模式识别和流形学习中抽象出来的方法对网络进行定量测量。
它可以利用网络分析中的中心性度量确定给定信号网络中的主要信令源和目标,以及中介和影响者;它可以预测特定细胞类型的关键输入和输出信号,并利用模式识别方法协调不同细胞类型之间的反应(这个预测有点迷);它可以通过定义相似性度量来分组信号通路,并从功能和拓扑的角度进行manifold learning;它可以通过多个网络的联合流形学习来描述保守的和context-specific的信号通路。
确定signaling角色(例如,主要的发送者,接收者)以及主要的贡献singnaling
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空间中可视化主要的发送者(源)和接收者(目标)。
netAnalysis_signalingRole_scatter(cellchat)
识别对某些细胞群的传出或传入信号贡献最大的信号
ht1 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "outgoing")
ht2 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "incoming")
ht1 + ht2
识别特定细胞群的全局通信模式和主要信号。除了探索单个通路的详细通讯外,一个重要的问题是多个细胞群和信号通路如何协调运作。CellChat采用模式识别方法来识别全局通信模式以及每个小群的关键信号。
识别分泌细胞外向交流模式。随着模式数量的增加,可能会出现冗余的模式,使得解释通信模式变得困难。我们选择了4种模式作为默认模式。一般来说,当模式的数量大于2时就可以认为具有生物学意义。
nPatterns = 4
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "outgoing", k = nPatterns)
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "incoming", k = nPatterns)
netAnalysis_river(cellchat, pattern = "outgoing")
netAnalysis_dot(cellchat, pattern = "outgoing")
netAnalysis_river(cellchat, pattern = "incoming")
netAnalysis_dot(cellchat, pattern = "incoming")
本文使用 文章同步助手 同步