2. 生物学变异的基本概念归纳总结

生物学变异这个概念,说白了就是样本之间天然存在的表达差异。同一物种、同一组织、同一处理条件,不同个体之间基因表达就是不一样——这不是技术问题,而是生物学本质。

我刚开始做RNA-seq那几年,经常把生物学变异当成"数据脏",总想着用什么方法把它抹平。后来吃过几次亏才明白:你如果连真正的信号长什么样都认不出来,后面所有分析都是在跟影子打架。

2.1 生物学变异到底是什么?

先给一个干净的定义:生物学变异(Biological Variation)是指由于个体遗传背景、生理状态、发育阶段、环境应答等内在因素导致的基因表达水平差异。它不是仪器漂移,不是试剂批次不同,不是操作人员手抖——它就是你想研究的那部分真实信号。

很多人会把生物学变异和批次效应混为一谈。我见过最典型的场景:PCA图上看到样本按某个临床特征聚成了两群,有人二话不说就上ComBat去"矫正",结果把真实的疾病亚型差异给矫正没了。嗯,这种教训一次就够你记住一辈子。

核心区别一句话: 生物学变异是你想捕捉的生物学信号,批次效应是混进来的技术噪音。信号要保留,噪音要剔除。

下面这张表把区别拆开来看:

对比维度 生物学变异 批次效应
根本来源 个体差异、细胞状态、处理条件 试剂批次、操作人员、测序仪
本质属性 真实生物学信号 技术系统偏差
重复实验中的表现 组内一致、组间差异有生物学意义 同一批次内相似、批次间系统偏移
对分析结果的影响 提供生物学洞察和可解释性 引入假阳性或掩盖真实差异
处理方法 通过实验设计和统计建模保留并利用 通过矫正算法或分层分析去除
是否应该去除 绝对不能 必须处理

2.2 三类核心生物学变异

在我经手的项目里,生物学变异通常可以归纳为三大类。每类的来源、量级和处理方式都不太一样。

第一类:个体间变异

这是最直观的。两个人、两只小鼠、两株田间水稻,基因表达天生就有差异。遗传背景、性别、年龄、生活环境都会造成影响。我在分析TCGA肿瘤数据时发现,不同患者的同一种癌组织,免疫相关基因的表达量可以差10倍以上——这就是纯粹的个体间生物学变异。

第二类:细胞状态与时间动态变异

同一个体、同一组织里,细胞也不是铁板一块。细胞周期阶段、分化状态、昼夜节律、疾病进展时间点,都会带来表达谱的波动。做时间序列实验时,这类变异尤其明显。

第三类:处理条件与分组变异

这恰恰是我们做实验最想捕捉的那部分信号。给药组 vs 对照组、基因敲除 vs 野生型、处理前 vs 处理后——这些组间差异才是实验设计的核心目标。

我个人的判断习惯: 拿到一个新数据集,我通常会先问自己三个问题——这种差异在不同个体间是否稳定再现?是否有已知的生物学解释?是否有独立文献支持?如果三个答案都是"是",那大概率是真的生物学变异。

2.3 生物学变异怎么量化?

光定性还不够,得有个数来衡量。我个人习惯用变异系数(Coefficient of Variation, CV)来快速评估一个基因或一个样本组的生物学变异程度。

CV 的计算很直接:

CV = 标准差 / 平均值

在R里跑起来就几行代码的事:

# 计算每个基因的生物学变异系数
calc_cv <- function(expr_vector) {
  sd(expr_vector) / mean(expr_vector)
}

# 对表达矩阵按行计算CV
gene_cvs <- apply(expr_matrix, 1, calc_cv)

# 看下整体分布
summary(gene_cvs)

# 筛选高变异基因(通常CV > 0.3 就需要关注)
high_var_genes <- names(gene_cvs[gene_cvs > 0.3 & !is.na(gene_cvs)])

