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)。具体操作:

  1. 按化合物类别(或浓度组)分成K个层。
  2. 对每一个层内的样品,分别生成随机数并排序。
  3. 将每个层的样品均匀分配到所有板子中。

实际案例:我在一个1152个化合物的筛选中,按照“结构骨架”分成6个类。每个类内随机化之后,再均匀分配到3块384孔板。最终数据统计时,结构类之间的批间变异系数从原来的15%降到了5%以下。

2.5 板布局与随机化的文档化

说句实在话,布局做好了不存下来就等于白做。我要求每个项目必须保留以下两份文档:

  • 板布局图(Plate Map):包含每个孔位的样品ID、浓度、对照类型、复孔编号。
  • 随机化映射表(Randomization Mapping Table):记录原始序号与随机化后位置的对应关系,包括随机种子(Seed)。

为什么要记种子?因为随机数生成器每次启动都会产生不同的序列,没有种子,你之后永远无法还原实验时的布局。把种子记录到实验笔记本或LIMS系统里,这是可溯源的基本要求。

2.6 本章知识体系

下面的图表总结了板布局与随机化的核心逻辑:

板布局与随机化核心逻辑 实验设计阶段 板布局黄金法则 对照孔配置 间距控制 随机化三层面 布局随机化 运行顺序随机化 试剂分配随机化 区块与分层随机化 可溯源板布局 + 随机化映射表 关键依赖:随机种子记录、分层策略、对照孔分布均匀度检查 实践输出:每块板对应的Plate Map + Randomization Mapping Table

2.7 案例复盘

我两年前接手过一个项目,客户说他们的Z’因子总是在0.4-0.6之间晃动,怎么也提不上去。我去现场一看,板子布局是这样:

  • 列1-2放阴性对照(全部贴着边缘)
  • 列3-22放样品(按字母排序)
  • 列23-24放阳性对照(全部在边缘)

我二话没说,先把布局改成对照均匀分散、样品随机化、并且把阳性对照也在板内对称分布。连续测试了3个批次,Z’因子全部稳定在0.7以上。客户问我是怎么做到的——其实就做了一件事:把系统误差变成了随机误差。