AI_TP与2.0
/home/data/ydn/2.0/251020_wb/2.0_AI/AI_result/+_JQ1/TP-AI/
但以JQ1为例AI能找到BRDT,2.0能找到BRD4,取交集以后为空集
有部分GRN基因不在TP库里,怎么做target prediction?
AI-TP人源:1771 GRN:16202 交集:1687
老师建议:1、扩大到3层,样本不够时考虑相似性补充
2、AI序列最相似相似度统计再做交集,扩大样本。
将omnipath下载到本地
将蛋白质注释也加入到GRN
两层就有基本2000+了,逻辑上来说,感觉不应该这么多的
以前:
papers = ifelse(is.na(edge_matches$n_references) || edge_matches$n_references <= 0, 1, edge_matches$n_references)
也就是说:
每条调控关系(edge)在 complete_network.RData 中有一个字段 n_references(即该关系被多少篇文献报道过)。
如果该字段缺失(NA)或 ≤ 0,则自动赋值为 1。
→ 意味着:脚本永远不会因为缺乏文献支持而忽略一条边,只是默认给最低支持度。
查一下平均文献支持
讨论现在:降低文献支持2以上
如果你的差异蛋白来自 蛋白组学,上游变化往往源自激酶级或互作级信号;
如果来自 转录组学,上游变化更可能是 TF 层面的调控;
这其实反映的是 网络拓扑结构的密度(high-degree hubs):
- 少数枢纽基因(TP53、STAT3、AKT1、EGFR)拥有几百至上千下游;
- 它们互相连接,形成巨大的核心团块(core cluster);
- 只要进到这个团块,三层之内几乎可以到任何节点。
因此,从任意差异蛋白向上走三步,
你都会“撞”进同一个核心信号网。
这就是为什么 3 层时平均上游基因数会达到 2000 +。
是合理的,也是官方(OmniPath、SIGNOR)标准做法:
官方同样认为:
“A regulates B” 表示已知有因果关系,不论中间是否经过级联。
因此,BFS 搜索的“第1层”自动包含了所有文献支持的最短调控路径。
当药物靶点是膜受体或代谢酶时,其调控效应需要通过多级信号传导(约 4–6 层)才能作用于表达或功能蛋白。
但在基于综合数据库的计算模型(如 OmniPath)中,
由于存在大量“汇总型直接调控边”,
实际上通过 2–3 层上游搜索 就能识别到这些靶点的网络位置和主要调控路径。
换言之:
生物化学上是 5 层,网络算法上通常表现为 2–3 层。
| 层级 | 分子 | 类型 | 生物学事件 |
| 第 1 层 | EGFR | 受体酪氨酸激酶 | 激活膜上信号 |
| 第 2 层 | RAS | GTPase | 中介信号 |
| 第 3 层 | RAF | 激酶 | 启动 MAPK 级联 |
| 第 4 层 | MEK | 激酶 | 激活 ERK |
| 第 5 层 | ERK | 激酶 | 激活核内转录因子 |
| 第 6 层 | FOS | 转录因子 | 诱导基因表达变化 |
在像 OmniPath 或 Reactome 这样的网络中,研究者会把文献中描述的调控关系全部转成边,例如:
- EGFR → RAS
- RAS → RAF
- RAF → MEK
- MEK → ERK
- ERK → FOS
但!他们往往还会额外加上汇总边(aggregated / inferred edges),例如:
EGFR → RAF(因为多篇文献说“EGFR 通过 RAS 激活 RAF”)
EGFR → ERK(综述型关系)
EGFR → FOS(转录签名关联)
于是网络中的边集就变成了:
- EGFR → RAS
- EGFR → RAF
- EGFR → ERK
- EGFR → FOS
- RAS → RAF
- RAF → MEK
- MEK → ERK
- ERK → FOS
DoRothEA 转录网络 → ✅ 完全压缩,A → C 可能经过多步信号,但网络里只保留 A → C。
PPI / pathwayextra / kinaseextra → 部分压缩,部分单步,不能保证所有边都是逐步事件。
酶-底物 / 配体-受体 → ✅ 非压缩单步事件,可以区分 A → B → C。
关键函数在这里:
neighbors(network, target, mode = "in")
这行是 igraph 的标准函数,用来查找“当前节点的直接上游节点”。
再看循环部分:
for (layer in 2:(max_layers + 1)) {
...
direct_upstream <- names(neighbors(network, target, mode = "in"))
...
}
意思是:
第 1 层:直接上游(所有到差异蛋白的边)
第 2 层:这些上游的上游(上游的上游节点)
第 3 层:再往上 1 层,以此类推。
而每一层都会调用 neighbors(),也就是一步可达的上游节点。
这其实是“逐层的最短路径扩展”(BFS 搜索,Breadth-First Search)。
对应关系:
生物概念 代码逻辑
第 1 层调控 neighbors(target)
第 2 层调控 neighbors(neighbors(target))
第 n 层调控 迭代 n 次邻居扩展
避免重复节点 用 setdiff() 去掉已访问节点
| 数据库 | 官方定义 | 对应脚本行为 |
| OmniPathR | 每条 interaction 代表「A regulates B」,无论直接或间接,只要有文献支持即保留 | neighbors() 读取这些边,等价于一步可达关系 |
| DoRothEA | TF–target 关系代表转录调控,不关心中间复合物 | layer=1 覆盖直接 TF 调控 |
| SIGNOR | Signaling edge 表示一种“causal effect”,可以跨越多个中间蛋白 | 在网络中表现为汇总边,因此被算作短路径 |
| Reactome (via OmniPath) | Reaction 被转为高层次因果关系 | 在图中简化为直接连接 |
1、跑上游(a)
2、跑ai+筛人源(b)
3、ab以uniprotID做交集为a的TP(c)
4、bc比较
三层
- Rscript wb_upstream.R JQ1.txt 3 1 JQ1_upstream complete_network.RData
