跳到正文
百沐一下百沐一下
本节目录

数据不全怎么办

跟完这篇,您能在只有 FASTQ、或只有 TPM、缺少可做差异分析的原始 counts 时,用 recount3 或 ARCHS4 按 GSE / SRP 编号取到统一定量的 counts,并清楚知道这两个库覆盖不到哪些数据。

先判断:您缺的到底是什么

做差异表达分析(DESeq2、edgeR)要的是原始整数 counts。但从公共数据里,您常常只拿到半截:投稿者只放了 FASTQ 原始 reads,或只放了归一化后的 TPM。这两种情况的共同缺口,都是「没有可直接分析的 counts」。

先照下面这张表对号,判断该走哪条路:

您手上有缺的是首选做法
只有 FASTQ 原始 reads统一定量的 counts(自己比对费时费算力)先查 recount3 / ARCHS4 有没有现成 counts;没有再自己定量
只有 TPM / FPKM原始 counts(TPM 无法可靠还原成 counts)从 recount3 / ARCHS4 按 GSE / SRP 取同一批样本的 counts
只有一个 GSE 号,不知有没有定量counts同上,直接按编号去库里查

这里有个容易被忽略的关键点:TPM 不能反算回 counts。TPM 已经把测序深度和基因长度都归一化掉了,缺了每个样本的原始文库大小,就没法还原成整数计数——就算硬凑一个也是错的。所以「只有 TPM」时,正确的动作不是去转换,而是换个地方把 counts 取回来。TPM 为什么不能做差异分析,见 count / TPM / FPKM / CPM 该用哪个

recount3 与 ARCHS4 替您做了什么

这两个公共资源做的是同一件事:把 SRA / GEO 里海量的 RNA-seq 原始 reads,用一条统一的流程重新定量了一遍,直接提供基因层的计数。您不用自己下 FASTQ、不用自己比对,按研究编号取现成的 counts 就行。

它们最大的价值有两点:一是省掉了比对定量的时间和算力,二是同一个库里所有样本用的是同一条流程——这让跨样本、跨研究的比较更公平。

资源物种提供的单位定量流程按什么取
recount3人、小鼠(另含 GTEx、TCGA)基因 / 外显子 / 剪接位点的覆盖度计数(可转成 counts)Monorail(STAR 比对后按碱基覆盖度汇总)SRA 研究号 SRP
ARCHS4人、小鼠基因 / 转录本的估计计数(counts)kallisto 伪比对GEO 编号 GSE / GSM

一句话记住取用入口:recount3 认 SRP,ARCHS4 认 GSE。下面分别走一遍。

先把 GSE 翻译成 SRP

recount3 是按 SRA 研究号(SRP)组织的,而您手里往往是一个 GEO 的 GSE 号。做 recount3 之前,先把 GSE 翻成对应的 SRP:

  1. 打开 GSE 详情页:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE12345(把编号换成您的)。
  2. 拉到页面下方的 Relations 一栏,找 SRA 那一行,链接里就带着 SRPxxxxxxPRJNAxxxxxx
  3. 记下这个 SRP 编号——它就是 recount3 里定位这项研究的钥匙。

用 ARCHS4 则不用这一步,它本身就按 GSE / GSM 检索,直接用您手里的 GSE 号即可。

用 recount3 按 SRP 取 counts

recount3 通过 Bioconductor 的同名 R 包访问。流程是:列出可用研究 → 按 SRP 定位 → 构建对象 → 把覆盖度计数转成可分析的 counts。

library(recount3)

# 列出全部可用研究(默认人;小鼠传 organism = "mouse")
projects <- available_projects()          # organism = "human"

# 按 SRP 定位到您的研究,project_type 取 data_sources(单项研究)
proj <- subset(projects,
               project == "SRP123456" & project_type == "data_sources")

# 为这项研究构建对象,默认下载基因层数据
rse <- create_rse(proj)

拿到 rse 后,注意一个关键细节:recount3 的原始值是「覆盖度计数」,不是直接的读段计数。它由碱基级覆盖度汇总而来,跟 featureCounts 的整数不完全是一回事。要做差异分析,先用 transform_counts() 把它缩放成近似读段计数的 counts:

# 把覆盖度计数转成可交给 DESeq2 的 counts,存成一个新的 assay
assay(rse, "counts") <- transform_counts(rse)

