生信名词扫盲
跟完这篇,您能看懂一份 GEO 数据和一张差异分析结果表里出现的绝大多数术语,不再被 GSE、TPM、padj、批次效应这些词卡住,还能用几行标准代码把编号真正变成手里的数据。
这是一份「速查」,不是从头讲原理的教材。术语按您做分析时碰到的先后顺序分成四组,每个词只给两句话:一句「它是什么」,一句「什么时候会碰到它」。看不懂的时候翻回来对一眼即可,不用背。
怎么用这份速查
- 第一次下载公共数据、拿到一堆编号看不懂,先看「数据与文件」。
- 打开表达矩阵,发现数字有的是整数、有的是小数,去看「定量单位」。
- 跑完差异分析、面对一张结果表里的一堆列名,去看「差异分析」。
- 读文献或看报告时遇到一串大写字母缩写,去「常见缩写」里查。
下面每组都用一张表:左边是术语,中间一句话讲清,右边告诉您在哪一步会遇到它。带代码的地方,照着改成自己的文件名就能跑。
数据与文件
这一组是您拿到数据、认清它长什么样时会碰到的词。
| 术语 | 一句话讲清 | 什么时候会碰到它 |
|---|---|---|
| GEO | NCBI 旗下最常用的公共基因表达数据仓库,别人发文章时把数据存这里。 | 想找一套现成的公共数据复现或验证时。 |
| GSE | 一个「研究」的编号(GEO Series),对应一篇文章的一整套数据。 | 在 GEO 里搜到一个数据集,页面标题就是 GSExxxxx。 |
| GSM | 一个「样本」的编号(GEO Sample),一个 GSE 下面挂着许多 GSM。 | 想知道某个 GSE 里到底有哪些样本、分几组时。 |
| GPL | 一个「平台」的编号(GEO Platform),说明数据是用哪种芯片或测序平台产出的。 | 需要知道探针 ID 怎么对应到基因、或判断新旧平台能不能合并时。 |
| SRA | NCBI 存放测序原始数据(reads)的仓库,GEO 里的测序数据原文件通常放在这。 | 想从最原始的测序文件自己跑起,而不是用作者算好的矩阵时。 |
| reads | 测序仪一次读出的一小段序列,是最原始的测序产物。 | 看到 fastq 文件、或文章里写「共产出多少 M reads」时。 |
| 比对(alignment) | 把每一条 read「贴」回参考基因组或转录组上,确定它来自哪个位置、哪个基因。 | 从原始 reads 走到「每个基因多少条」这一步的中间环节。 |
| 测序深度(depth) | 大致衡量一个样本测得「够不够多」,常用总 reads 数或平均覆盖倍数表示。 | 判断数据质量、或解释某个基因为什么测不到时。 |
| 表达矩阵 | 一张「基因 × 样本」的表:行是基因,列是样本,格子里是表达量。 | 几乎所有下游分析的起点,差异分析、聚类都从它开始。 |
| Ensembl ID | 一种稳定的基因编号,形如 ENSG00000141510,机器友好、不易重名。 | 表达矩阵的行名常是这种 ID,画图前往往要转成好认的名字。 |
| Symbol | 基因的常用名,形如 TP53,人一眼能认,但偶尔会改名或重名。 | 做图、写文章、跟人交流时用的名字。 |
| Entrez ID | NCBI 用的一串纯数字基因编号,如 7157,很多注释工具内部认它。 | 做富集分析时,某些工具要求先把基因转成 Entrez ID。 |
把这些编号变成手里的数据,最省事的是 GEOquery:给它一个 GSE 编号,它就替您把作者上传的表达矩阵和样本信息一起拉下来。
library(GEOquery)
# 用 GSE 编号拉取一套公共数据(含表达矩阵与样本信息)
gse <- getGEO("GSE12345", GSEMatrix = TRUE)
eset <- gse[[1]] # 一个 GSE 可能对应多个平台,这里取第一个
expr <- exprs(eset) # 表达矩阵:行是探针或基因,列是样本
pheno <- pData(eset) # 样本信息:分组、来源、批次等
拿到的 expr 行名常是探针号或 Ensembl ID,画图前一般要转成认得出的 Symbol。三种基因 ID 的互转,clusterProfiler 里有个常用函数可以做:
library(clusterProfiler)
library(org.Hs.eg.db) # 人类的基因注释库
# 把 Ensembl ID 批量转成 Symbol 与 Entrez ID
id_map <- bitr(
gene_ids,
fromType = "ENSEMBL",
toType = c("SYMBOL", "ENTREZID"),
OrgDb = org.Hs.eg.db
)
提醒一句:ID 转换从来不是一一对应,总会有一部分转不出来或一对多,这属于正常现象,别指望零丢失。怎么下数据、怎么理 ID,展开可看 从 GEO 下载数据 与 基因 ID 互转。
定量单位
同一份数据,表达量可以用不同「单位」表示。先分清哪种能直接比、哪种需要归一化,能少踩很多坑。
| 术语 | 一句话讲清 | 什么时候会碰到它 |
|---|---|---|
| counts | 原始读数计数:一个基因上「落」了多少条 reads,是整数。 | 做差异分析(DESeq2、edgeR)时,它们要的正是这种原始 counts。 |
| CPM | Counts Per Million,只按测序深度做了缩放,抵消「测得多测得少」。 | 想在样本之间粗略比较、或做低表达基因过滤时。 |
| TPM | Transcripts Per Million,同时校正了基因长度和深度,样本内不同基因也较可比。 | 想比较「同一样本里哪个基因表达更高」、或画热图时。 |
| FPKM / RPKM | 也校正了长度和深度的老单位;FPKM 对应双端测序,RPKM 对应单端。 | 读较早的文献、或作者只提供了这种矩阵时。 |
| normalization(归一化) | 去掉技术性差异(深度、文库大小等),让样本之间能公平比较。 | 差异分析、聚类、画图前几乎都要先做,多数工具会替您做好。 |
一条常被忽视的原则:差异分析要喂原始 counts,别喂已经归一化过的 TPM/FPKM——像 DESeq2 这类方法会在内部自己做归一化,喂错单位会让结果不可靠。TPM/FPKM 更适合可视化和样本内比较。
# DESeq2 的输入应是原始 counts 矩阵(整数),而不是 TPM / FPKM
dds <- DESeqDataSetFromMatrix(
countData = counts_matrix, # 原始 counts
colData = sample_info, # 每个样本属于哪一组
design = ~ group
)
单位怎么选、怎么互相换算,展开可以看 看懂表达量单位。
差异分析
这一组是您跑完差异分析、面对结果表和下游解读时最常遇到的词。
| 术语 | 一句话讲清 | 什么时候会碰到它 |
|---|---|---|
| DEG | Differentially Expressed Gene,差异表达基因:两组之间表达量有显著差异的基因。 | 差异分析的核心产出,「筛出了多少个 DEG」就是在说它。 |
| fold change(FC) | 倍数变化:处理组相对对照组表达量的比值,2 就是高一倍。 | 衡量「差异有多大」时。 |
| log2FC | 对 fold change 取以 2 为底的对数:+1 表示上调一倍,-1 表示下调一半。 | 结果表里几乎必有这一列,火山图的横轴也是它。 |
| p 值 | 「如果两组其实没差异,出现眼前这么大差异的概率」,越小越不像是偶然。 | 判断单个基因差异是否显著时。 |
| 多重检验问题 | 一次同时检验上万个基因,光靠运气也会冒出一批「假显著」。 | 解释为什么不能只看原始 p 值时。 |
| padj / FDR | 校正多重检验后的 p 值;FDR(假发现率)估计「筛出的一批里有多少是假的」,常用 BH 法算出,结果列名多写作 padj。 | 筛 DEG 时该用来卡阈值的,是它,而不是原始 p 值。 |
| 批次效应(batch effect) | 因不同批次、不同日期、不同机器带来的系统性技术差异,会假装成生物学差异。 | 样本分组恰好和处理时间重合、聚类时样本按批次而非分组聚在一起时。 |
| 富集分析(enrichment) | 看您这批 DEG 是否「扎堆」落在某些已知通路或功能类别里,把一串基因翻译成生物学含义。 | 拿到 DEG 之后,想回答「它们到底在干什么」时。 |
筛 DEG 时常见的一组阈值是 padj < 0.05 且 |log2FC| > 1(即倍数变化超过 2 倍)。请把它当常用惯例、不是铁律:样本量小、信号弱时可以放宽,DEG 太多时可以收紧,关键是先想清楚您要的是「宁缺毋滥」还是「不漏掉」。为什么要用 padj 而不是原始 p 值,可看 多重检验校正。
一张典型的 DESeq2 结果表长这样,认得列名就够用:
# DESeq2 结果表的主要列:
# baseMean 该基因的平均表达水平
# log2FoldChange 两组间的 log2 倍数变化
# pvalue 原始 p 值
# padj 校正后的 p 值(用它来卡阈值)
res <- results(dds)
# 按常用惯例筛 DEG(阈值请按您的数据调)
deg <- subset(res, padj < 0.05 & abs(log2FoldChange) > 1)
逐列读懂这张表,可看 看懂差异分析结果表。
批次效应处理有两条常规路子:能提前记录批次的,就把批次放进统计模型的设计里一起估计;只是为了可视化,则常用 limma::removeBatchEffect 之类先「扣掉」批次再画图。
# 能记录批次时,把它放进模型里,让差异估计自动扣掉批次的影响
design <- ~ batch + group
# 只为画图去批次时用这一步——别把去批次后的数据再拿去做差异检验
library(limma)
expr_for_plot <- removeBatchEffect(log_expr, batch = sample_info$batch)
要点是先识别、别硬洗——把真信号一起洗掉,比留着批次效应更糟。更细的做法见 处理批次效应。
常见缩写
读文献、看报告时最常撞见的一串大写字母,集中放这儿备查。
| 缩写 | 全称 / 含义 | 什么时候会碰到它 |
|---|---|---|
| RNA-seq | 转录组测序,测量样本里各基因的表达量。 | 最常见的表达数据来源。 |
| QC | Quality Control,质量控制:上游滤掉低质量数据的一系列检查。 | 正式分析前的第一步。 |
| PCA | 主成分分析,把高维数据压到二维看样本整体分布。 | 看分组是否分得开、有没有离群样本或批次效应时。 |
| GO | Gene Ontology,一套标准化的基因功能分类体系。 | 做富集分析、想知道 DEG 涉及哪些功能时。 |
| KEGG | 一个常用的通路数据库,把基因组织成代谢与信号通路。 | 做通路富集、想落到具体通路时。 |
| ORA | Over-Representation Analysis,看某功能类别在 DEG 里是否「超额出现」。 | 已经筛好一批 DEG,想做富集时最常用的一种。 |
| GSEA | Gene Set Enrichment Analysis,不先卡阈值,用全部基因的排序做富集。 | 差异不强、不想硬筛 DEG 时的另一种富集思路。 |
| FDR | False Discovery Rate,假发现率,即校正后的错误比例。 | 卡显著性阈值时,和 padj 常指同一件事。 |
ORA 与 GSEA 这两条富集路子怎么选、怎么跑,展开见 富集分析入门。
在平台上跑一遍
这些名词您其实不必背下来。在百沐一下上,您只要上传数据、用大白话说清「想比哪两组、想看什么」,平台就替您把 ID 转换、归一化、批次、富集这些环节接好——遇到不认识的列名,也可以直接问它「这一列是什么意思」。第一次上手可以先看 /docs/first-run。
相关
- 准备一份干净的表达矩阵 —— 把上面这些概念落到一张能直接分析的表上。
- 在 GEO 里找到合适的公共数据 —— 从 GSE、GSM、GPL 开始动手检索。
- 用 DESeq2 跑一次差异分析 —— 从 counts 到一张 DEG 表,完整走一遍。
- 富集分析入门 —— 把筛出的 DEG 翻译成生物学含义。