CellChat通过从图论、模式识别和流形学习中抽象出来的方法对网络进行定量测量。
它可以使用网络分析中的中心性度量来确定给定信号网络中的主要信号源和目标以及中介和影响者。
它可以利用模式识别方法预测特定细胞类型的关键输入和输出信号以及不同细胞类型之间的协调反应。
它可以通过定义相似性度量和从功能和拓扑角度进行多种学习来分组信号通路。
它可以通过多个网络的联合流形学习来描述保守的和上下文特定的信号通路。
一、识别细胞群的信号作用(例如,主要的发送者,接受者)以及主要的信号作用
(A)计算并可视化网络中心性得分
ptm = Sys.time()
# 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)
netAnalysis_computeCentrality
函数:这是CellChat
包中的一个函数,其作用是计算细胞间通讯网络的中心性得分。中心性得分可以帮助我们了解每个细胞群体在整个通讯网络中的重要程度,常见的中心性指标包括度中心性(degree centrality)、接近中心性(closeness centrality)和中介中心性(betweenness centrality)等。slot.name = "netP"
:slot.name
参数指定要使用的CellChat
对象中的槽位。"netP"
表示使用推断出的信号通路的细胞间通讯网络数据来计算中心性得分。这行代码将计算得到的中心性得分更新到cellchat
对象中,并将更新后的cellchat
对象重新赋值给cellchat
变量。
netAnalysis_signalingRole_network
函数:这也是CellChat
包中的函数,用于将计算得到的中心性得分通过热图进行可视化。热图可以直观地展示不同细胞群体在特定信号通路中的信号传导角色,颜色的深浅通常表示中心性得分的高低。signaling = pathways.show
:指定要可视化的信号通路,pathways.show
应该是之前定义的一个包含要展示的信号通路名称的向量。width = 8
和height = 2.5
:分别指定热图的宽度和高度,单位通常为英寸(inches)。font.size = 10
:指定热图中字体的大小,以控制标签和文本的显示效果
(B)在二维空间中可视化占优势的发送者(源)和接收者(目标)
# 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
netAnalysis_signalingRole_scatter
函数:该函数用于对细胞间通讯网络进行信号传导角色分析,并将结果以散点图的形式呈现。gg1
:将函数返回的散点图对象赋值给gg1
。这行代码执行的是对所有信号通路聚合后的细胞间通讯网络进行信号传导角色分析,并生成对应的散点图signaling = c("CXCL", "CCL")
:指定要分析的信号通路为"CXCL"
和"CCL"
。这意味着函数将只对这两条信号通路的细胞间通讯网络进行信号传导角色分析。gg2
:将函数返回的散点图对象赋值给gg2
。
(C)识别对某些细胞群的输出或输入信号贡献最大的信号
# 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
ht1 + ht2
尝试合并ht1
和ht2
两个热图。若热图基于ggplot2
构建,通常可通过+
组合图层;若基于ComplexHeatmap
等其他绘图系统,直接+
不一定能实现合并,可能需用对应系统的合并函数,如ComplexHeatmap
里的draw
等函数配合设置来实现。
二、确定Global通信模式,探索多种细胞类型和信号通路如何协调在一起
(A) 确定并可视化分泌细胞的 outgoing 通讯模式
library(NMF)
#> Loading required package: registry
#> Loading required package: rngtools
#> Loading required package: cluster
#> NMF - BioConductor layer [OK] | Shared memory capabilities [NO: bigmemory] | Cores 2/2
#> To enable shared memory capabilities, try: install.extras('
#> NMF
#> ')
#>
#> Attaching package: 'NMF'
#> The following objects are masked from 'package:igraph':
#>
#> algorithm, compare
library(ggalluvial)
-
- 这行代码尝试加载
NMF
包。NMF
包主要用于非负矩阵分解(Non - negative Matrix Factorization)相关的分析,在生物信息学等领域常用于处理基因表达数据等。加载该包时,出现了一些提示信息:Loading required package: registry
等提示表明NMF
包依赖于其他包,如registry
、rngtools
、cluster
,系统会自动加载这些依赖包。NMF - BioConductor layer [OK] | Shared memory capabilities [NO: bigmemory] | Cores 2/2
等信息显示了NMF
包的一些配置情况,如 BioConductor 层已成功加载,但共享内存功能因缺少bigmemory
包而不可用,同时显示了当前使用的核心数。还给出了启用共享内存功能的建议install.extras('NMF')
。Attaching package: 'NMF'
表示NMF
包已成功加载,随后提示The following objects are masked from 'package:igraph': algorithm, compare
,说明NMF
包中的algorithm
和compare
函数会覆盖igraph
包中同名函数。
- 这行代码尝试加载
library(ggalluvial)
- 这行代码用于加载
ggalluvial
包。ggalluvial
包基于ggplot2
,主要用于绘制冲积图(alluvial plots),常用于展示数据在不同类别间的流动和分布情况,比如在生物信息学中展示不同样本在不同基因集或功能类别间的分布。
- 这行代码用于加载
selectK(cellchat, pattern = "outgoing")
nPatterns = 6
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "outgoing", k = nPatterns)
- 当传出模式的数量为 6 时,Cophenetic 和 Silhouette 值都开始突然下降。
- 定义一个变量
nPatterns
并将其赋值为6
。这个变量代表了后续要识别的细胞通讯模式的数量,即代码将尝试把细胞的传出信号模式划分为 6 种不同的模式。
identifyCommunicationPatterns
函数:这是CellChat
包中的一个关键函数,用于识别细胞间通讯的模式。cellchat
:是一个CellChat
对象,其中包含了细胞间通讯分析的所有结果,如细胞类型、信号通路强度、配体 - 受体对信息等。pattern = "outgoing"
:指定要分析的信号模式为传出信号模式。这意味着函数将聚焦于细胞作为信号发送者的情况,分析细胞如何向外发送信号以及形成的不同模式。k = nPatterns
:指定要识别的通讯模式的数量,这里使用之前定义的nPatterns
变量,即 6 种模式。- 函数执行完毕后,会将识别出的通讯模式信息更新到
cellchat
对象中,并将更新后的cellchat
对象重新赋值给cellchat
变量。
# 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")
(B) 识别并可视化目标细胞的传入通信模式
selectK(cellchat, pattern = "incoming")
nPatterns = 3
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 能够量化所有显著信号通路之间的相似性,并基于细胞通讯网络相似性对它们进行分组,分组方式分为基于功能相似性和结构相似性。
高度的功能相似性表明主要的信号发送者和接收者相似,意味着两个信号通路或两个配体 - 受体对发挥相似和 / 或冗余的作用。先使用computeNetSimilarity(cellchat, type = "functional")
计算功能相似性,接着netEmbedding(cellchat, type = "functional")
对信号网络进行流形学习,netClustering(cellchat, type = "functional")
进行分类学习,最后利用netVisual_embedding(cellchat, type = "functional", label.size = 3.5)
在二维空间进行可视化,还可选择使用netVisual_embeddingZoomIn(cellchat, type = "functional", nCol = 2)
进行更细致的可视化。
结构相似性用于比较信号网络结构,不考虑信号发送者和接收者的相似性。通过computeNetSimilarity(cellchat, type = "structural")
计算结构相似性,再依次使用netEmbedding(cellchat, type = "structural")
和netClustering(cellchat, type = "structural")
进行流形学习和分类学习,可视化使用netVisual_embedding(cellchat, type = "structural", label.size = 3.5)
,netVisual_embeddingZoomIn(cellchat, type = "structural", nCol = 2)
可用于进一步放大可视化。
Part V & VI
saveRDS(cellchat, file = "cellchat_humanSkin_LS.rds")
这行代码将名为 cellchat
的 CellChat 对象保存为一个 RDS 文件,文件名为 cellchat_humanSkin_LS.rds
。RDS 文件是 R 语言用于存储和读取对象的一种格式,这样可以方便后续重新加载该对象进行分析,而无需重新运行整个分析流程。
runCellChatApp(cellchat)
这行代码用于启动一个交互式的 CellChat 应用程序,通过这个程序可以更直观地探索单细胞转录组数据中的细胞 - 细胞通讯。不过需要注意的是,为了在这个应用程序中生成信号基因的特征图,要求 cellchat
对象的 @dr
中包含数据的低维空间,如 “umap” 和 “tsne” 。如果没有这些低维空间,可以使用 addReduction
函数添加。
essionInfo()
这行代码用于查看当前 R 会话的信息,包括 R 版本、运行平台、操作系统、矩阵计算相关的库、已加载的基础包和其他包,以及加载的命名空间等信息。