RNA-seq 实验设计原则

做 RNA-seq 分析,有个残酷的事实我得先告诉你——统计再牛,也救不了烂实验设计。我在好几个项目里见过这样的情况:测序数据哗哗地回来了,一看差异基因列表,漂亮!结果一深挖,全是批次效应导致的假阳性。白花了几十万,最后只能重做。所以这章我跟你聊聊实验设计里的几个关键坑,咱提前避开。

1. 生物学重复:别省这个钱

问得最多的一个问题:「我只做两个重复行不行?」我的回答永远是不行。

为什么?你看这个图:

生物学重复 vs 技术重复:差别在哪 生物学重复 个体1 个体2 个体3 √ 反映群体变异 √ 统计检验的基础 技术重复 同一个样本 分两次上机测 ✗ 只反映测量误差 ✗ 不能用于差异检验 ✗ 浪费经费 底线:至少 3 个生物学重复,少于 3 个 Statistical Test 基本没法做

生物学重复,说白了就是你从不同个体身上取样——比如三只老鼠、三株细胞、三块组织。它反映的是个体间的真实差异。而技术重复,是把同一个样本分装两次测一下,本质是重复测量,解决不了群体方差的问题。

我个人习惯在正式实验前,至少先跑一个 3v3 的小试配置。如果样本来源比较杂(比如病人组织),我甚至会做到 5 个重复。钱花在重复上,比花在测序深度上值多了。你想想看,一个基因深度够但没生物学重复,统计检验连 p 值都算不出来,那数据就是废的。

我曾经踩过的坑: 有个合作项目因为样本珍贵,只取了 2 个肿瘤组织 vs 2 个正常组织。结果差异基因找出来几百个,验证时一个都没验证出来。后来发现是批次效应 + 个体差异,但样本已经用完了。从此我立了个规矩——少于 3 重复的项目我不接。

2. 测序深度:够用就行,别求多

测序深度,说白了就是每个基因平均被测了多少次。单位是 M(百万reads)。不同目的对深度的要求完全不一样。

应用场景 推荐深度 备注
基因表达差异(常规) 10–20 M reads / 样本 够用,多了边际效应递减
低表达基因/稀有转录本 30–50 M reads / 样本 需要深度挖一下
可变剪接或融合基因 40–60 M reads / 样本 剪接事件对深度敏感
单细胞 RNA-seq (10x) 20–50k reads / 细胞 看细胞数量,总量控制

我建议你直接从 SRA 数据库看看你研究领域的公开发数据,别人用多少深度,你至少对齐。我手头一个项目,直接怼了 60M reads 一个样本,结果 70% 的 reads 都是核糖体 RNA…那深度再多也没用。

我个人习惯: 用 salmon 或 kallisto 做快速定量预览,10 分钟就知道每个样本的有效 reads 够不够。没必要全量跑完才发现深度不够。
# 快速预览 reads 质量
fastqc sample_R1.fastq.gz -o fastqc_output/

# 用 salmon 做轻量级定量
salmon quant -i index -l A \
  -1 sample_R1.fastq.gz \
  -2 sample_R2.fastq.gz \
  -p 8 -o salmon_output/

3. 批次效应:默认为它存在

批次效应有多常见?我跟你说,几乎每一个实验都有。不同提取时间、不同试剂盒、不同跑胶日期、不同测序通道,都会引入批次差异。

控制批次效应,核心策略就两条:

  1. 随机化:把各处理组的样本打散,混着提取、混着建库、混着上机。别一组处理放一天做,另一组改天做。
  2. block 设计:如果实在没法在同一天完成,把处理组和对照组在同一个批次里做。比如每个 batch 里都包含一组处理 + 一组对照。
非常重要: 把实验设计信息写进 SraRunTable.txt 或你的 metadata 里,包括:提取日期、提取人、试剂盒批次、建库日期、上机通道、测序仪器 ID。做后续批次校正时这些信息能救命。

4. 随机区组设计 vs 简单随机设计

如果你手上有多个变量(比如不同药物 + 不同时间点),建议用随机区组设计。举个例子:

  • 简单随机:把所有样本随机分到处理组。样本量少时分组可能不均匀。
  • 随机区组:按某个控制因素(如性别、小鼠窝别、病人分期)分层,再在每层内随机分配处理。能排除干扰因素的影响。

我记得有个经典案例——研究药物对各性别小鼠的影响,如果不区分雄雌直接随机,很可能所有雄性都分到药物组,雌性都在对照组,那差异基因到底是药的效应还是性别的效应?谁也说不清。

5. 实际规划:一个 checklist

做实验前,你照着这表过一遍:

步骤 检查项 备注
1. 确定研究目标 比较两组还是多组?连续变量还是分类变量? 影响统计方法和重复数
2. 设计重复 至少 3 个生物学重复/组 经费紧张时优先保证重复,牺牲深度
3. 随机化分层 按已知混杂因素分层 避免系统偏差
4. 确定测序深度 参考同类研究或预实验 别为了省深度而牺牲低位表达
5. 记录 metadata 记录所有可能影响数据的因素 后续 batch correction 的基础
6. 做预实验 跑 2–3 个样本看看数据质量 检查文库复杂度、rRNA 污染等

6. 一个小技巧:参考基因组版本的选择

可能你觉得这不属于实验设计,但我见过太多次因为参考基因组版本混用导致的悲剧。不同版本之间的基因 ID 和坐标不一致,你后面做注释时全乱套。

我建议你从一开始就固定好版本,比如一律用 Ensembl v110(2024年最新版),或者 GENCODE v45。并在项目笔记里写明:

# 项目笔记示例
Project: Drug_Response_RNAseq_2025
Reference genome: GRCh38.p14
Annotation: GENCODE v45 (primary assembly)
Index built with: STAR 2.7.11b
Index command: STAR --runThreadN 16 \
  --runMode genomeGenerate \
  --genomeDir ./star_index \
  --genomeFastaFiles GRCh38.p14.genome.fa \
  --sjdbGTFfile gencode.v45.primary_assembly.annotation.gtf
一句话总结: 实验设计的质量,决定了你分析结果的上限。生物学重复 ≥3,批次效应默认存在,metdata 记录到最细。把这三点做好,后面分析就是锦上添花,不是雪中送炭。