细胞在悄悄“聊天“?用 CellChat 快速破解单细胞通讯网络的完整指南
细胞在悄悄聊天用 CellChat 快速破解单细胞通讯网络的完整指南【免费下载链接】CellChatR toolkit for inference, visualization and analysis of cell-cell communication from single-cell data项目地址: https://gitcode.com/gh_mirrors/ce/CellChat把单细胞测序跑完、聚类图画出来往往只完成了第一个问题——有哪些细胞紧接着更棘手的问题是这些细胞之间如何相互影响CellChat 正是用于从单细胞数据推断、可视化与分析细胞间通讯的 R 工具包它把你的表达矩阵变成一张张谁在给谁发信号的通讯网络图帮你从聚类结果再往前迈一步。一个让所有单细胞研究者都沉默的问题想象这样一个场景你花了两周跑完 Seurat 的标准流程UMAP 图上十几个细胞群整整齐齐你甚至给每个 cluster 都起了名字——巨噬细胞、成纤维细胞、T 细胞、内皮细胞……这时导师走过来问了一句这些细胞之间是怎么互相影响的谁在给谁发信号你盯着聚类图沉默了。这不是你的问题而是单细胞数据分析里最普遍的真实困境。聚类能回答有哪些细胞但细胞与细胞之间的对话——谁分泌配体、谁表达受体、信号沿着什么通路流动——藏在海量表达矩阵里肉眼根本看不出来。人工去翻文献逐对验证几万行数据根本翻不完。CellChat 就是为回答这个问题而生的。它由华盛顿大学团队开发自 2021 年发表在 Nature Communications 之后已经成为单细胞通讯分析领域绕不开的经典工具被大量肿瘤微环境、发育生物学、免疫学论文引用。这个工具到底解决什么问题、适合谁先别被通讯推断这个名词吓到。CellChat 的定位非常清楚输入你已经分好群的单细胞数据输出细胞之间的通讯网络和一堆能放进论文的图。它适合的场景很典型你已经用 Seurat 或 SingleCellExperiment 完成了聚类想知道不同细胞类型之间的信号关系你想找某个通路比如 CXCL、TGFb到底由谁发出、被谁接收你想比较正常组和疾病组之间哪些通讯被增强、哪些被削弱你拿到了空间转录组数据比如 10X Visium想看细胞在空间距离内的局部通讯。它的底层逻辑可以浓缩成一句话把配体—受体的已知规则和你的表达数据结合起来用质量作用定律算出每条通讯的概率再用置换检验筛出显著的那些。说白了就是用先验知识当字典把数据翻译成通讯事件。上面这张官方全景图展示了 CellChat 的完整链路先有人工整理的配体-受体数据库再基于质量作用定律建模推断通讯概率随后输出层级图、圆环图、弦图、热图、气泡图等可视化结果最后还能做网络中心性、通讯模式识别和跨条件比较等深度分析。后面我们会把这四步逐个拆开讲。三步完成环境配置并跑通第一个示例CellChat 是一个正经的 R 包安装并不复杂但依赖较多dplyr、igraph、ggplot2、circlize、ComplexHeatmap、NMF 等都在其中需要 R 3.6.0 及以上版本。第一步获取代码并安装仓库代码可以通过 git 直接克隆到本地git clone https://gitcode.com/gh_mirrors/ce/CellChat然后在 R 里用 devtools 从本地目录安装devtools::install_local(CellChat, build_vignettes TRUE)如果你更习惯传统方式也可以在克隆目录下运行R CMD INSTALL .。安装完成后用library(CellChat)验证即可。第二步准备好两样输入CellChat 需要的输入非常朴素表达矩阵基因在行、细胞在列并且必须是归一化并 log 变换后的数据如果只有原始 count可以用包内的normalizeData先处理细胞分组信息一个以细胞名为行名的数据框里面至少有一列是细胞类型标签。如果你手里的对象已经是 Seurat 或 SingleCellExperiment更省事——直接传对象进去再指定group.by参数即可。library(CellChat) # 方式一从矩阵 meta 创建 cellchat - createCellChat(object data.input, meta meta, group.by labels) # 方式二直接从 Seurat 对象创建 cellchat - createCellChat(object seurat_obj, group.by ident)第三步跑通核心推断流水线创建好对象后把配体-受体数据库挂上去然后依次执行以下几步整条流水线不超过 10 行代码# 1. 选择物种对应的数据库人 / 小鼠 / 斑马鱼 CellChatDB - CellChatDB.human cellchatDB - CellChatDB # 2. 预处理只保留信号相关基因识别过表达配体受体 cellchat - subsetData(cellchat) cellchat - identifyOverExpressedGenes(cellchat) cellchat - identifyOverExpressedInteractions(cellchat) # 3. 推断算通讯概率 - 过滤 - 通路层汇总 - 网络聚合 cellchat - computeCommunProb(cellchat) cellchat - filterCommunication(cellchat, min.cells 10) cellchat - computeCommunProbPathway(cellchat) cellchat - aggregateNet(cellchat) # 4. 画图圆环图展示细胞群之间的通讯强度和数量 netVisual_circle(cellchatnet$count)到这里你已经完成了从数据到通讯网络的第一次跑通。如果一切顺利一张漂亮的细胞通讯网络图就会出现在绘图窗口里——恭喜你离细胞在聊什么的答案只差一次解读了。核心原理拆解把细胞通讯想象成一场微信聊天光会跑代码还不够理解原理才能选对参数。这里用一个生活化的类比帮你建立直觉。把细胞通讯想象成一场热闹的微信群聊配体Ligand是发送方发出去的消息内容受体Receptor是接收方手机上的接收器只有装了对的接收器消息才被读到共因子Cofactor是帮消息送达的信号增强器比如让信号更强或更弱的调节分子信号通路Pathway就是群聊里围绕某个话题展开的一整串对话。而CellChatDB 相当于提前整理好的通讯录词典它告诉你哪些基因组合起来能构成一次有效通话很多配体受体是复合物比如异二聚体需要两个亚基都表达才行、哪些辅助分子参与其中、这条通讯属于哪个信号通路。有了这本词典CellChat 再结合你的表达数据就能回答这个群里谁在说话、说给谁听、音量多大、是否真的被听到了。需要特别说明的是CellChatDB 不是自动抓取的数据库而是人工从文献和 KEGG 等来源逐条整理、校验的。以小鼠数据库为例它收录了 2021 条经过验证的分子互作其中约六成是分泌型自分泌/旁分泌信号两成是细胞外基质-受体互作近两成是细胞接触型互作人类数据库收录约 1939 条。这种人工把关保证了后续推断的词典质量这也是很多论文愿意引用它的原因。三层翻译从分子、通路到网络快速定位关键信号跑通流水线只是开始CellChat 真正强大的地方在于它把结果分成了三个层次你可以在不同粒度上审视同一个问题层级对应函数存储位置一句话解释分子层computeCommunProbnet每条配体-受体边上的通讯概率最细粒度通路层computeCommunProbPathwaynetP把同一条通路的所有 L-R 概率汇总看通路整体强弱网络层aggregateNetnet$count/net$weight全细胞群之间的通讯边数矩阵和强度矩阵俯瞰全局想快速拿到哪两个细胞群之间有通讯、强度多大的表格用subsetCommunication一行就能导出数据框想看某个通路比如 CXCL用netVisual_aggregate可以一键切换层级图、圆环图、弦图、热图四种画法想追究到某个具体的配体-受体对就用netVisual_individual。可视化函数看着多其实都是同一套数据换画法函数图型什么时候用netVisual_aggregate层级/圆环/弦/热图整体看一条通路netVisual_individual同左细看单个 L-R 对netVisual_bubble气泡图横比多个 L-R 对netVisual_chord_gene弦图多通路/多基因的复杂关系netAnalysis_contribution柱状图看每个 L-R 对在通路中的贡献占比进阶玩法四个少有人知的深度分析姿势基础流程跑通后如果你还想再挖深一层下面这几个功能才是 CellChat 的真正宝藏。1. 网络中心性分析找出真正的话痨和听众。netAnalysis_computeCentrality会为每个细胞群计算出度、入度、流介数、信息中心性等指标分别对应信号的主导发送者、接收者、中介者和影响者。配合netAnalysis_signalingRole_heatmap出热图一眼就能看出谁在指挥、谁在响应。2. 全局通讯模式识别用 NMF 找出群聊分组。单个通路看多了容易只见树木不见森林。identifyCommunicationPatterns基于 NMF 分解出若干种通讯模式再用selectK帮你选模式数量最后用netAnalysis_river河流图和netAnalysis_dot展示哪些细胞群和哪些通路在协同作战。3. 通路相似性聚类看哪些通路在功能上冗余。computeNetSimilarity支持 functional 和 structural 两种相似度配合netEmbedding、netClustering可以把 20 多条信号通路降维聚类帮你发现功能高度相似、可能冗余的通路组。4. 多数据集比较两个条件差异在哪一目了然。用mergeCellChat合并不同条件下的 CellChat 对象后netVisual_diffInteraction直接画出通讯差异网络rankNet对比通路强度排名netAnalysis_signalingChanges_scatter定位具体某个细胞群的信号变化。这套组合拳是发比较类论文的利器。另外还有一个容易被忽略的冷门技巧如果你只想关注某几个细胞群用subsetCellChat切出子集再分析速度会快很多想验证某个基因在每个细胞群里的平均表达computeAveExpr可以帮你盯住信号基因的表达水平如果测序深度浅、dropout 严重projectData(cellchat, PPI.human)可以把表达量投影到蛋白互作网络上做平滑再用raw.use FALSE的computeCommunProb重算常常能救回一批被淹没的弱信号。新手最容易踩的 5 个坑作为老用户下面这几个坑几乎人人都踩过提前知道能帮你省下大半天。1. 基因名格式不统一。人、鼠基因名大小写规则完全不同物种选错数据库或者基因名格式不一致会导致通讯结果大面积为空。先用checkGeneSymbol校验一下数据里的基因名能否在数据库里对上。2. 把 count 数据直接喂进去。CellChat 要求归一化 log 变换后的数据。如果强行用原始 count概率估计会明显失真。分不清的话先用normalizeData处理一遍最稳妥。3. 平均表达方法选错通路静音。computeCommunProb默认用 triMean 这种稳健均值结果更保守但可能漏掉一些真实存在的弱通路。如果你明明知道某个通路很重要却算不出来试试type truncatedMean, trim 0.1。4. 忽略细胞数很少的组别。某个细胞群只有几个细胞时算出来的通讯概率噪声很大。filterCommunication(cellchat, min.cells 10)这步别省。5. 加载旧版本对象直接报错。1.6.0 之后对象结构重新设计过如果你手里是旧版本存下来的.rds记得先跑一次updateCellChat。生态、版本与社区现状CellChat 目前仓库内版本为 1.6.1采用 GPL-3 开源协议。它的版本迭代脉络很清晰1.0 版本对应 2021 年 Nature Communications 的正式发表1.4 加入了富集分数计算和条形图1.6 版本是一个重要里程碑——正式支持空间转录组数据新增netVisual_spatial和computeRegionDistance可以把通讯限制在分子的实际扩散距离内适用于 10X Visium 等平台的数据。这里要如实提醒你一点作者团队已经把 CellChat 升级到了v2并在新仓库中继续维护和开发v2 的完整协议见 2023 年的预印本重点是空间解析转录组方向当前这个仓库作为 v1 时代的代码镜像保留不会再有新功能更新。换句话说如果你追求稳定复现经典流程用这个仓库的 v1 足够如果想要最新功能建议关注 v2。项目的tutorial/目录是真正的宝藏里面躺着 7 份可以直接跑通的教程基础的CellChat-vignette.Rmd、空间成像数据分析、多数据集比较包括细胞组成不同时的比较、与其他单细胞分析工具的对接、以及如何自定义更新 CellChatDB。如果你想把自己发现的配体-受体对加进数据库跟着Update-CellChatDB.Rmd走一遍就能学会。写在最后让数据开口说话回到开头的场景。同样是细胞之间如何互相影响这个问题有了 CellChat你不再需要盯着 UMAP 图干瞪眼。十几行代码之后你能清楚地告诉导师哪群细胞是信号源、哪群是接收者、哪个通路在暗中主导甚至还能指出疾病组里哪条通讯被异常放大。这就是这类工具的价值——它把一张静态的细胞类型地图升级成一张动态的细胞社交网络。而你要做的只是迈出第一步。现在就去实践吧克隆仓库git clone https://gitcode.com/gh_mirrors/ce/CellChat先把tutorial/CellChat-vignette.Rmd完整跑通一遍然后换成你自己的数据试一次。等第一张通讯网络图出现在屏幕上你会理解为什么那么多论文都选择了它。【免费下载链接】CellChatR toolkit for inference, visualization and analysis of cell-cell communication from single-cell data项目地址: https://gitcode.com/gh_mirrors/ce/CellChat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考