CV 的好处是去量纲化,不同基因、不同数据集之间可以横向比较。我一般会用 CV > 0.3 作为一个经验阈值——低于这个值的基因在群体中相对稳定,高于这个值的基因可能携带重要的个体间差异信号。

更严谨的做法是用方差分解(Variance Partition),把总方差拆成"组间方差 + 组内方差"。组间方差占比越大,说明生物学变异越显著。

2.4 最容易踩的坑:把生物学变异当成批次效应

这个坑我亲眼见过太多次,自己也踩过。就拿时间序列数据来说吧:

场景一:时间序列的"假批次"

同一个病人,治疗前、治疗后1个月、治疗后3个月分别取样测序。PCA一看,三个时间点分成了三群。有人觉得"这不是时间效应,肯定是三次测序的批次不同",然后一通矫正,把真实的治疗响应信号给抹掉了。

场景二:配对样本的"假偏移"

肿瘤组织和癌旁组织本来就是同一个病人的两种状态,它们之间的差异就是你要找的东西。有人却觉得"肿瘤和癌旁表达差异太大了,可能是批次问题"——这种想法其实是在跟自己过不去。

我曾经犯过的错: 有次分析一批小鼠肝组织数据,给药组和对照组在PC1上分得很开。我第一反应是"两组样本是不是送测时间不一样?"查完记录发现确实差了两个月。我差点就上了批次矫正,但后来仔细看了差异基因列表——全是药物靶点通路相关的基因。如果是批次效应,基因应该随机分布,不可能集中富集在特定通路上。从那以后,我养成一个习惯:在做任何批次矫正之前,必须先做一轮生物学功能富集分析。

判断是不是批次效应,有几个检验方法:

  • 看差异基因是否富集在特定生物学通路(是→生物学变异;否→可能是批次效应)
  • 看是否有独立文献或数据库支持这种差异(是→生物学变异;否→存疑)
  • 看组内样本是否在实验处理上有一致的生理变化(是→生物学变异;否→需警惕)

2.5 处理生物学变异的正确姿势

既然生物学变异是信号不是噪音,那分析策略上就要"利用"而不是"消除"。我从两个层面来说:

实验设计层面

  • 保证足够的生物学重复: 每个条件至少3~5个生物学重复,否则你无法区分个体间变异和处理效应。
  • 随机化和分块设计: 把不同处理组的样本均匀分布在每个测序批次里,避免处理效应和批次效应完全混杂。
  • 记录关键协变量: 年龄、性别、体重、采样时间、RNA完整性等,这些在后续建模时都能帮你解释变异来源。

统计建模层面

  • 用线性混合模型(如 limma、DESeq2、edgeR): 把生物学个体作为随机效应,处理条件作为固定效应,模型会自动帮你分离不同来源的变异。
  • 不要盲目用全局批次矫正: 像 ComBat 这样的工具是为消除技术批次设计的,用在生物学分组上会严重破坏真实信号。
  • PCA + 生物学注释联动: 每次看PCA图都同步查看哪些基因驱动了主成分,如果这些基因有明显的生物学功能富集,那大概率是真实的生物学变异。
我建议的流程: 拿到一个新数据集,先做PCA + 层次聚类,看样本是否按实验分组自然聚集。如果自然聚集,说明生物学变异足够强,后续分析应该以差异表达为主,不要动批次矫正。如果样本按测序批次聚集,再考虑技术批次矫正。
生物学变异核心概念框架 生物学变异核心概念框架 生物学变异 个体间变异 细胞状态变异 处理条件变异 遗传多样性 生理状态差异 细胞周期阶段 分化与发育 药物处理效应 环境应激响应 ⚠ 关键判别原则 生物学变异 = 真实生物学信号 → 保留并利用 批次效应 = 技术系统偏差 → 识别并去除

这张图把生物学变异的内部结构拆清楚了。从上往下看,根节点是总括,三个分支对应三大来源,每个分支下面再细分具体驱动因素。底部说明框是我希望你刻在脑子里的判别原则——遇到样本间差异时,先对号入座,别急着动手矫正。