# 取出计数矩阵和样本信息,接下游差异分析
counts <- assay(rse, "counts")            # 行是基因、列是样本
meta   <- colData(rse)                    # 样本元信息(含表型字段)

counts 就是行基因、列样本的计数矩阵,整理成标准形状后即可交给 DESeq2。要提醒的是,recount3 的数值和您自己跑 featureCounts 得到的不会逐个相等,但库内部彼此一致,做差异分析没问题——只是别把它和别处来的 counts 混进同一张矩阵里比。

用 ARCHS4 按 GSE 取 counts

ARCHS4 把人和小鼠的基因计数打包成大文件(HDF5,.h5),从官网下载后用 R 的 rhdf5 包按需抽取。它的元信息里带着每个样本属于哪个 GSE,所以能直接按 GSE 号把一项研究的全部样本挑出来。

第一步,先看清 H5 文件的内部结构——不同版本的字段路径略有差异,h5ls() 列一遍是最稳的做法,照实际字段名来写:

library(rhdf5)

h5 <- "human_gene_v2.latest.h5"    # 从 ARCHS4 官网下载的人类基因计数文件
h5ls(h5)                           # 列出内部结构,确认下面几个字段的确切路径

确认路径后,读入样本元信息,按 GSE 号筛出目标样本,再抽取这些列的计数:

# 下面的字段路径以 h5ls() 列出的实际名字为准,这里按常见命名示意
series <- h5read(h5, "meta/samples/series_id")      # 每个样本所属的 GSE
gsm    <- h5read(h5, "meta/samples/geo_accession")  # 每个样本的 GSM 号
genes  <- h5read(h5, "meta/genes/symbol")           # 基因名

idx  <- which(series == "GSE12345")                 # 命中目标研究的样本
expr <- h5read(h5, "data/expression",
               index = list(NULL, idx))             # 只抽这些样本的列
rownames(expr) <- genes
colnames(expr) <- gsm[idx]

expr 就是这项研究的基因计数矩阵。ARCHS4 给的是 kallisto 估计计数,多数为整数;DESeq2 只认整数,若遇到小数,取整一次即可:

expr <- round(expr)                # 确保是整数矩阵,再交给 DESeq2

取不到怎么办:如实说清覆盖边界

这两个库很省事,但不是万能的。动手前先知道它们覆盖不到哪里,免得在库里空搜半天:

边界具体情况该怎么办
只有人和小鼠其他物种(大鼠、斑马鱼、植物等)两个库都没有只能自己下 FASTQ 比对定量
有处理 / 更新截止非常新的研究可能还没被纳入查不到就当作「暂未收录」,走自建定量
主要是 bulk RNA-seq单细胞、特殊文库多不在内单细胞按单细胞流程另做
计数口径不统一recount3(覆盖度)、ARCHS4(kallisto)、您自己(featureCounts)三者数值不同一次分析只用一个来源的 counts,别混着做差异分析

如果确实取不到、手上又只有 FASTQ,那就回到自己定量这条路。标准做法是用 salmon 定量、再用 tximport 汇总到基因层(下面是简化示意,不是完整脚本):

# 自己定量:salmon 对每个样本跑一遍(标准流程,示意)
salmon quant -i salmon_index -l A \
  -1 sample_R1.fastq.gz -2 sample_R2.fastq.gz \
  -p 8 --gcBias -o quant/sample
library(tximport)
# 把每个样本的 salmon 输出汇总成基因层计数
txi <- tximport(files, type = "salmon", tx2gene = tx2gene)
# txi$counts 即基因计数,可用 DESeqDataSetFromTximport 直接建对象

诚实说一句:自己定量要准备转录组索引、要算力、要时间,跑完还得核对。所以顺序永远是——先查 recount3 / ARCHS4 有没有现成的,没有再自己动手

在平台上跑一遍

在百沐一下,取公共 counts 这一步不用写代码:把 GSE 或 SRP 编号交给组学智能体,说清「帮我取这项研究统一定量的 counts 用来做差异分析」,平台会替您到公共资源里定位、取回基因计数、整理成标准矩阵,接着往下接差异分析;确实取不到时,它也会如实告诉您这项研究不在覆盖范围内,而不是硬凑一个。

从这里开始:组学智能体使用指南,或直接进入 https://app.baimuyixia.com

相关