一看就会的scRNA-seq细胞通讯分析,用CellChat揭示细胞间的加密通话






一看就会的scRNA-seq细胞通讯分析,用CellChat揭示细胞间的加密通话

小果  生信果  2023-12-04 19:00:22

亲爱的果粉儿们,小果又来和大家分享新知识啦!今天我要告诉大家的是,细胞之间并不是孤立存在的,他们其实是通过一种神秘的方式——细胞通讯,来进行信息的传递。而小果今天要讲的CellChat,就是那把可以解密这种通讯的神奇钥匙!接下来,就让小果带大家一起破解他们的加密通话吧。
CellChat,你是谁?
CellChat是一个基于R编写的工具包,它能帮助我们分析并可视化单细胞数据(scRNA-seq)中的细胞间通讯,定量推断和分析细胞间通讯网络。CellChat使用网络分析和模式识别方法预测细胞的主要信号输入和输出,以及这些细胞和信号如何协调功能。通过流形学习和定量对比,CellChat对信号通路进行分类,并描绘出不同数据集中的保守通路和上下文特定通路。用它,我们就可以揭示那些看似无关的细胞,实际上是如何密切沟通的。这个工具最早发表在Nature Communications(https://www.nature.com/articles/s41467-021-21246-9)上,感兴趣的伙伴可以先睹为快。
作者除了开发了可在R环境中使用的工具包,还构建了一个配体,受体及其辅因子之间相互作用的数据库CellChatDB,这些相互作用准确地代表了已知的异构体分子复合物。同时我们还可以在网页(http://www.cellchat.org)上查看已被作者分析过的细胞间通讯网络。    
尽管市面上存在许多的细胞通讯工具,但无一例外都被作者Diss,独爱CellChat,该工具到底有多牛,咱们拉出来练一练。
CellChat,实战演练
#加载工具包library(CellChat)library(patchwork)options(stringsAsFactors = FALSE)
# 第一部分:CellChat的输入数据准备
# CellChat需要两个输入文件:一个是标准化的基因表达矩阵,而另一个是细胞分组信息。#这里我们下载并载入官方提供的示例文件#包含正常(NL)和疾病(LS)两种样本(https://ndownloader.figshare.com/files/25950872)    load("data_humanSkin_CellChat.rda")# 提取标准化矩阵data.input = data_humanSkin$data# 提取细胞分组信息,meta是一个数据框,包含示例数据中细胞类型、批次、样本等信息meta = data_humanSkin$meta #此处我们只提取疾病数据做后续分析cell.use = rownames(meta)[meta$condition == "LS"]# 准备CelChat分析的输入数据data.input = data.input[, cell.use]meta = meta[cell.use, ]#查看细胞类型标签unique(meta$labels)# 创建CellChat对象cellchat <- createCellChat(object = data.input, meta = meta, group.by = "labels")#给cellchat对象添加元数据 cellchat <- addMeta(cellchat, meta = meta)#设置"labels"作为默认的细胞标签cellchat <- setIdent(cellchat, ident.use = "labels")#显示有多少种细胞类型levels(cellchat@idents)     #查看每种细胞类型的细胞数groupSize <- as.numeric(table(cellchat@idents))# 设置配体-受体相互作用数据库,CellChatDB提供人类和鼠两个物种的数据库# 如果分析的是鼠类数据则设置CellChatDB.mouseCellChatDB <- CellChatDB.human #展示数据库中具体信息,人类CellChatDB包含1,939个经过验证的分子相互作用,包括61.8%的旁分泌/自分泌信号相互作用,21.7%的细胞外基质(ECM)受体相互作用和16.5%的细胞-细胞接触相互作用。showDatabaseCategory(CellChatDB)
# 展示数据库结构dplyr::glimpse(CellChatDB$interaction)# 使用CellChatDB的子集进行细胞-细胞通讯分析CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling")# 在对象中设置我们要使用的数据库cellchat@DB <- CellChatDB.use#预处理细胞-细胞通讯分析的表达数据#使用subsetData函数,比对整个数据库,筛选出cellchat对象中有意义的基因和细胞,cellchat <- subsetData(cellchat)    #设置并行计算的模式和工作数,加快后续的分析速度,这里设置为多进程模式,指定了4个工作数。future::plan("multiprocess", workers = 4) #使用identifyOverExpressedGenes函数,识别cellchat对象中每个细胞类型中相对于其他细胞类型过表达的基因。cellchat <- identifyOverExpressedGenes(cellchat)#使用identifyOverExpressedInteractions函数,识别出cellchat对象中每个细胞类型中相对于其他细胞类型过表达的配体-受体对。cellchat <- identifyOverExpressedInteractions(cellchat)#将基因表达数据投射到PPI,这样做的目的是为了寻找那些可能参与细胞间通讯的蛋白质复合物。cellchat <- projectData(cellchat, PPI.human)
# 第二部分:细胞-细胞通信网络的推论
# computeCommunProb函数,计算cellchat对象中每对细胞类型之间的通讯概率。cellchat <- computeCommunProb(cellchat)#如果某些细胞类型中只有少量细胞,则过滤掉细胞间通信cellchat <- filterCommunication(cellchat, min.cells = 10)# computeCommunProbPathway函数,计算cellchat对象中每对细胞类型之间的通讯通路概率,通讯通路概率是指在给定的信号分子对下,一个细胞类型向另一个细胞类型发送信号的概率,同时考虑了信号分子对所属的通讯通路(communication pathway),通讯通路是指一组具有相同或者相似功能的信号分子对。cellchat <- computeCommunProbPathway(cellchat)# 计算聚合细胞-细胞通信网络cellchat <- aggregateNet(cellchat)# 我们还可以看到聚合的细胞-细胞通信网络。groupSize <- as.numeric(table(cellchat@idents))#将图形设备分为一行两列的布局,用来显示两个图形。设置xpd参数为TRUE,表示允许图形元素超出图形区域。par(mfrow = c(1,2), xpd=TRUE)#使用netVisual_circle函数,绘制cellchat对象中的net元素中的count和weight两个矩阵#的圆形网络图,count矩阵表示每对细胞类型之间的通讯信号对的数量,weight矩阵表示#每对细胞类型之间的通讯概率。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")
# 由于复杂的细胞-细胞通信网络,我们可以检查从每个细胞群发送的信号。这里我们还控制了参数,以便我们可以比较不同网络之间的边权重    mat <- cellchat@net$weightpar(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])}
# 第三部分:细胞-细胞通信网络的可视化
# CellChat提供了几种可视化细胞-细胞通信网络的方法,包括圆图、弦图、热图和气泡图等。# 这里我们以一个信号通路CXCL为例。pathways.show <- c("CXCL") # 圆图par(mfrow=c(1,1))netVisual_aggregate(cellchat, signaling = pathways.show, layout = "circle")
# 弦图
par(mfrow=c(1,1))netVisual_aggregate(cellchat, signaling = pathways.show, layout = "chord")
# 热图
par(mfrow=c(1,1))netVisual_heatmap(cellchat, signaling = pathways.show, color.heatmap = "Reds")


还有更多类型的可视化方法,可参考链接:https://htmlpreview.github.io/?https://github.com/sqjin/CellChat/blob/master/tutorial/CellChat-vignette.html#part-i-data-input-processing-and-initialization-of-cellchat-object
结语
通过本教程,我们学会了使用CellChat这个令人兴奋的单细胞分析软件,揭示细胞间的加密通话。我们通过构建细胞通讯网络、分析细胞类型间的通讯、可视化通讯图谱以及探索通讯模块,深入了解了细胞间的信息传递。同时,也可以与其他工具的结合使用,拓展单细胞数据分析的可能性。
今天,小果就带大家探索到这里啦!希望你已经掌握了如何使用CellChat来揭示单细胞间的神秘通讯。如果有什么问题或者疑问,欢迎在评论区留言,小果一定有问必答。如果你觉得今天的内容有用,别忘了点赞和分享哦,这是对小果的最大支持!我们下次再见!

往期推荐

1.搭建生信分析流水线,如工厂一样24小时运转Snakemake——进阶命令
2.比blast还优秀的序列比对工具?HMMER来了
3.对单细胞分析毫无头绪?让popsicleR领你入门
4.小果带你绘制ROC曲线评估生存预测能力
5.软件包安装、打怪快又好,1024G存储的生信服务器;还有比这更省钱的嘛!!!