课程介绍:ADMET数据与批次效应概述
做药物研发的朋友都知道,光看活性远远不够。我刚开始接触药化项目那会儿,花了好几个月筛出一批候选分子,结果一到动物实验全翻了车——要么毒性超标,要么代谢太快。说白了,ADMET 才是决定一个分子能不能走到临床的关键关卡。
什么是ADMET?
ADMET 是五个词的缩写,我习惯按顺序来理解:
| 缩写 | 全称 | 白话解释 |
|---|---|---|
| A | Absorption | 药物能不能被吸收到血液里 |
| D | Distribution | 药物在体内能不能到对的地方 |
| M | Metabolism | 肝脏会不会把它代谢掉 |
| E | Excretion | 药物最后怎么排出去 |
| T | Toxicity | 它会不会毒到正常细胞 |
这五个维度,任何一个出问题,分子基本就废了。我记得有一次项目组就是因为忽略了代谢稳定性,结果花了三百万做的毒理实验全部白费。嗯,从那以后我再也不小看ADMET数据了。
数据是怎么来的?批次效应又是什么?
现实中的ADMET数据,往往来自不同的实验批次。比如:
- 周一做的Caco-2渗透实验,和周三做的同一板分子
- 北京实验室测的肝微粒体半衰期,和上海实验室的数据
- 不同仪器、不同试剂批次、不同操作员
这些因素都会引入非生物学的噪声。我叫它「批次效应」——不等于实验错误,而是一种系统性的偏移。你看下面这张图就明白了:
你有没有遇到过这种情况:同一个化合物,在批次A里Caco-2渗透值是5×10⁻⁶ cm/s,在批次B里测出来只有1.5×10⁻⁶?其实化合物没变,变的是实验条件。这就是典型的批次效应。
为什么不能无视它?
我来说个真实经历。几年前我帮一个团队做ADMET模型,他们从三个供应商拿了数据直接合起来训练随机森林。结果模型在测试集上表现很好,但一放到新化合物上就崩了。来回查了两个月,最后发现——所谓的高准确率,其实是模型学到了批次标签,而不是真实的ADMET规律。说白了,这模型是一个「批次识别器」,不是「预测器」。
警告:直接混合不同批次的ADMET数据做机器学习,会导致严重的过拟合。模型可能记住的是哪个数据来自哪个批次,而不是分子本身的属性。
ComBat 是什么来头?
ComBat 全名 Combatting Batch Effects,本来是基因组学里对付批次效应的利器。后来我试着把它移植到ADMET数据上,效果出乎意料地好。它的核心思想很简单:
- 假设批次效应是可加性 + 可乘性的
- 用贝叶斯框架估计每个批次的均值和方差偏移
- 把偏移从原始数据里减掉,保留生物相关的信号
你想想看,这和「把不同相机拍的照片统一白平衡」差不多一个道理。
使用 ComBat 之前需要什么?
| 条件 | 说明 |
|---|---|
| 已知批次标签 | 每个样本属于哪个实验批次必须明确 |
| 至少有2个批次 | ComBat 需要跨批次估计参数 |
| 每个批次有多个样本 | 推荐每个批次至少5~10个样本 |
| 测量值应为连续变量 | 比如渗透率、半衰期、IC50,而非分类变量 |
小提示:如果某些ADMET指标是分类(比如“高/中/低”),可以先做排序转换成数值,再使用ComBat。但最好还是用原始连续值。
一个简单的数据预览
假设我们有一个 CSV 文件,里面记录了几种化合物的 Caco-2 渗透率。我习惯先看原始分布的散点图,确认有没有明显的批次偏移。
# 数据长这样(示例)
Compound, Batch, Caco2_Permeability
MolA, Batch1, 3.2e-06
MolA, Batch2, 1.1e-06
MolB, Batch1, 8.5e-07
MolB, Batch2, 2.3e-07
...
你看 MolA 在两个批次里差了近 3 倍。如果是批次B的试剂放久了或者pH有问题,那这个差异就是噪声,不是真正的理化性质。
本课程能给你什么?
- 从头理解批次效应的数学本质
- 亲手在 Python 里运行 ComBat 校正
- 学会评估校正效果(可视化 + 统计指标)
- 避开我踩过的那些坑(特别是参数调优部分)
核心思想:ComBat 不是万能钥匙,但在处理多批次的ADMET连续数据时,它比简单均一化要可靠得多。我会带你一步步看懂它到底做了什么,以及什么时候不该用。
好,第一章就是铺垫到这里。记住:认清批次效应,是做好ADMET数据预处理的第一步。后面我们会真正上手写代码,调参数,看效果。到时你会发现——原来数据里的假象可以被轻松揭穿。