单细胞转录组细胞间通信分析:LIANA框架原理与实战指南 1. 从“单细胞”到“对话”为什么我们需要细胞间通信分析如果你最近在单细胞转录组数据分析的圈子里待过哪怕只是浅浅地涉猎也一定对“细胞类型注释”、“差异表达分析”、“轨迹推断”这些名词耳熟能详。我们花了大量的精力去理解单个细胞内部在发生什么比如哪个基因在哪个细胞里高表达从而把它归类为T细胞、巨噬细胞还是成纤维细胞。这就像在一个人声鼎沸的鸡尾酒会上我们通过每个人手里的酒杯基因表达和穿的衣服表面标记物成功地把宾客分成了“穿西装的投资银行家”、“穿格子衫的程序员”和“穿长裙的艺术家”几大类。分完类之后呢这场派对就结束了吗显然不是。这场派对的精髓在于人与人之间的交谈、握手、交换名片和窃窃私语。同样在多细胞生物体内生命的维持和功能的执行绝非单个细胞类型的“独奏”而是由无数细胞通过精密的分子“语言”进行持续“对话”所构成的宏大“交响乐”。这种对话就是细胞间通信。细胞间通信的核心媒介是配体-受体对。想象一下一个细胞发送者分泌出一种信号分子配体比如一个细胞因子这个配体像一把钥匙漂洋过海精准地插入另一个细胞接收者表面特定的“锁孔”受体里。钥匙转动锁孔内部的信号通路被激活从而改变接收者细胞的行为——它可能开始增殖、迁移、分化或者分泌其他信号。这就是细胞间通信的基本剧本。那么单细胞RNA测序技术为我们提供了什么它给了我们一份近乎完整的“宾客名单”细胞身份和每个人“正在说的话”的转录本记录基因表达矩阵。理论上我们可以从中挖掘出谁哪种细胞类型可能正在对谁另一种细胞类型“说话”以及他们可能用什么“暗语”配体-受体对在交流。这就是细胞间通信分析要干的事。然而这件事的难度远超想象。首先配体和受体的组合浩如烟海数据库里收录的就有数千对。其次单细胞数据本身是静态的“快照”我们无法直接观测到配体从A细胞分泌、运输、并激活B细胞受体的动态过程只能基于共表达即A细胞高表达配体X同时B细胞高表达受体Y进行统计推断。这带来了巨大的噪音和假阳性风险。最后不同的推断算法基于不同的统计学或网络理论假设得出的结果可能大相径庭。于是在2022年一个旨在解决这些痛点的框架横空出世它就是LIANALIgand-receptor ANalysis frAmework。它不是又一个全新的算法而是一个“元框架”。你可以把它理解为一个高度标准化、模块化的“通信分析工作台”。它统一了数据输入格式集成了超过10种主流通信推断方法如CellPhoneDB、CellChat、NicheNet等并提供了一个共识打分系统让你可以像在会议室里听取多位专家的意见一样综合评判哪些细胞间对话是真正可靠的。在我自己的肿瘤微环境分析项目中从手动折腾各种算法的脚本到采用LIANA进行标准化分析效率的提升和结果的可信度是颠覆性的。这篇文章我就结合实战经验为你彻底拆解LIANA这个强大框架告诉你它如何工作以及如何用它从你的单细胞数据中挖掘出那些至关重要的细胞“悄悄话”。2. LIANA框架的核心架构统一接口与方法交响乐团初次接触LIANA你可能会被它官网和论文里那些复杂的方法论图示吓到。但拨开云雾它的核心设计思想其实非常清晰和优雅标准化输入、模块化方法、一致性输出。理解这个架构是高效使用它的关键。2.1 数据输入的“普通话”AnnData对象在单细胞分析的世界里数据格式的“巴别塔”问题一直存在。Scanpy用AnnDataSeurat用SeuratObject虽然之间有转换工具但总免不了磕磕绊绊。LIANA选择与Scanpy生态深度集成其所有方法的默认输入都是一个标准的anndata.AnnData对象。这个对象必须包含什么呢表达矩阵(adata.X): 通常是经过标准化如CPM, TPM和可能对数转换后的表达矩阵。细胞注释(adata.obs): 一个关键的列比如cell_type里面存储了每个细胞所属的类别如“CD8T细胞”、“肿瘤细胞”、“内皮细胞”。这是通信分析的基础因为LIANA需要知道是“谁”在和“谁”说话。基因标识(adata.var_names): 清晰的基因名。为什么选择AnnData因为它已经是Python单细胞分析Scanpy的事实标准承载了从原始数据到预处理、降维、聚类、注释的完整分析流程。LIANA直接接入这个流程意味着你可以无缝地将上游分析的结果喂给它无需复杂的数据转换保证了分析流程的连贯性。这比每个通信工具都要求各自独特的输入格式要友好得多。2.2 方法库的“武器架”从单一到共识这是LIANA最强大的部分。它没有重新发明轮子而是像一个 curator策展人把市面上主流的、经过验证的推断方法都请了进来并为它们提供了一个统一的调用接口。这些方法大致可以分为几类基于表达丰度的方法如CellPhoneDB、Connectome、log2FC。它们的基本思想很简单如果细胞类型A高表达配体L同时细胞类型B高表达受体R那么A-B通过L-R通信的可能性就高。它们通过不同的统计量如均值、中位数、特定分位数来量化这种“共表达”。基于统计检验的方法如SingleCellSignalR、CellChat其概率方法部分。它们不仅看表达量还考虑表达的分布通过置换检验等统计方法评估观察到的共表达模式是否显著高于随机背景。基于复杂模型/网络的方法如NicheNet、scMLnet。这类方法更为复杂它们会构建配体-靶基因调控网络不仅推断配体-受体相互作用还试图预测受体细胞下游的基因表达变化从而建立从发送者到接收者功能的因果链。在LIANA中你可以通过一行代码调用所有这些方法import liana as li # 使用所有默认方法运行 results li.multi.method(adata, groupbycell_type, use_rawFalse, ...)或者你也可以像点菜一样指定使用哪几种方法methods [cellphonedb, connectome, log2fc] results li.multi.method(adata, groupbycell_type, methodsmethods, ...)这种设计带来了巨大的灵活性。你可以先用所有方法快速扫描再根据生物学背景和计算资源聚焦到少数几个方法进行深入分析。2.3 输出的“标准化报表”从混乱到有序不同的方法输出格式千奇百怪。有的给你一个复杂的字典有的输出一个多层索引的DataFrame整理起来非常头疼。LIANA强制所有方法输出一个结构统一的pandas DataFrame。这个DataFrame的每一行代表一个潜在的细胞间通信事件通常包含以下核心列source: 发送者细胞类型。target: 接收者细胞类型。ligand: 配体基因名。receptor: 受体基因名可能是复合体如“Tgfb1_Tgfbr1_Tgfbr2”。method: 产生该评分的方法名称如‘cellphonedb’。score: 该方法给出的相互作用强度得分。magnitude或specificity: 一些方法提供的附加指标如相互作用的表达强度或特异性。所有方法的结果被垂直堆叠concat在这个统一的框架里。这意味着对于同一个配体-受体对在同一个细胞类型对A-B上的推断你可能会看到多行数据每一行来自一个不同的方法及其评分。这种整齐的格式为后续的整合与可视化扫清了障碍。2.4 共识的“投票机制”超越单一方法偏见单一方法的结果可能受其算法假设的局限而产生偏差。比如某个方法对低丰度表达非常敏感另一个方法则更关注高表达基因。LIANA引入了一个核心功能共识评分。它通过函数li.multi.aggregate实现。其逻辑是对于每个配体-受体对和细胞类型对综合所有指定方法给出的评分计算一个聚合得分如均值、中位数。更重要的是它可以计算一个“共识度”指标例如有多少比例的方法支持这个相互作用评分高于某个阈值。# 对多种方法的结果进行聚合 aggregated_results li.multi.aggregate(results, ...)这个聚合后的结果往往比依赖任何一个单一方法的结果都更稳健。在实际项目中我通常会先看共识度高的相互作用它们是最可靠的候选信号然后再去深挖不同方法间有分歧的案例这背后可能隐藏着有趣的生物学复杂性或方法学的边界。3. 实战演练使用LIANA解析肿瘤免疫微环境中的对话理论说得再多不如亲手跑一遍。假设我们有一个经过标准预处理质控、归一化、降维、聚类、注释的肿瘤单细胞数据集adata其中adata.obs[‘cell_type’]包含了诸如‘Malignant’恶性细胞、‘CD8_T’、‘Macrophage’、‘CAF’癌症相关成纤维细胞等注释。我们的目标是揭示肿瘤微环境中这些细胞类型之间发生了哪些关键的通信事件。3.1 环境准备与数据检查首先确保环境正确。LIANA可以通过pip安装它有一些依赖最好在Conda环境中管理。pip install liana-py导入库后第一件事是检查我们的AnnData对象是否“健康”尤其要关注用于分组的细胞类型注释。import scanpy as sc import liana as li import pandas as pd # 查看细胞类型分布 print(adata.obs[‘cell_type’].value_counts()) # 检查表达矩阵是否已标准化LIANA推荐使用对数归一化后的数据 # 通常我们使用 adata.layers[‘log1p’] 或者 adata.X (如果已经是log1p后的) # 如果还是原始计数需要标准化 if not ‘log1p’ in adata.layers: sc.pp.normalize_total(adata, target_sum1e4) sc.pp.log1p(adata) adata.layers[‘log1p’] adata.X.copy() # 将log1p后的数据存到layers注意很多通信推断方法对输入数据的分布敏感。使用原始计数未归一化会严重偏向高表达基因。通常推荐使用经过文库大小归一化如CPM/TPM并进行了对数转换如log1p的数据。adata.raw或特定的adata.layers是存放这类数据的好地方。3.2 运行多方法通信推断我们将使用一组经典且计算效率较高的方法进行第一轮分析。# 定义要使用的方法 selected_methods [‘cellphonedb’, ‘connectome’, ‘log2fc’, ‘natmi’] # 运行LIANA多方法分析 # 关键参数 # - groupby: 指定细胞类型注释的列名 # - use_raw: 是否使用 adata.raw。我们使用layers中的‘log1p’ # - layer: 指定使用哪个layer的数据 # - resource: 使用哪个配体-受体数据库默认为‘consensus’LIANA整合的共识库 # - expr_prop: 基因在细胞群中表达的最小比例阈值用于过滤低表达基因提高信噪比。 results li.multi.method(adata, groupby‘cell_type’, use_rawFalse, layer‘log1p’, methodsselected_methods, resource_name‘consensus’, expr_prop0.1, # 仅在至少10%的细胞中表达的基因才被考虑 verboseTrue)运行后results是一个长的DataFrame。我们可以先看一眼它的结构和大小。print(f“结果包含 {results.shape[0]} 行交互事件”) print(results.columns) print(results.head())3.3 结果聚合与共识筛选直接看十几万行的原始结果是没有意义的。我们需要聚合和筛选。# 对结果进行聚合默认使用各方法的‘score’列聚合函数为均值 aggregated_df li.multi.aggregate(results, how‘mean’, # 聚合函数均值 groupby[‘source’, ‘target’, ‘ligand’, ‘receptor’], ) # 聚合后DataFrame会多出几列最重要的是 ‘aggregate_rank’ # LIANA会根据聚合得分进行排序排名越小如123表示共识强度越高 aggregated_df aggregated_df.sort_values(‘aggregate_rank’) # 让我们看看共识度最高的前20个相互作用 top_interactions aggregated_df.head(20) print(top_interactions[[‘source’, ‘target’, ‘ligand’, ‘receptor’, ‘aggregate_rank’]])此时你可能会看到像‘Macrophage’ - ‘Malignant’: (MIF, CD74_CXCR4)这样的输出。这表示从巨噬细胞到恶性细胞通过MIF配体与CD74/CXCR4受体复合物的相互作用被多种方法一致认为是强烈的信号。3.4 可视化让对话关系一目了然LIANA内置了多种基于scanpy和matplotlib的可视化函数这是将数据转化为洞察的关键一步。3.4.1 细胞类型通信总览图import matplotlib.pyplot as plt # 绘制细胞类型之间的总体通信强度热图 # 这里我们需要先准备一个“汇总”的得分矩阵例如计算每对细胞类型间所有相互作用的平均得分 from liana.plotting import heatmap_plot # 我们可以用聚合后的数据计算source-target对的平均聚合得分 summary_df aggregated_df.groupby([‘source’, ‘target’])[‘aggregate_mean’].mean().reset_index() # 转换为矩阵形式 summary_pivot summary_df.pivot(index‘source’, columns‘target’, values‘aggregate_mean’) fig, ax plt.subplots(figsize(8, 6)) heatmap_plot(summary_pivot.fillna(0), axax, title‘Cell-Cell Communication Strength’) plt.show()这张热图能让你快速发现哪些细胞类型对之间存在着活跃的“社交网络”。例如你可能会发现巨噬细胞Macrophage和癌症相关成纤维细胞CAF是肿瘤微环境中的两个“社交中心”与多种细胞类型有强连接。3.4.2 特定信号通路的详细视图假设我们对肿瘤细胞相关的免疫抑制信号感兴趣比如PD-1/PD-L1通路。我们可以筛选出涉及CD274(PD-L1) 或PDCD1(PD-1) 的相互作用。# 筛选涉及特定基因的相互作用 pd1_interactions aggregated_df[ aggregated_df[‘ligand’].str.contains(‘CD274|PDCD1|PDCD1LG2’, caseFalse, naFalse) | aggregated_df[‘receptor’].str.contains(‘CD274|PDCD1|PDCD1LG2’, caseFalse, naFalse) ] # 使用点图可视化点的大小和颜色可以代表得分强度 from liana.plotting import dotplot_plot # 准备数据通常需要将数据转换为适合dotplot的格式 # 这里我们简化处理直接使用一个子集 fig, ax plt.subplots(figsize(10, 4)) dotplot_plot(pd1_interactions, x‘source’, # 发送者 y‘ligand_receptor’, # 可以是一个组合列 size‘aggregate_mean’, # 点的大小代表强度 color‘aggregate_mean’, # 点的颜色代表强度 axax) ax.set_title(‘PD-1/PD-L1 Related Interactions’) plt.xticks(rotation45) plt.tight_layout() plt.show()这张图可以清晰地展示是哪些细胞类型如恶性细胞、巨噬细胞在表达PD-L1配体哪些细胞类型如CD8T细胞在表达PD-1受体从而勾勒出免疫检查点信号的潜在空间分布。3.4.3 环形网络图Circos Plot对于展示多个配体-受体对构成的复杂网络环形图非常直观。LIANA可以通过circos_plot函数实现但它通常需要额外调整数据格式。更常见的做法是使用聚合后的数据利用networkx库和circlize在R中或pycircos在Python中进行自定义绘制。这里给出一个概念性步骤从aggregated_df中筛选出排名前N的相互作用。将每个细胞类型视为一个节点每个配体-受体介导的通信视为一条边。使用绘图库将节点排列在圆圈上用弧线连接相互作用的细胞类型对弧线的粗细或颜色代表相互作用的强度。这种图能极其优美地展示细胞间通信的整体格局是论文插图的常客。4. 避坑指南与高阶技巧来自实战的经验之谈使用LIANA的过程并非总是一帆风顺。以下是我在多个项目中总结出的关键注意事项和提升分析深度的技巧。4.1 数据预处理成败在此一举细胞类型注释的粒度这是最重要的决定之一。注释得太粗如只分“免疫细胞”、“基质细胞”会丢失大量有生物学意义的亚群间通信。注释得太细如CD8T细胞再细分为耗竭、记忆、效应等10个亚群则每个亚群的细胞数可能太少导致表达估计不准噪声增大。我的经验是结合已知的生物学知识和聚类结果的分辨率找到一个能区分主要功能状态的平衡点。可以先在较粗的粒度上运行LIANA发现主要通路再对感兴趣的细胞群进行亚群重聚类和精细分析。表达矩阵的选择强烈建议使用对数归一化后的数据。原始计数数据方差极大会严重扭曲相关性计算和统计检验。确保你输入LIANA的adata.X或指定的layer是经过sc.pp.log1p处理的数据。基因过滤expr_prop参数非常有用。将其设置为一个合理的值如0.05-0.1可以过滤掉在极少细胞中稀疏表达的基因这些基因产生的信号绝大多数是噪声。这能显著提升结果的信噪比和计算速度。4.2 方法选择与结果解读没有银弹理解不同方法的输出cellphonedb的pvalue和meansconnectome的weight_sc和lr_prodlog2fc的logfc_comb。在聚合前务必查阅LIANA文档了解每个方法输出的“score”列具体代表什么。有时候你可能需要先对每个方法的得分进行标准化如z-score再进行聚合以确保不同量纲的分数具有可比性。LIANA的聚合函数已经考虑了一些内部标准化但了解原理总是好的。共识不等于真理高共识度的相互作用只是意味着多种计算模型都支持它它在统计学上更稳健。但它是否具有生物学真实性仍需后续实验验证。反之一些被少数方法强烈支持、但共识度不高的信号也可能是重要的尤其是当这些方法基于不同的原理时例如一个基于表达丰度另一个基于统计显著性。不要盲目崇拜共识排名要结合生物学背景进行判断。关注“方向性”和“非对称性”细胞间通信常常是非对称的。A-B的信号很强但B-A可能很弱。在解读热图或网络图时要特别注意这种方向性。这往往揭示了细胞间的主导-从属关系或信号流的源头。4.3 性能优化与大规模数据处理单细胞数据集的规模越来越大包含数万甚至数十万个细胞。直接在整个数据集上运行所有方法可能非常耗时。对细胞进行降采样对于初步探索可以对每个细胞类型进行随机降采样使其包含大致相同数量的细胞如每个类型最多500个细胞。这能极大缩短计算时间且通常不会改变主要的通信模式因为信号强度是群体水平的平均。可以使用scanpy的sc.pp.subsample功能。分步运行与并行化LIANA本身支持一些并行计算。你也可以手动将细胞类型分组或者将配体-受体数据库分成块分别运行后再合并结果。对于超大数据集考虑在高性能计算集群上运行。使用更轻量级的方法在初期探索时可以先运行log2fc、natmi这类计算速度较快的方法。CellPhoneDB和NicheNet通常计算量较大可以留到对重点通路进行深入分析时再使用。4.4 与下游分析整合超越通信列表得到一份相互作用的排名列表只是开始。如何赋予它生物学意义通路富集分析将排名靠前的配体或受体基因列表进行通路富集分析如GO、KEGG。这能告诉你这些活跃的通信信号主要激活或抑制了哪些下游生物学过程如“T细胞活化”、“血管生成”、“炎症反应”。与差异表达结合比较不同处理组或疾病状态下的细胞间通信差异。例如对比治疗响应者与非响应者的肿瘤样本。LIANA的结果可以按样本分组运行然后比较相同细胞类型对之间相互作用的强度差异。这能直接关联通信变化与表型。空间转录组学的验证如果你的单细胞数据来自解离的组织那么通信分析是推断性的。如果能有空间转录组数据则可以直观地验证推测的发送者与接收者细胞在空间上是否邻近。越来越多的工具如CellChat、Giotto和LIANA的扩展正在整合空间信息。5. 案例深潜解读巨噬细胞-肿瘤细胞对话中的MIF信号让我们回到之前可能发现的一个强信号Macrophage - Malignant: (MIF, CD74_CXCR4)。我们以此为例演示如何从LIANA的输出深入到生物学解读。首先在聚合结果中定位这个相互作用mif_interaction aggregated_df[ (aggregated_df[‘source’]‘Macrophage’) (aggregated_df[‘target’]‘Malignant’) (aggregated_df[‘ligand’]‘MIF’) (aggregated_df[‘receptor’].str.contains(‘CD74’)) ] print(mif_interaction[[‘aggregate_rank’, ‘aggregate_mean’, ‘method_specific_scores’]])假设它排名非常靠前aggregate_rank5。第一步确认表达模式。光有排名不够我们需要回到原始数据亲眼看看表达分布。# 绘制MIF在巨噬细胞中的表达分布 sc.pl.violin(adata[adata.obs[‘cell_type’]‘Macrophage’], keys‘MIF’, groupby‘sample_id’) # 绘制CD74和CXCR4在恶性细胞中的表达分布 sc.pl.violin(adata[adata.obs[‘cell_type’]‘Malignant’], keys[‘CD74’, ‘CXCR4’], groupby‘sample_id’, stripplotFalse)通过小提琴图我们可以确认MIF确实在巨噬细胞亚群中特异性高表达而CD74和CXCR4在恶性细胞中也有显著表达。这为相互作用提供了基础证据。第二步查阅文献建立生物学假设。MIF巨噬细胞移动抑制因子是一个多效性的细胞因子在肿瘤中已知具有促进增殖、血管生成和抑制免疫的作用。其受体CD74结合MIF与CXCR4共受体形成复合物能激活MAPK、PI3K等促生存和增殖通路。因此我们的发现“巨噬细胞通过MIF-CD74/CXCR4轴与肿瘤细胞通信”具有坚实的文献基础并且提示这可能是肿瘤微环境中一种重要的免疫抑制和促肿瘤机制。第三步关联患者预后或治疗反应如果有临床数据。如果我们有患者的生存数据可以进一步分析# 假设 adata.obs 中有‘patient_id’和‘survival_status’信息 # 1. 计算每个患者样本中MIF在巨噬细胞中的平均表达水平 mif_expr_per_patient adata[adata.obs[‘cell_type’]‘Macrophage’].to_df(layer‘log1p’)[‘MIF’].groupby(adata.obs[‘patient_id’]).mean() # 2. 根据中位数将患者分为MIF-high和MIF-low组 # 3. 进行生存分析Kaplan-Meier曲线log-rank检验如果发现MIF高表达的患者预后更差那么就为这个通信通路的临床相关性提供了支持证据。第四步设计下游实验验证。基于此计算发现可以设计湿实验进行验证例如在共培养体系中使用MIF中和抗体或CD74抑制剂观察肿瘤细胞增殖、凋亡或信号通路磷酸化水平的变化。通过免疫组化或免疫荧光在原位肿瘤组织上验证MIF巨噬细胞与CD74肿瘤细胞在空间上的毗邻关系。通过这样一个从计算预测-表达验证-文献佐证-临床关联-实验设计的完整闭环我们就把LIANA输出的一个“高分相互作用”转化为了一个具有潜在生物学和临床意义的、可验证的研究假设。这才是细胞间通信分析的终极目的。LIANA框架的强大正在于它通过标准化和集成将我们从繁琐的方法学比较和数据处理中解放出来让我们能更专注于结果的生物学解读和科学故事的构建。它不是一个黑箱而是一个透明、灵活且强大的工作台等待着每一位探索细胞社会性的研究者去使用和打磨。

本月热点