第2章:理论基础:数据库、网络与核心模型
好,咱们进入真正烧脑的部分了。说实话,很多同学在做NicheNet分析时,只是机械地跑代码。跑完得到一堆配体-受体对,但根本不知道背后的逻辑是什么。这就像开着一辆跑车,却完全不懂发动机原理——一旦遇到问题,你连排查的方向都没有。
我个人习惯是,在做任何高级分析前,先搞清楚三件事:数据从哪里来?逻辑链怎么走?模型凭什么这么算?这一章,我们就来解决这三个问题。
2.1 配体-受体相互作用数据库(LRdb)
NicheNet的第一个核心,就是它的配体-受体数据库。说白了,这是整个分析的“弹药库”。没有它,你连配体和受体之间的对应关系都找不到。
我在项目中遇到过很多次,有些同学自己从文献里手工整理配体-受体对,然后跑NicheNet时发现结果很糟糕——原因很简单,人工整理的覆盖度太低,而且很多交互证据其实很弱。
2.1.1 数据库的设计逻辑
LRdb不是随便攒一个列表。它遵循了几个关键原则:
- 多源整合:从多个已知数据库(如KEGG、Reactome、CellChatDB等)中提取已知的配体-受体交互对
- 证据权重:每种交互都有来源引用和质量评分,不是所有交互都该被同等信任
- 跨物种支持:主要针对人和小鼠,但部分数据支持跨物种映射
| 数据库来源 | 交互对数量 | 主要特点 |
|---|---|---|
| KEGG | ~1,200 | 通路级别,偏向代谢和信号通路 |
| Reactome | ~1,800 | 反应级别,包含详细的分子机制 |
| CellChatDB | ~2,000 | 细胞通讯专用,包含多聚体和附属蛋白 |
| 文献挖掘 | ~1,000 | NicheNet团队自己从文献中挖掘的额外交互 |
关键点:LRdb的总规模大约是6,000-7,000对配体-受体交互。这不是一个巨大的数字,但它保证了每条交互都有一定的实验或文献证据支持。
2.1.2 数据库的使用方式
在NicheNet里,你不需要自己去数据库里查找。它已经内置好了。你只需要指定物种:
library(nichenetr)
lr_network <- readRDS(url("https://zenodo.org/record/3260758/files/lr_network.rds"))
这是默认的加载方式。我记得早期版本还需要手动下载,现在方便多了。但我要提醒你:如果分析非人非鼠的物种,内置数据库可能覆盖不足。这时候需要手动补充。
我的经验:我建议在分析前,先用unique(lr_network$from)看一下配体的覆盖度。如果关键配体不在里面,后续结果会很有问题。
2.2 基因调控网络(GRN)的构建逻辑
配体-受体交互只是第一步。配体与受体结合后,会引发一系列下游信号传导,最终导致转录因子激活,从而调控靶基因的表达。GRN就是描述“转录因子→靶基因”这个关系的网络。
你想想看,如果只有配体-受体对应关系,你只能知道“谁在和谁对话”。但有了GRN,你才能知道“这场对话导致了什么结果”。这就是NicheNet比普通的配体-受体分析强的地方。
2.2.1 GRN的构建方法
NicheNet使用的GRN不是从文献中直接摘抄的。它有自己的构建逻辑:
- 收集公开的ChIP-seq数据:从GEO、ENCODE等数据库收集大量转录因子结合位点数据
- 结合motif分析:通过序列motif预测转录因子与靶基因启动子的结合可能性
- 表达量验证:在大量bulk RNA-seq数据中,验证TF与靶基因的表达相关性
- 整合打分:最终给出每个TF-靶基因对的调控强度分数
注意
| GRN构建步骤 | 数据来源 | 覆盖度 |
|---|---|---|
| ChIP-seq整合 | ENCODE, Cistrome | ~800个TF |
| Motif预测 | JASPAR, HOCOMOCO | ~1,500个TF |
| 表达验证 | GTEx, TCGA | ~2,000个FT |
嗯,这里要提醒你。GRN的质量直接决定了NicheNet下游推断的准确性。我曾经遇到一个案例,分析某免疫配体时,结果完全不合理。查了半天发现,目标TF在上皮细胞中根本不表达,但GRN里却包含了它和靶基因的调控关系。这就是泛组织数据的局限性。
2.3 NicheNet核心模型原理
好了,前面两个数据库都清楚了。现在来看NicheNet的核心模型——一个基于网络的概率传播模型。说白了,就是回答一个问题:配体A是否通过配体-受体交互和下游GRN调控了靶基因集B?
2.3.1 模型的整体流程
我个人喜欢用“三跳传播”来理解这个流程:
你能看到吗?整个过程其实就三个跳跃:第一跳从配体到受体(借助LRdb),第二跳从受体到转录因子(基于已知信号通路),第三跳从TF到靶基因(借助GRN)。NicheNet的牛掰之处,就在于它用一个统一的概率模型,把这三跳串联起来了。
2.3.2 概率传播的核心思路
它的核心思路是这样的:你给定一组候选配体,再给一组感兴趣的表达基因(比如某个细胞群中上调的基因)。模型会计算——如果把配体作为“源头”,通过LRdb和GRN的传播,能有多大的概率传播到你的目标基因集。说白了,就是信息在网络上的扩散程度。
核心公式简化理解:
配体活性分数 ∝ Σ (配体-受体权重 × 受体-TF权重 × TF-靶基因权重 × 目标基因表达)
这个公式不是NicheNet官方的精确公式,但能帮你理解逻辑——每个环节都有权重,最后加权求和得到每个配体的活性分数。
2.3.3 与普通共表达分析的区别
我刚开始接触时也困惑过:为什么不能直接看单细胞数据的共表达?
| 维度 | NicheNet | 共表达分析 |
|---|---|---|
| 数据依赖 | 基于先验知识(数据库) | 完全基于自身数据 |
| 直接相关性 | 反映因果链路 | 只能反映相关性 |
| 跨细胞类型 | 天然支持 | 需要额外处理 |
| 假阳性率 | 较低(有先验证据过滤) | 较高(很多假正相关) |
| 数据要求 | 单细胞或bulk均可 | 需要足够样本量 |
我在实际项目中常用NicheNet做初步筛选,再用共表达分析做交叉验证。两者结合,效果最好。千万别只依赖一种方法,那会错过很多信号,也会引入很多噪声。
2.4 模型的实际运行逻辑
从代码层面看,核心分析其实就几步:
# 步骤1:加载数据库
lr_network <- readRDS("lr_network.rds")
grn <- readRDS("grn_object.rds")
# 步骤2:定义配体集和目标基因集
ligands <- c("CXCL12", "IL6", "TNF")
target_genes <- c("CCR7", "STAT3", "NFKB1")
# 步骤3:运行核心模型
activity_scores <- predict_ligand_activities(
lr_network = lr_network,
grn = grn,
ligands = ligands,
target_genes = target_genes
)
小技巧:我建议在运行大模型前,先用少量的配体和目标基因集测试一下。NicheNet全量运行在十万级别细胞的数据上要跑好几个小时。先拿小数据集验证参数,能省很多时间。
2.4.1 模型的输出解读
模型跑完后,最重要的输出是一个配体活性排名。排名越高,说明这个配体越可能通过你定义的通路来调控你的目标基因集。我处理过多组学数据时,经常看到一些意想不到的配体排名很高,比如在肿瘤免疫中,一些看似不相关的代谢配体竟然排名靠前。这时候就需要回到生物学背景去验证了。
警告:NicheNet输出的是可能性,不是确定性。不要因为一个配体排名高就声称“发现了新机制”。那只是一个假设,需要后续实验验证。我曾经被审稿人问过:“你们是如何验证NicheNet预测的?”——这个问题很致命,如果你没有准备,很容易被怼回去。
2.5 本章小结
好了,咱们这一章把三个核心概念说清楚了:
- LRdb:配体-受体交互的弹药库,多源整合,证据权重分层
- GRN:TF到靶基因的调控网络,泛组织级别,需要注意组织特异性
- NicheNet核心模型:三跳概率传播,从配体到靶基因的因果推断
这三者就像发动机的三个气缸。缺一个,你的NicheNet分析就跑不起来。很多初学者跳过理论基础直接跑代码,结果看不懂输出、不会调参、不知道如何验证——你想想看,这样的分析有意义吗?
一句话总结:NicheNet不是魔法,它是一个有明确逻辑支撑的概率模型。理解了这个逻辑,你才能真正驾驭它,而不是被它牵着走。