2. 实验设计:板布局与随机化原则
板布局这事,说白了就是决定你的样品往哪放。我刚开始做高通量筛选的时候,觉得这有什么好讲究的,不就是把样品波进去嘛。
结果第一个正式筛选就栽了跟头——边缘效应、加样漂移、温度梯度,全搅在一起,根本分不清是化合物的问题还是板子的毛病。
后来我才明白,板布局不是简单的“摆放”,它是实验设计里能跟统计对抗的第一道防线。你想想看,一个384孔板,角落和中心的孔位,历史表现能差出15%去。
2.1 板布局的黄金法则
我个人习惯把板子分成几个功能区块。不是为了好看,是为了后续质控的时候能快速定位问题。具体来说,每一块板子至少要包含这四类孔:
- 阴性对照(Negative Control):通常放DMSO或空白溶剂,用来定义信号基线。
- 阳性对照(Positive Control):已知活性的标准品,用来监控检测窗口是否正常。
- 空白孔(Blank):不包含样品和试剂,用来扣除背景吸收或自发荧光。
- 样品孔(Sample):待测化合物,也就是我们要分析的主要对象。
这里有个硬性要求:每种对照至少要占到整板的5%~10%。我在项目中见过有人为了多跑样品,把对照压缩到只有两列,结果阳性对照的Z’因子只有0.3,整批数据都不敢用。
对照孔布局的避坑指南
我曾经把阴性对照全部放在A列(最左侧),结果发现边缘孔的信号变异系数(CV)高达18%,而中心孔只有6%。从那以后,我再也不把对照堆在边缘了。正确的做法是均匀分散,保证对照孔能反映不同位置的系统误差。
再来说说间距问题。同一个化合物的不同浓度,或者同一个批次的重复孔,不能挨着放。我见过有人把三个重复孔紧贴在一起,加样枪头和板子边缘的距离都一样——这等于自我欺骗,测出来CV再低也不能代表真实重现性。
一个典型的384孔板布局可以参考下面的结构:
列1-2: 阴性对照(均匀分散在上下两端)
列3-4: 阳性对照(均匀分散在中间区域)
列5-22: 样品孔(每4列为一个浓度梯度区块)
列23: 空白孔(均匀分散)
列24: 阳性对照(对称分布,用于检查板内对称性)
2.2 随机化的三个层面
随机化不是玄学,它是消除系统偏差最实用的手段。我通常把它拆成三个层面来执行:
| 层面 | 解决的问题 | 操作方法 |
|---|---|---|
| 布局随机化 | 加样顺序、板位效应 | 将样品按照随机数表分配到板内位置 |
| 运行顺序随机化 | 试剂时效、设备漂移 | 每批次中随机打乱板子的读取顺序 |
| 试剂分配随机化 | 加样头差异、移液精度 | 不同板子的对照孔使用不同批次的试剂 |
布局随机化是最容易操作也最容易被人忽略的。我见过一个团队,他们把所有候选化合物按字母顺序排板,结果发现首字母靠前的化合物平均活性普遍偏高。为什么?因为加样顺序是A-Z,A列加的样品暴露时间长,溶剂蒸发快,浓度变了。
随机化之后,这种顺序偏差就会变成随机误差,而不是系统误差。具体怎么做?可以用Excel的RAND()生成随机数,然后按随机数排序分配板位。
运行顺序随机化主要针对多批次实验。举个例子,你今天测20块板子,如果每次都是从第1块测到第20块,那最后几块板子的试剂可能已经降解了。我建议每批次开始前,先做一个随机顺序表,按这个表指定上机顺序。
批次随机顺序表示例(384板,8块/批):
批号A: 板3 → 板7 → 板1 → 板5 → 板8 → 板2 → 板6 → 板4
批号B: 板5 → 板2 → 板8 → 板6 → 板1 → 板4 → 板3 → 板7
试剂分配随机化听起来有点反直觉——试剂不是应该保持一致吗?但你要知道,配一次试剂不可能无限量,新配的和旧配的总有差别。我建议对同一批次的不同板子,尽量使用不同批次的对照品,这样你才能真正评估批间变异有多大。
2.3 随机化的软件实现
手工做随机化太累了,尤其面对上千个化合物的时候。我一般用R或者Python写个简单的脚本,直接把布局文件生成好。
下面是一个R脚本示例,用来生成随机化的板布局映射表:
library(dplyr)
# 假设有768个样品,需要2块384孔板
samples <- paste0("Cpd_", 1:768)
# 生成随机顺序
set.seed(42)
random_order <- sample(seq_along(samples))
# 分到两板
plate1 <- random_order[1:384]
plate2 <- random_order[385:768]
# 转换为板位坐标
row_labels <- rep(LETTERS[1:16], each = 24)
col_labels <- rep(1:24, times = 16)
layout <- data.frame(
Well = paste0(row_labels, col_labels),
Sample = samples[c(plate1, plate2)],
Plate = c(rep("Plate1", 384), rep("Plate2", 384))
)
当然,大部分自动化液体处理工作站也内置了随机化功能。我习惯在排布参数里直接定义“randomize within plate”选项,这样加样时就已经打乱了。
2.4 区块随机化与分层随机化
别把东西扔到一个池子里随机化就完事了。如果你的化合物是根据某种特征分组的(比如结构类、活性范围、毒性级别),那就要用分层随机化。
举个例子,我手头有96个化合物,其中30个属于“高毒性”类别。如果全部随机化分布,那高毒性的化合物有可能全挤在一个角落。设想一下,如果这个角落恰好靠近加样针的清洗位,交叉污染的概率就会大大提高。
正确的做法是:先把化合物按类别分层,然后在每个层内做随机化。这叫做分层随机化(Stratified Randomization)。具体操作:
- 按化合物类别(或浓度组)分成K个层。
- 对每一个层内的样品,分别生成随机数并排序。
- 将每个层的样品均匀分配到所有板子中。
实际案例:我在一个1152个化合物的筛选中,按照“结构骨架”分成6个类。每个类内随机化之后,再均匀分配到3块384孔板。最终数据统计时,结构类之间的批间变异系数从原来的15%降到了5%以下。
2.5 板布局与随机化的文档化
说句实在话,布局做好了不存下来就等于白做。我要求每个项目必须保留以下两份文档:
- 板布局图(Plate Map):包含每个孔位的样品ID、浓度、对照类型、复孔编号。
- 随机化映射表(Randomization Mapping Table):记录原始序号与随机化后位置的对应关系,包括随机种子(Seed)。
为什么要记种子?因为随机数生成器每次启动都会产生不同的序列,没有种子,你之后永远无法还原实验时的布局。把种子记录到实验笔记本或LIMS系统里,这是可溯源的基本要求。
2.6 本章知识体系
下面的图表总结了板布局与随机化的核心逻辑:
2.7 案例复盘
我两年前接手过一个项目,客户说他们的Z’因子总是在0.4-0.6之间晃动,怎么也提不上去。我去现场一看,板子布局是这样:
- 列1-2放阴性对照(全部贴着边缘)
- 列3-22放样品(按字母排序)
- 列23-24放阳性对照(全部在边缘)
我二话没说,先把布局改成对照均匀分散、样品随机化、并且把阳性对照也在板内对称分布。连续测试了3个批次,Z’因子全部稳定在0.7以上。客户问我是怎么做到的——其实就做了一件事:把系统误差变成了随机误差。