1. 多组学数据批次效应:从识别到校正的全流程指南
当你第一次拿到TCGA结肠癌和直肠癌的转录组数据时,可能会被样本量之大所震撼——701个样本,19938个基因。但更让人头疼的是,这些数据来自不同研究项目(TCGA-COAD和TCGA-READ),就像把不同实验室、不同时期做的实验结果混在一起分析。这就是典型的批次效应问题,它会让本应显著的生物学差异被技术变异所掩盖。
我在分析乳腺癌多中心数据时就踩过坑:两个医疗中心提供的基因表达数据,在未校正时聚类结果完全按中心分组,而非预期的肿瘤亚型。这种情况在公共数据库分析中尤为常见,比如:
- 不同测序平台产生的数据(Illumina HiSeq vs NovaSeq)
- 样本分多批处理的实验数据
- 多中心临床研究中的样本收集差异
批次效应最直观的表现是:当用PCA降维可视化时,样本不是按生物学分组(如肿瘤/正常)聚集,而是按批次来源聚集成簇。这会导致后续差异分析、生存分析等结果的可靠性大打折扣。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据准备与探索性分析
2.1 数据获取与预处理
用easyTCGA包获取数据确实方便,但新手常会忽略几个关键步骤。以结肠癌数据为例,获取TPM矩阵后必须进行log2转换(记得加0.1的伪计数避免取对数出错):
r复制library(easyTCGA)
getmrnaexpr(c("TCGA-COAD","TCGA-READ"))
# 加载数据并转换
load("TCGA-COAD_TCGA-READ_mrna_expr_tpm.rdata")
exprset <- log2(mrna_expr_tpm + 0.1)
临床信息中的project_id(TCGA-COAD/TCGA-READ)就是天然的批次标签,而sample_type需要简化为tumor/normal两类:
r复制clin_info$sample_type <- ifelse(
as.numeric(substr(clin_info$barcode,14,15)) < 10,
"tumor",
"normal"
)
2.2 可视化诊断批次效应
tinyarray包的draw_pca函数能快速生成诊断图。先看生物学分组(肿瘤vs正常)的分布:
r复制libra
