多批次实验设计原则:从根源上控制批次效应

好,咱们聊点实在的。
前面几章把联合分析的基础打好了,现在该啃硬骨头了 —— 实验设计。
说白了,实验设计做不好,后面所有 fancy 的分析都是白搭。

我在这行摸爬滚打了好几年,见过太多人上来就跑分析流程,结果跑出来一堆假阳性。
追问一句“你这几个批次怎么分的?”,对方就愣住了。
嗯,这就是我们今天要解决的核心问题。

批次来源:搞清楚“差异”到底从哪来

首先得明白一个事实:
Visium 实验不是流水线,每一批次的处理条件都有可能不一致。
这些不一致,就是我们常说的 批次效应。

我见过一个案例,同一个样本在不同周的两次实验中,
仅仅是透化时间差了 30 秒,下游的基因检测结果就天差地别。
所以,批次来源通常包括以下几种:

  • 实验日期:不同的日期,试剂批号、操作人员、环境温度都可能不同。
  • 试剂批号:尤其是透化酶和捕获探针,不同批号的活性差异不容忽视。
  • 操作人员:手法的差异很微妙,但确实存在。我自己就发现过,同一个 protocols,不同人做出来的组织形态差异很大。
  • 测序批次:不同测序 lane 或 flow cell 的测序深度、质量都可能影响。

我的习惯:在实验记录中,为每一个批次分配一个唯一的“批次 ID”。
这个 ID 要包含日期、操作人代号和设备编号。
比如:BATCH_20240615_ZS_VisiumB。
别嫌麻烦,这是你未来做溯源时的救命稻草。

有个简单的表格可以帮大家理清思路:

来源类别 典型变量 影响程度 控制方式
实验操作 透化时间、温度 高 标准化 SOP、固定设备
试剂 捕获探针批号、酶 中 同一大份分装、记录批号
测序 Flow cell 差异、测序深度 中 合并测序、平衡深度
环境 室温、湿度 低但持续 恒温恒湿实验台

随机化策略:别让你的样本“一家人整整齐齐”

你想想看,如果我把 5 个正常样本放在第 1 批做,
5 个疾病样本放在第 2 批做。
最后分析出来的差异,到底是疾病导致的,还是批次差异导致的?

这就是混杂。
随机化就是为了打破这种结构。

随机化策略的核心:

  • 样本随机分配:不要按组别(实验组 vs 对照组)分批次。把所有的样本混在一起,随机分配到各个实验批次中。
  • 位置随机化:在同一张玻片或同一个测序 run 里,随机放置不同组的组织切片。
  • 人为平衡:当样本数量很少时(比如只有 6 个),纯粹的随机可能让 3 个疾病样本全落在同一个批次。这时候需要人为干预,确保每个批次里实验组和对照组的比例大致相同。

我曾经踩过的坑:有一次为了节省时间,我想当然地把所有小鼠对照组的切片一次性跑完了。
结果分析时发现一批次的数据整体基因检出率就低 20%,最终不得不剔除整批数据。
记住:省时间 = 废数据。

实际执行的代码示例,我会用一个简单的随机化脚本:

import random
import pandas as pd

# 样本列表:前5个是疾病组,后5个是对照组
samples = ['Disease_1', 'Disease_2', 'Disease_3', 'Disease_4', 'Disease_5',
           'Control_1', 'Control_2', 'Control_3', 'Control_4', 'Control_5']

random.shuffle(samples)  # 随机打乱

n_batch = 2
batches = {i: [] for i in range(n_batch)}
for i, sample in enumerate(samples):
    batches[i % n_batch].append(sample)

print("批次1:", batches[0])
print("批次2:", batches[1])

对照设置:有了对照组,问题才能归因

这一点在单细胞领域里强调得很多,在空间转录组里也一样重要。
我建议的对照设置原则是:

  • 同一组织内的对照:比如在肿瘤切片中,包含肿瘤组织和相邻的正常组织。这种对照可以消除组织获取过程带来的差异。
  • 技术重复对照:同一块组织,切出相邻的两片,分别放在不同的批次中做。这能帮你衡量技术上到底引入了多大的 batch effect。
  • 差异处理对照:如果研究药物处理,一定要有同时进行的 vehicle 处理组。

最后这个我特别要强调一下。
做药物处理时,不要等到所有样本处理完了再做 Vehicle 对照。
Vehicle 对照要和实验组在同一天、同一批条件下完成。

避免混淆因素:别让设计“画蛇添足”

混淆因素,就是那些既和你感兴趣的分组有关,又和批次有关的东西。
最有名的例子:年龄。如果你的实验组全是年轻小鼠,对照组全是老年小鼠,
然后你又在不同的日期处理它们……那你就没法区分衰老还是日期引起的差异了。

常见的混淆因素包括:

  • 年龄/性别:实验组和对照组的年龄、性别分布要尽量一致。
  • 组织处理顺序:不要把所有实验组样本都放在上午处理。上午和下午的组织状态可能有差异。
  • 测序深度:不要一组样本测得多,另一组测的少。

我个人习惯是,在实验设计阶段就列一个“潜在混淆因素检查清单”:

潜在因素 是否均匀分布 控制措施
处理日期 否 随机分配
组织保存时间 需检查 统一冻存方案
切片厚度 否 统一设备、统一人员
RNA 完整性 需检查 RIN 值匹配

总结一下:实验设计不是迷信,而是逻辑。
你把可能的变数想在前头,后面的数据分析才能真的揭示生物学问题。
你设计得越粗糙,事后弥补的成本就越高。

多批次实验设计核心框架 实验设计目标 批次来源控制 随机化策略 对照设置 避免混淆因素 具体措施 标准化 SOP 记录批次 ID 具体措施 样本随机分配 人为平衡 具体措施 技术重复对照 同时处理对照组 具体措施 年龄性别匹配 高通量测序平衡 核心目标:批次效应可归因、可校正

嗯,到这里实验设计的核心原则就都梳理完了。
你要是能把这四点记在心里,后面的批次校正步骤就能轻松很多。