跳到主要内容

01 多组学项目设计与样本匹配

速答

Q: 多组学整合第一步做什么? A: 不是跑模型,而是确认"哪些样本在所有组学层都有数据"。样本 ID 不一致、缺失模式不清楚,后面分析全是空中楼阁。

Q: 不同平台的样本 ID 怎么统一? A: TCGA 用 barcode(如 TCGA-A1-A0SK-01A-11R-A084-07),蛋白组可能只保留前 12 位,甲基化用 Sentrix ID。需要建一张映射表把各平台 ID 对齐到同一个样本。

Q: 样本缺失模式怎么看? A: 用 UpSet plot(ComplexUpset 包),比韦恩图更适合 >3 个组学层的情况。能看出哪些样本在所有层都有数据、哪些只在一两层有。

多组学整合的第一步不是跑模型,而是确认"哪些样本在所有组学层都有数据"。样本 ID 不一致、批次不对齐、缺失模式不清楚——这些问题不解决,后面的分析全是空中楼阁。

样本 ID 的现实

不同组学平台对同一个样本的命名方式几乎不会一样。TCGA 用 barcode(TCGA-A1-A0SK-01A-11R-A084-07),蛋白组可能只保留前 12 位,甲基化数据用 Sentrix ID。你需要一张映射表把它们统一起来。

library(dplyr)

# 假设三张表各有自己的 ID 列
rna_samples <- colnames(rna_mat)
meth_samples <- colnames(meth_mat)
prot_samples <- colnames(prot_mat)

# 用映射表统一
id_map <- read.csv("sample_id_mapping.csv")
# 列:sample_id, rna_id, meth_id, prot_id

# 找到三层都有的样本
common <- id_map %>%
filter(rna_id %in% rna_samples,
meth_id %in% meth_samples,
prot_id %in% prot_samples)
cat("三层共有样本数:", nrow(common), "\n")

缺失模式可视化

在决定用哪些样本之前,先画一张缺失模式图。UpSet plot 比 Venn 图更适合三层以上的情况:

library(UpSetR)

sample_list <- list(

RNA = id_map$sample_id[!is.na(id_map$rna_id)],
Methylation = id_map$sample_id[!is.na(id_map$meth_id)],
Protein = id_map$sample_id[!is.na(id_map$prot_id)]
)
upset(fromList(sample_list), order.by = "freq")

如果某一层缺失比例很高,需要考虑是否把它排除在整合之外,或者用支持缺失值的方法(如 MOFA2)。

MultiAssayExperiment 容器

Bioconductor 的 MultiAssayExperiment(MAE)是多组学数据的标准容器。它把多层数据、样本映射和临床信息绑在一起,后续分析函数可以直接操作。

library(MultiAssayExperiment)

# 构建 ExperimentList
exp_list <- ExperimentList(
RNA = SummarizedExperiment(assays = list(counts = rna_mat)),
Meth = SummarizedExperiment(assays = list(beta = meth_mat)),
Prot = SummarizedExperiment(assays = list(abundance = prot_mat))
)

# 样本映射表:每行说明某个 primary sample 在某层对应哪个 colname
smap <- listToMap(list(
RNA = data.frame(primary = common$sample_id, colname = common$rna_id),
Meth = data.frame(primary = common$sample_id, colname = common$meth_id),
Prot = data.frame(primary = common$sample_id, colname = common$prot_id)
))

# 临床信息
col_data <- DataFrame(row.names = common$sample_id,
subtype = common$subtype,
stage = common$stage)

mae <- MultiAssayExperiment(experiments = exp_list,
colData = col_data,
sampleMap = smap)
mae

设计阶段的几个决策

  1. 样本量:多组学整合对样本量要求不低。MOFA2 官方建议至少 15 个样本;SNF 在 30 个以下效果不稳定。如果某一层只有 10 个样本,考虑是否值得纳入。
  2. 批次效应:不同组学的批次效应需要分别处理。RNA-seq 用 ComBat-seq,甲基化用 ComBat,蛋白组用 limma removeBatchEffect。不要在合并矩阵之后再做批次校正。
  3. 配对 vs 非配对:如果不是所有样本都有全部组学数据,需要决定是只用完全配对的子集,还是用能处理缺失的方法。MOFA2 支持部分缺失,SNF 不支持。

常见坑

坑 1:样本 ID 截断不一致导致匹配失败

TCGA 的 barcode 有 28 位,但蛋白组只保留前 12 位、甲基化用 Sentrix ID。直接 intersect 会得到 0 个匹配。解决方案是先建一张统一映射表(sample_id_mapping.csv),所有下游操作都基于这张表的 primary ID,永远不要在代码里硬编码截断规则。

坑 2:批次与生物学变量完全混杂

如果所有 RNA-seq 样本在 batch 1 做、所有蛋白组在 batch 2 做,那批次效应和组学差异完全混杂,无法校正。项目设计时必须让同一个样本的多层数据在相似时间处理,或者至少在每个 batch 内都有多个条件的样本。发现混杂后唯一的办法是承认这个局限性,而不是强行 ComBat。

坑 3:只用完全配对样本导致样本量暴跌

三层数据取交集后样本量可能从 100 降到 30。如果某一层缺失率高,考虑用支持部分缺失的方法(MOFA2)而不是一刀切只要完全配对。另一个策略是分步整合:先做两两整合,最后汇总结论。

坑 4:忽略缺失模式的非随机性

UpSet plot 显示某些样本组合的缺失不是随机的(比如所有 stage IV 患者都缺蛋白组数据),这意味着整合结果会对晚期患者产生偏差。在报告中必须说明缺失模式,并讨论对结论的影响。

下一步

接着深入

横向延伸

参考资源

AI 组学实践

让 AI 带我实战这一篇

AI 会读这篇文章后给你 3-5 步学习计划, 逐步带你学完,最后出 1-3 道题验证你掌握得怎么样。 登录后 AI 才能记住你的进度。

静态文件

离线资料下载

手册 HTML / PDF 已在后台预生成,点击后直接下载网站静态资源。