信息速览
INFOBOX
| 项 | 值 |
|---|---|
| 全名 | Rfam(RNA families database) |
| 维护方 | EMBL-EBI + Harvard Eddy Lab + NIH Nawrocki |
| 当前版本 | Rfam 15.1(发布 2025-12-22) |
| 家族数 | 4,227 |
| clan(超家族) | 151 |
| 种子序列总数 | 109,390 条 |
| 每家族种子中位 | 5 条(最大 1,613) |
| 全区域命中 | 7,076,208 条(EBI Search 索引值) |
| 核心构件 | 协方差模型(CM)——能同时建模序列与二级结构 |
| 软件栈 | INFERNAL v1.1.4 |
| 许可 | CC0 |
| 最大的坑 | 「7,076,208 个条目」不是「707 万个家族」——它是 full region 命中数,家族只有 4,227 个 |
§0 E-E-A-T 信任声明与免责声明
我们是谁:千方病案医学编辑部,为中文医学 AI 社区整理可训练数据集的结构化说明。
本条目怎么来的:家族数 4,227 取自 Rfam 15.1 官方 README 原文(“Rfam 15.1 contains 4227 families”)与 Rfam.seed.gz 里 #=GF AC 行数(4,227,一致)。种子规模、类型分布、clan 结构由我们**实际解析 Rfam.seed.gz(5,928,432 B,与 Content-Length 一致)与 family.txt.gz(4,227 行 × 35 列)**得出。全区域命中数 7,076,208 取自 EBI Search indexInfos。
我们不做什么:本条目不提供二级结构预测、不评估任何家族模型的质量、不做 benchmark。§7.7 的口径矩阵只解释"为什么两个官方数字差 1,675 倍"。
已知局限:
- 本篇引用的种子级统计(中位 5 条、最大 1,613)只覆盖 seed 比对,不覆盖 full region 命中。
- 我们没有跑 cmsearch,所有"命中数"都是官方声明值,未经我们重算。
- 有些家族的
TP有多个值(如同时标Gene与sRNA),所以 §4.2 的类型计数之和大于 4,227。
§1 数据集概览
§1.0 📌 30 秒速览
Rfam 做的事情,一句话:为每一个已知的非编码 RNA 家族,做一把"能在基因组里把它找出来"的搜索器。
规模(Rfam 15.1,2025-12-22 发布):
| 指标 | 数值 |
|---|---|
| 家族数 | 4,227 |
| clan(超家族) | 151 |
| 种子序列总数 | 109,390 |
| 每家族种子中位 | 5 条 |
| 全区域命中(cmsearch 扫 RFAMSEQ) | 7,076,208 |
三个必须先知道的形状问题:
- 4,227 个家族,不是 707 万个。 EBI Search 索引里的 7,076,208 是全区域命中数——即"用 4,227 个模型扫遍 RFAMSEQ 数据库,一共找到 707 万处匹配"。这两个数差 1,675 倍,混用会得出荒谬结论。
- 每个家族的种子比对极小——中位数只有 5 条序列。 这看起来"数据量太少",但它不是用来训练统计模型的,而是用来构建协方差模型的:5 条精心挑选的同源序列 + 一致的结构,就能训练出一个能扫描全基因组的模型。这与机器学习意义上的"训练集"完全不同。
Gene类型占 3,655/4,227 = 86.5%,但Gene是 SO 里的一个宽泛类别(0000704,泛指"基因"),不能读成"86.5% 是蛋白编码基因"——Rfam 只收非编码 RNA,这里的Gene指的是"某个基因位点产生的 ncRNA"(如细菌 sRNA、真核 lncRNA)。
如果你要注释一个基因组里的非编码 RNA、要判断一段序列属于哪个 RNA 家族、要拿二级结构做设计,Rfam 是基准;如果你要"某个 RNA 的全部序列",去 RNAcentral(#137)。
§1.1 技术摘要
| 维度 | 值 |
|---|---|
| 家族数 | 4,227 |
| clan 数 | 151 |
| 种子序列 | 109,390 条(中位 5 / 最大 1,613) |
| 家族类型数 | 22+(SO 对齐) |
| 核心文件 | Rfam.seed.gz(5.9 MB)、Rfam.cm.gz(数百 MB)、Rfam.full_region.gz(数 GB) |
| 元数据表 | family.txt.gz(4,227 行 × 35 列) |
| 比对格式 | Stockholm 1.0 |
| 二级结构记法 | WUSS(< > 配对、: 保守单链、_ 可变区) |
| 建模软件 | INFERNAL v1.1.4 |
| 阈值体系 | GA / TC / NC 三级 |
| 访问方式 | FTP 全量 + 网站 + API |
Rfam.seed.gz只有 5.9 MB 这个事实很说明问题:4,227 个家族的全部手工比对,压缩后不到 6 MB。这是"精"的极端——相比之下 RNAcentral 的全量 FASTA 是数十 GB。 两个库代表了两条完全相反的数据哲学。
§1.2 战略价值
第一,它是唯一一个"同时建模序列与结构"的 RNA 注释资源。 普通的序列比对(BLAST)只能找序列相似的;Rfam 的协方差模型同时看序列保守性与碱基配对模式——所以它能找到"序列已经变得很不像,但二级结构还保持着"的远缘同源。这是 RNA 基因家族发现的唯一可行方法。
第二,它是 RNA 二级结构注释的事实标准。 如果一篇论文说"这个 lncRNA 含有一个 HACA-box 结构域",几乎可以肯定是用 Rfam 判定的。做任何 RNA 结构相关的工作,都得过这一关。
第三,clan 机制解决了"家族重叠"问题。 151 个 clan 把同源但结构有差异的家族归为一组(如 CL00001 把 tRNA 与 tmRNA 归为一个 clan)。做注释时必须用 clan 级别的去重——否则同一段序列会同时命中同一 clan 里的 3 个家族,产生三重注释。
第四,它是 RNAcentral 的结构来源。 在 #137 里我们看到 RNAcentral 有 has_secondary_structure: 22,529,080 条,这些二级结构全部来自 Rfam。两个库是 1:N 的上下游关系。
§1.3 同类资源横向对比
| 资源 | 定位 | 与 Rfam 的关系 |
|---|---|---|
| Rfam(本条) | RNA 家族 + 协方差模型 | 唯一"序列+结构"双建模的公共库 |
| RNAcentral(#137) | 序列索引(6,005 万条) | 下游:用 Rfam 的模型做二级结构注释 |
| Pfam | 蛋白家族 + HMM | 同构类比:Pfam 之于蛋白,正如 Rfam 之于 RNA。都用"比对→模型→扫描"的范式 |
| miRBase | miRNA 目录 | 部分重叠:Rfam 里有 1,598 个 miRNA 家族的标记 |
| GtRNAdb | tRNA 目录 | tRNA 家族在 Rfam 里只有 64 个——tRNA 的精细分类要看 GtRNAdb |
| SILVA / Greengenes | rRNA 分类 | rRNA 家族在 Rfam 里只有 14-22 个——rRNA 的精细分类要看 SILVA |
| CRW | 比较 RNA 网络(结构对齐) | 更早的结构数据库,部分被 Rfam 吸收 |
| Infernal | 软件(不是数据) | Rfam 的建模引擎;Rfam.cm 可直接喂给 Infernal |
Pfam 那一行的类比值得展开:Pfam 有约 2 万个蛋白家族,Rfam 只有 4,227 个 RNA 家族。这个 5 倍的差距不是"RNA 家族少",而是"研究 RNA 的人少"。按已知非编码 RNA 的多样性估计(尤其细菌 sRNA 与真菌 lncRNA),真实家族数可能远超 4,227。Rfam 的规模反映的是校订人力,不是生物学边界。
§1.4 版本时间轴
官方 release_stats.tsv 给出的完整家族数增长史:
| 版本 | 时间 | 家族数 |
|---|---|---|
| 0.1 | 2002-07 | 4 |
| 1.0 | 2002-08 | 25 |
| 4.0 | 2003-05 | 114 |
| 6.0 | 2004-05 | 350 |
| 7.0 | 2005-03 | 503 |
| 8.0 | 2007-02 | 574 |
| 9.1 | 2008-12 | 1,372(阶跃) |
| 10.0 | 2010-01 | 1,446 |
| 11.0 | 2012-08 | 2,208 |
| 12.0 | 2014-09 | 2,450 |
| 13.0 | 2017-09 | 2,686 |
| 14.0 | 2018-08 | 2,791 |
| 14.3 | 2020-09 | 3,446 |
| 14.4 | 2020-12 | 3,941 |
| 15.1 | 2025-12 | 4,227 |
这条曲线有三个值得注意的点:
- 9.1(2008)从 607 跳到 1,372——这是引入自动化的批量导入(尤其细菌 sRNA)。
- 14.4(2020-12)从 3,446 跳到 3,941——一批微孢子虫与真菌 RNA 被集中录入。
- 15.1(2025-12)到 4,227——五年只增加 286 个,增速明显放缓。这说明容易做的大多数家族已经做完了,剩下的是难做的(高度变异、结构不确定、种子序列极少)。
5 年只增 286 个家族,这是「人工校订」这个模式的物理极限。每年约 57 个新家族,每个需要文献调研 + 序列搜集 + 结构比对 + 模型校准。这条增速线说明:Rfam 的扩张速度,取决于有多少博士愿意做这件事。
§1.5 典型应用场景
场景一:基因组非编码 RNA 注释。 拿 Rfam.cm 扫一个新测序的基因组,找出所有的 tRNA、rRNA、sRNA、riboswitch。这是 Rfam 最高频的用法,几乎所有细菌基因组注释流程都会跑这一步。
场景二:RNA-seq 数据的功能分类。 把测到的非编码转录本按 Rfam 家族归类——是 miRNA 前体、snoRNA、还是未知的 lncRNA。
场景三:二级结构设计。 要设计一个 riboswitch 或 aptamer,先查 Rfam 里同家族的共识结构,作为设计起点。
场景四:家族归属的判定。 发现一段保守的非编码序列,想知道它是否属于已知家族。如果说"不属于任何 Rfam 家族",这本身就是一个可发表的发现(候选新家族)。
场景五:clan 级别的同源分析。 同一 clan 里的家族结构相似但序列差异大,用 clan 做进化分析比用单个家族更稳。
§2 RNA 家族与协方差模型的科学前提
§2.1 一个 “RNA 家族” 到底是什么
Rfam 对家族的定义,可以概括为:
一组同源的 RNA 序列,它们不仅序列上有相似性,而且折叠成相同的二级结构。
"同源"与"相同的二级结构"这两个条件必须同时满足。只序列相似但结构不同,不算同一个家族;结构相似但序列差异极大(如不同的 tRNA isoacceptor),可能算同一 clan 的不同家族。
一个家族的记录里,最重要的一行不是序列,是 #=GC SS_cons:
#=GC SS_cons :::::::::<<<<<<──-<<-<<────────────-<<<<_____>>>>──────────────>>→>>→→>>>>>>::::::((((,,,...
这一行用 WUSS 记法描述了所有家族成员共有的二级结构:< 与 > 表示一对配对的碱基,: 表示保守的单链位置,_ 表示可变区,, 表示不保守的单链。它不是某一个成员的结构,是所有成员结构的"最大公约数"。
这是理解 Rfam 的核心:它存的不是"序列集合",是**"序列 + 结构"的联合模式**。这也是为什么 5 条序列就够——因为每条序列都在同一个结构框架里被对齐了。5 条经过结构对齐的序列,信息量远大于 5,000 条未对齐的序列。
§2.2 协方差模型为什么比序列比对强
普通的序列比对(BLAST / HMMER)有一个根本局限:它只看位置的独立性。如果位置 i 是 A,位置 j 是 U,HMM 会分别给"i 是 A"和"j 是 U"打分,但不会知道"i 与 j 必须配对"。
协方差模型(Covariance Model, CM)显式建模位置之间的相关性:
| 情况 | HMM 打分 | CM 打分 |
|---|---|---|
| i=A, j=U(配对) | 各位置独立给分 | 高(符合配对模式) |
| i=G, j=C(配对,但变异了) | i 位置给低分 | 仍然高分(因为 G-C 也是配对) |
| i=A, j=A(不配对) | i 位置高分 | 低分(破坏结构) |
这就是 CM 的杀手锏:它允许"配对的碱基种类变了,但配对关系保持"。这在进化上极其常见——一个保守的发夹结构,茎区的碱基可以全部互换(A-U 变 G-C),序列同源性已经跌到 30% 以下,但结构完全一样。
BLAST 找不到这种远缘同源,CM 能找到。 这是 Rfam 不可替代的技术基础。
代价是计算量:CM 的搜索复杂度是 O(L³) 到 O(L⁴)(L 是序列长度),比 HMM 的 O(L) 高得多。所以 Rfam.cm 扫一遍全基因组要几小时到几天——这也是为什么 Rfam 预先把扫描结果(full region)算好发布。
这个代价有一个直接后果,值得单独说清楚:既然自己跑一遍那么慢,Rfam 官方才会把扫描结果预先算好、打包成 full_region.gz 发布。也就是说,99% 的使用场景不需要自己跑 cmsearch,直接读官方结果就行。什么时候必须自己跑?只有三种情况:
| 场景 | 为什么不能直接用官方结果 |
|---|---|
| 物种不在官方扫描范围内 | 官方只扫了 RefSeq / Ensembl 等几个库的物种,你自己的新组装基因组没被扫过 |
| 要调低阈值捞远缘成员 | 官方结果按 GA 阈值筛过,低于 GA 的命中不在里面 |
| 要局部区域而非全区域 | 官方给的是 full region(含两侧延伸),你要的可能是严格的核心区 |
自己跑 cmsearch 时,有一个参数必须调,否则结果和官方对不上:
# 官方扫描用的近似命令(关键在 -Z 与 --cut_ga)
cmsearch --cut_ga --rfam --nohmmonly -Z <数据库总碱基数(Mb)> Rfam.cm genome.fa
-Z 是"数据库大小",单位是兆碱基。它决定 E 值的分母——同样的 bit score,-Z 填大了 E 值就变大(更严格),填小了就变宽松。这是自己跑的结果与 full_region.gz 对不上的第一大原因:官方扫的是几个库的总和(几万 Mb),你扫的是单个基因组(几 Mb),如果不手动把 -Z 设成官方值,E 值阈值会等价于被放松了几千倍。
实操建议:注释用
--cut_ga(直接按每个家族自己的 GA 阈值切),不要用-E。--cut_ga与数据库大小无关,这才是"和官方结果可比"的唯一方式。用了-E 1e-5之类的东西,结果就只对你自己有效,不能与 full region 对账。
§2.3 三个阈值:GA / TC / NC
每个家族都有三个打分阈值(bit score):
| 阈值 | 全称 | 用途 | 取法 |
|---|---|---|---|
| GA | Gathering threshold | 注释用的阈值 | 高于此分才算"真的属于这个家族" |
| TC | Trusted cutoff | 训练用的阈值 | 高于此分的命中被认为是"可信的真阳性",用于重新训练模型 |
| NC | Noise cutoff | 噪声阈值 | 低于此分视为噪声,不进入 full region 清单 |
三者的大小关系是 GA ≤ TC,而 NC 通常低于 GA(有些家族 NC 高于 GA,情况复杂)。
实践上只需要记一件事:做注释用 GA。Rfam.full_region.gz 是按 GA 阈值筛过的清单——这就是那 707 万条命中的来源。
GA 阈值是每个家族单独定的,不是全局统一值。一个高度保守的家族(如 tRNA)GA 可能是 20 多,一个变异极大的家族(如某些 lncRNA)GA 可能是 40 多。所以"跨家族的 bit score 不能直接比较"——一个家族的 30 分可能是强命中,另一个家族的 30 分可能是噪声。
§2.4 clan:解决家族重叠的机制
151 个 clan 把同源家族归组。规模分布:
| clan 成员数 | clan 数 |
|---|---|
| 1 个成员 | 1 |
| 2 个 | 82 |
| 3 个 | 25 |
| 4 个 | 19 |
| 5 个 | 7 |
| 6 个 | 4 |
| 7 个 | 6 |
| 8 个 | 3 |
| 9 个 | 2 |
| 10 个 | 1 |
| 11 个 | 1 |
最大的几个 clan:
| clan | 成员 | 说明 |
|---|---|---|
| CL00001 | tRNA、tmRNA、mt-tmRNA、tRNA-Sec、alpha/beta/cyano_tmRNA(7 个) | tRNA 超家族 |
| CL00002 | RNaseP-T、RNaseP_arch、RNaseP_bact_a/b、RNaseP_nuc、RNase_MRP、RNase_P(7 个) | RNase P 超家族 |
| CL00003 | Archaea_SRP、Bacteria_large_SRP、Bacteria_small_SRP、Metazoa_SRP、Plant_SRP、Fungi_SRP、Protozoa_SRP 等(9 个) | SRP RNA 超家族 |
| CL00004 | Sacc_telomerase、Telomerase-cil、Telomerase-vert、Telomerase_Asco(4 个) | 端粒酶 RNA |
| CL00005 | Gl_U1、U1、U11、U1_yeast(4 个) | U1 剪接体 RNA |
clan 的实用价值只有一个,但极其重要:注释去重。如果一段序列同时命中
tRNA与tRNA-Sec(同一 clan),这不是"两个发现",是"一个发现被两个模型各抓到一次"。必须按 clan 合并,只保留 bit score 最高的那个。
§2.5 为什么家族层对医学 AI 重要
因为 RNA 二级结构正在变成药物设计的靶点,而 Rfam 是结构注释的基准。
三个具体的链路:
- 小分子靶向 RNA。近年获批的 risdiplam(脊髓性肌萎缩症)作用于 SMN2 前体 mRNA 的剪接位点;核糖开关(riboswitch)是抗菌药物研发的热门靶点。这类工作第一步是"这个 RNA 有什么结构元件"——Rfam 的
SS_cons直接给。 - miRNA 前体的结构决定加工。pri-miRNA 的发夹结构必须被 Drosha 正确识别。发夹的茎长、环大小、凸起位置都影响加工效率——这些参数在 Rfam 的 miRNA 家族比对里能看到。
- 病毒 RNA 的结构元件。SARS-CoV-2 的 5’-UTR 有多个保守发夹(SL1-SL5),这些结构元件的注释直接来自 Rfam 类的分析。
这就是它被收录的理由:它不是疾病数据,但它是把"RNA 序列"翻译成"可成药的结构元件"的那一层。
§2.6 质量标准的边界:Rfam 保证什么、不保证什么
| 保证 | 不保证 |
|---|---|
| 种子比对经过人工校订 | 校订一定正确 |
| 协方差模型能复现种子比对的结构 | 模型能覆盖家族的全部多样性 |
| GA 阈值经过校准 | 阈值在你的物种上最优 |
| full region 命中是 cmsearch 的真实输出 | 命中全是真阳性 |
| clan 关系反映已知的同源性 | clan 边界是最终的 |
最需要注意的一条是「GA 阈值在你的物种上最优」。GA 阈值是全局的——对家族被首次描述的那个类群校准得好,但在一个远缘物种上可能过松或过紧。做跨物种注释时,必须自己评估假阳性率。
§3 数据规格与通道抉择
§3.0 三条通道
| 通道 | 地址 | 适合 | 限制 |
|---|---|---|---|
| FTP 全量 | ftp.ebi.ac.uk/pub/databases/Rfam/15.1/ |
推荐:要模型或种子比对 | 需自己解析 Stockholm |
| 网站单家族 | rfam.org/family/RF00001 |
查单个家族 | 人读友好,机器不友好 |
| API | rfam.org/family/<acc>?content-type=application/json |
程序化查单家族 | 无批量接口 |
Rfam 没有"分页遍历全库"的 API。要全量必须走 FTP。这对习惯"API 优先"的人是个调整——但 Rfam 的总量只有 5.9 MB(种子),FTP 反而是最快的路。
§3.1 文件地图
FTP 15.1/ 目录的关键文件:
| 文件 | 大小 | 内容 |
|---|---|---|
Rfam.seed.gz |
5.9 MB | 全部家族的 Stockholm 种子比对(最重要) |
Rfam.cm.gz |
数百 MB | 协方差模型集合(二进制,喂给 Infernal) |
Rfam.full_region.gz |
数 GB | 全区域命中清单(707 万条) |
Rfam.clanin |
小 | clan 定义(151 行,制表符分隔) |
Rfam.3d.seed.gz |
小 | 带 3D 结构注释的种子比对 |
Rfam.pdb.gz |
小 | 家族与 PDB 结构的映射 |
family.txt.gz |
379 KB | 元数据平面表(4,227 行 × 35 列) |
release_stats.tsv |
极小 | 版本历史(家族数曲线) |
rfam2go/ |
目录 | Rfam 家族到 GO 术语的映射 |
COPYING |
极小 | CC0 许可全文 |
README |
小 | 官方说明,所有的权威数字都在这里 |
family.txt.gz 的 35 列(前 8 列最重要):
| 索引 | 内容 | 例 |
|---|---|---|
| 0 | AC(RF 号) | RF00001 |
| 1 | ID(短名) | 5S_rRNA |
| 2 | SO 号 | 1302 |
| 3 | 全名 | 5S ribosomal RNA |
| 4 | 校订者 | Griffiths-Jones SR, Mifsud W, Gardner PP |
| 5 | 种子来源 | Szymanski et al, 5S ribosomal database... |
| 6-8 | GA / TC / NC 阈值 | 38.00 / 38.00 / 37.90 |
| 9+ | 描述、建模型命令、校准命令等 |
§3.2 下载预算
| 目标 | 体积 | 时间 |
|---|---|---|
| 只要家族元数据 | 379 KB | 秒级 |
| 种子比对(推荐起点) | 5.9 MB | 数十秒 |
| clan 定义 | 几十 KB | 秒级 |
| 协方差模型 | 数百 MB | 数分钟 |
| 全区域命中 | 数 GB | 数十分钟 |
结论:先拿 5.9 MB 的 seed,就能看到 4,227 个家族的全部结构信息,这是本篇最推荐的入口。Rfam.cm.gz 只有真要用 Infernal 扫描时才需要。
§3.3 版本机制
Rfam 的版本机制是本站已收条目里最清晰的:
- FTP 目录按版本号组织:
15.1/、15.0/、14.4/…… 历史版本全部保留。 release_stats.tsv记录了从 0.1 到 15.1 的完整家族数曲线。- RF 编号(如 RF00001)跨版本稳定,不复用(与 RNAcentral 的 URS 同理)。
- 每个家族有
created与modified时间戳(在 Stockholm 的#=GF里)。
这是最理想的可复现设计:版本号 + 历史归档 + 稳定标识 三件齐备。写论文时写"Rfam 15.1",三年后还能从 FTP 拿到完全一样的文件。
§3.4 技术栈与溯源链
文献 + 序列数据库(ENA / RefSeq / 特定专题库)
↓ 人工挑选同源序列
种子比对(Stockholm,含结构注释,人工对齐)
↓ INFERNAL cmbuild -F
协方差模型(CM,二进制)
↓ cmcalibrate
校准(确定 GA / TC / NC 阈值)
↓ cmsearch 扫 RFAMSEQ
full region 命中(707 万条)
↓
[Rfam.seed] [Rfam.cm] [Rfam.full_region] [网站]
↓
下游:RNAcentral 的二级结构 / 基因组注释流程 / 本文
这条链里最关键的一环是"人工对齐"。协方差模型的质量完全取决于种子比对里的结构是否对齐正确——一个错位的配对,会让模型在整个基因组上产生成千上万的假阳性。 这就是为什么 Rfam 的扩张速度受限于人力。
§4 记录结构与字段字典
§4.1 一个家族记录的解剖
以 RF02073(STnc260,一个沙门氏菌 sRNA)为例,Rfam.seed.gz 里它的完整记录:
# STOCKHOLM 1.0
#=GF AC RF02073
#=GF ID STnc260
#=GF DE Salmonella enterica sRNA STnc260
#=GF AU Eberhardt R; 0000-0001-6152-1369
#=GF SE Predicted; CMfinder; Eberhardt R
#=GF SS Predicted; CMfinder;
#=GF GA 100.00
#=GF TC 221.60
#=GF NC 47.10
#=GF TP Gene; sRNA;
#=GF BM cmbuild -F CM SEED
#=GF CB cmcalibrate --mpi CM
#=GF SM cmsearch --cpu 4 --verbose --nohmmonly -T 35.31 -Z 2958934 CM SEQDB
#=GF DR SO; 0000370; small_regulatory_ncRNA;
#=GF RN [1]
#=GF RM 18725932
#=GF RT Deep sequencing analysis of small noncoding RNA and mRNA targets of ...
#=GF RA Sittka A, Lucchini S, Papenfort K, Sharma CM, Rolle K, ...
#=GF RL PLoS Genet. 2008;4:e1000163.
#=GF WK Bacterial_small_RNA
#=GF SQ 2
FM200053.1/2777436-2777610 UCAAUACACUCUGGCAUCGUGAGUUAUCCGCCU-UUUCU...
ACDJ01000017.1/168123-168298 UCAAUACACUCUGGCAUCGUUAAUUAUCCACCUCUUUCU...
#=GC SS_cons :::::::::<<<<<<──-<<-<<────────────-<<<<_____...
#=GC RF UCAAUACACuCuGgCAUCGuuaaUUAUCCaCCUcUUuCuGuUU...
//
这份记录里有六件事值得逐条看:
#=GF SQ 2——这个家族只有 2 条种子序列。 用 2 条序列建一个协方差模型,这在机器学习里是荒谬的,在结构生物学里是常规的。原因是两条序列已经被结构对齐了,每一条都贡献了完整的结构信息。#=GF SE/SS Predicted; CMfinder——种子不是人工挑的,是算法预测的。这是近年 Rfam 收录策略的一个变化:对细菌 sRNA 这类"数量多、研究少"的类群,允许算法生成种子。#=GF GA 100.00而#=GF SM里用-T 35.31——这两个数不一样。GA 是注释阈值(100),而扫描时用的临时阈值是 35.31。这说明 GA 阈值与扫描阈值是两件事,不要看到-T就以为是 GA。#=GF TP Gene; sRNA;——一个家族可以有两个类型标签。 这就是为什么 §4.2 的类型计数之和大于 4,227。#=GF DR SO; 0000370; small_regulatory_ncRNA——SO 本体编号与名字都在,这是与本体对齐的标准写法。#=GF RM 18725932——PubMed ID 直接写在记录里,可以从家族一键跳到原文。
§4.2 家族类型的真实分布
从 Rfam.seed.gz 的 #=GF TP 行统计(一个家族可有多个类型,所以总数 > 4,227):
| 类型 | 家族数 | 占家族比 |
|---|---|---|
| Gene | 3,655 | 86.5% |
| miRNA | 1,598 | 37.8% |
| snRNA | 813 | 19.2% |
| snoRNA | 796 | 18.8% |
| sRNA | 765 | 18.1% |
| Cis-reg | 555 | 13.1% |
| CD-box | 484 | 11.5% |
| HACA-box | 283 | 6.7% |
| lncRNA | 218 | 5.2% |
| CRISPR | 65 | 1.5% |
| antisense | 61 | 1.4% |
| leader | 57 | 1.3% |
| riboswitch | 52 | 1.2% |
| ribozyme | 35 | 0.8% |
| thermoregulator | 35 | 0.8% |
| IRES | 32 | 0.8% |
| scaRNA | 29 | 0.7% |
| frameshift_element | 28 | 0.7% |
| Intron | 17 | 0.4% |
| splicing | 15 | 0.4% |
| rRNA | 14 | 0.3% |
| antitoxin | 11 | 0.3% |
这张表最需要读出来的四件事:
Gene占 86.5% 是 SO 的宽泛类别,不代表"86.5% 是编码基因"。Rfam 只收 ncRNA,这里的Gene指"某基因位点产生的 ncRNA"。- miRNA 占 37.8%(1,598 个家族)是数量第二大类。这与 RNAcentral 里 miRNA 只占 0.3% 形成鲜明对比——说明miRNA 的"家族多样性"很高,但"序列条数"很少(因为每个家族只有几十到几百条序列)。这正是家族库与序列库的根本区别。
- snRNA(813)+ snoRNA(796)+ CD-box(484)+ HACA-box(283)合计 2,376——剪接体与核仁 RNA 是第三大块。这是真核生物剪接与 rRNA 加工的完整元件清单。
Cis-reg(555)+ riboswitch(52)+ thermoregulator(35)+ IRES(32)合计 674——顺式调控元件与核糖开关。这是抗菌药物研发最关心的那一块。
注意 rRNA 只有 14 个家族,tRNA 只有 64 个(在
family.txt的 SO 分类里)。这不是"rRNA 种类少",而是"Rfam 只做了粗分类"——rRNA 的精细分类(门、纲、属水平)在 SILVA 里做,tRNA 的(isoacceptor 水平)在 GtRNAdb 里做。Rfam 在这两个类群上只是"够用",不是"权威"。
§4.3 种子比对的规模分布
4,227 个家族的 #=GF SQ 统计:
| 指标 | 数值 |
|---|---|
| 家族数 | 4,227 |
| 种子序列合计 | 109,390 |
| 中位数 | 5 |
| 最大 | 1,613 |
| 平均 | 25.9 |
中位数只有 5 条,这个数字极其重要:
- 一半以上的家族,种子比对里只有 5 条序列或更少。
- 这不是数据质量问题,是方法决定的——协方差模型需要的是"结构多样性"而不是"序列条数",5 条覆盖了结构变异的关键位置就够。
- 但它意味着:不能用这批数据做任何统计学习。109,390 条序列分布在 4,227 个家族里,平均每家族 26 条,做序列分类模型会严重过拟合。
所以「Rfam 能用来训练 RNA 模型吗」的答案是:不能,除非你把 full region 的 707 万条命中当训练数据。 但那些命中有假阳性,信噪比是未知的。
紧跟着中位数 5 条,还有一个更细的分布值得看:种子是怎么来的。 #=GF SE 这一行记录了种子的获取方式,粗分是三档:
| 档次 | SE 的典型写法 |
含义 | 可信度 |
|---|---|---|---|
| 文献 + 人工校订 | Published; <作者>; PMID:... |
有人读过论文、亲手对齐过 | 最高 |
| 数据库导入 | Rfam; <库名>、<专库>; <版本> |
从一个专家库里搬过来(如 SRPDB、tmRNA 库) | 高,取决于源库 |
| 算法预测 | Predicted; CMfinder、Predicted; Infernal |
算法从基因组里扫出来的候选,没有人读过 | 最低 |
这一档拆分对使用者的意义很直接:同样是"Rfam 里的一个家族",人工校订的那批可以当"基准真值"用,算法预测的那批只能当"待验证候选"用。细菌 sRNA 里后者占比很高——因为这类 RNA 短、保守性差、文献少,靠人力根本做不完,只能先让算法生成候选再用协方差模型自洽性筛一遍。
一个可以自查的判据:把
SE里含Predicted的家族单独挑出来,看它们的种子数分布。如果这批家族的中位种子数明显低于全体中位数(5 条),说明"算法预测"这一档基本是"3-5 条序列凑出一个模型",用它做跨物种注释的假阳性率会明显更高。这不是缺陷,是这类家族本来就只能这么做——但使用者必须知道自己在用什么。
§4.4 家族规模与阈值的关系
家族种子数差异巨大(5 条到 1,613 条),这个差异反映了研究的投入,不是家族的生物学重要性:
- tRNA、5S rRNA、SRP RNA 这类"教科书级"家族,种子数可达数百条(每个物种挑一条代表)。
- 细菌 sRNA 这类近年才大规模发现的,种子数常为 2-5 条。
GA阈值的取值与家族规模有关系:种子少的家族,模型不够"锐利",GA 阈值通常更高(更严格),以避免大量假阳性。
实操结论:不要把"GA 分数"当跨家族的可比指标。一个家族 GA=100 与另一个家族 GA=20,两者都在说"我自己的标准",不能直接比"哪个更强"。
§4.5 clan 的构成
151 个 clan,规模分布见 §2.4。用 clan 做注释去重的正确步骤:
- 对一段序列,跑全部
Rfam.cm,得到若干命中(家族 + bit score)。 - 对每个命中的家族,查它的 clan(
Rfam.clanin)。 - 同一 clan 的多个命中,只保留 bit score 最高的那个。
- 剩下的命中才是"独立的家族发现"。
不做第 3 步会怎样:一段 tRNA 序列可能同时命中
tRNA、tRNA-Sec、mt-tmRNA三个家族(都在 CL00001),你会误以为这段序列有三个功能。实际是三个模型从不同角度抓到了同一个结构。
§4.6 一个容易忽略的事实:种子 ≠ 全部成员
一个家族的实际成员数,比种子数大 3-4 个数量级。
举例:
| 家族 | 种子数 | 全区域命中(典型量级) |
|---|---|---|
| tRNA(RF00005) | 数百 | 数百万 |
| 5S rRNA(RF00001) | 数百 | 数十万 |
| 某个细菌 sRNA | 2-5 | 几十到几百 |
总账:4,227 个家族,109,390 条种子 → 7,076,208 条 full region 命中,膨胀 64.7 倍。
这个膨胀倍数本身就是个有价值的数字:它说明平均每个种子序列能"钓出"约 65 个真实成员。如果你的注释结果比这个比例低很多(比如 4,227 个家族只找到 1 万条命中),说明你的搜索参数太严或数据库太小。
反过来说:如果命中数远大于这个比例(比如一个细菌基因组里找到 5 万条 Rfam 命中),说明假阳性太多——通常是因为用了低于 GA 的阈值。
§5 检索、抽样与泄漏分析
§5.0 四条可用的检索路径
一、拿单个家族(网页 JSON)
curl -s "https://rfam.org/family/RF00001?content-type=application/json" | jq '.'
二、拿单个家族的 Stockholm 原文
curl -s "https://rfam.org/family/RF00001/alignment" | head -50
三、拿家族元数据平面表(最快的入口)
curl -s "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/database_files/family.txt.gz" \
| gunzip | awk -F'\t' '{print $1"\t"$2"\t"$4}' | head
四、按关键词在网站搜(无正式 API)
# 网站搜索,返回 HTML,需要解析
curl -s "https://rfam.org/search?q=riboswitch" | grep -o 'RF[0-9]\{5\}' | sort -u
Rfam 的 API 能力比 RNAcentral 弱得多。全量分析只能走 FTP,这是它作为"文件分发型"数据库的特点——它假设你会把整个
Rfam.cm下载下来跑 Infernal,而不是一条条查 API。
§5.1 抽样策略:家族层不需要抽样,需要分组
4,227 个家族是可以全量处理的(seed 只有 5.9 MB)。所以 Rfam 不存在"抽样"问题,存在的是**“按什么分组”**问题:
| 分组维度 | 用途 | 注意 |
|---|---|---|
| 按 clan | 注释去重、同源分析 | 必须做,否则重复计数 |
| 按 TP 类型 | 只用 miRNA / 只用 riboswitch 等 | 一个家族可属多类 |
| 按种子数 | 只用"研究充分"的家族 | 种子 ≥20 的约占三成 |
| 按是否有 3D 结构 | 做结构相关工作时 | Rfam.pdb.gz 里有映射 |
| 按物种偏向 | 只用细菌 / 只用真核 | 需要从命中清单反推 |
最常犯的错是按家族随机划分训练测试。见 §5.2。
§5.1.1 什么时候不该用 Rfam
前面都在讲怎么用,这里讲四个明确不该用的场合。Rfam 的定位很窄,越界使用比不用更糟:
一、不要用 Rfam 做"物种水平的 RNA 注释目录"。 Rfam 的组织维度是家族,不是物种。你想知道"人类有多少个 tRNA 基因",Rfam 答不了——它只知道"tRNA 家族在人类基因组里有多少个命中",而命中边界是按结构模型画的,与基因注释的边界不一致。这类问题要用 Ensembl / GtRNAdb / SILVA。
二、不要用 Rfam 的命中数当"基因表达量"或"拷贝数"的代理。 full_region 里的每一条是一个结构命中的区间,不是一个基因。一个基因可能被切成两个命中(如果中间有一段不保守),两个相邻的同源基因也可能被合成一个命中。"命中数"和"基因数"之间没有固定换算关系。
三、不要用 Rfam 判断"这段序列有没有功能"。 命中 Rfam 说明"这段序列与某个已知家族的结构模式匹配",不说明它在你的样本里有功能。反过来,没命中也不能说明没功能(见 §7.3 第一条)。Rfam 是结构注释工具,不是功能预测工具。
四、不要用 Rfam 的家族名做"通路富集"的输入。 家族名(如 5S_rRNA)不是 GO 术语,也不是 KEGG 通路号。要做富集分析,得走 rfam2go/ 目录把家族映射到 GO——而那个映射的覆盖率有限,家族层直接拿去做富集,绝大多数家族会掉在注释之外。
一句话概括:Rfam 只回答一个问题——“这段序列属于哪个已知的 RNA 结构家族”。它回答得很好,但只回答这一个。 把它当"RNA 全功能注释库"用,是最常见的越界。
§5.2 四类真实泄漏,按危害排序
第一类:同一 clan 内跨侧(最严重)
同一 clan 的家族结构相似、序列有同源性。把 clan 内的家族随机分到训练和测试,模型学到的是"这个 clan 的共性"而不是"这个家族的特异性"。
正确做法:按 clan 分组划分。151 个 clan,意味着最多 151 折。
第二类:种子与 full region 跨侧(隐蔽)
如果一个家族的种子序列进了训练集,而它的 full region 命中进了测试集——同一个家族的模型参数(GA 阈值、结构)同时出现在两侧。
正确做法:同一家族的种子与命中必须同侧。做家族分类任务时,测试集应该用"完全没在训练中出现过的家族"。
第三类:近缘家族跨侧(中等)
不同 clan 但序列高度相似的家族(如各种 rRNA 家族),可能互相泄漏。
正确做法:先做家族间的序列相似性聚类,按聚类分组。
第四类:类型标签泄漏(做类型预测时)
DE(描述)与 ID(短名)里直接写着类型(如 5S ribosomal RNA、tRNA)。如果任务是"预测这是哪种 RNA",用这些字段就是直接泄漏。
正确做法:只输入 SS_cons 与比对序列本体。
§5.3 结构泄漏:从元数据本身推断出的信息
SQ(种子数)泄漏知名度。种子多的家族通常是经典家族(tRNA、5S rRNA),模型能靠这个认出"这是保守的"。
GA 阈值泄漏家族规模。种子少的家族 GA 通常更高。
AU(作者)泄漏年代与研究组。某位作者做的家族集中在特定类群。
处置:做家族层任务时,只用 SS_cons 与比对序列,其余元数据全部排除。
§5.4 一个不该做的划分:按 RNA 类型切
看似合理(“用 miRNA 训练,预测 riboswitch”),实际引入严重偏倚:
- 不同类型家族的种子数差异巨大(miRNA 家族通常几十条,细菌 sRNA 常 2-5 条)。
- 不同类型的结构复杂度不同(riboswitch 有复杂的三级结构元件,miRNA 前体只是简单发夹)。
- 结果:模型学到的是"这个家族有多少条种子",不是"这个家族长什么样"。
如果确实要测跨类型泛化,正确做法是:在种子数相近的类型之间切,强迫模型学结构而非样本量。
§6 AI 就绪指南
§6.1 最小可用 Pipeline
# 1. 拿三件套(合计约 6 MB)
mkdir -p rfam && cd rfam
curl -sO "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/Rfam.seed.gz"
curl -sO "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/Rfam.clanin"
curl -sO "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/database_files/family.txt.gz"
curl -sO "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/README"
import gzip, re
def parse_seed(path):
"""解析 Stockholm 格式 → 每家族一个 dict"""
fams, cur = [], None
for line in gzip.open(path, 'rt', errors='ignore'):
if line.startswith('# STOCKHOLM'):
cur = {'meta': {}, 'seqs': {}, 'ss_cons': '', 'rf': ''}
continue
if cur is None:
continue
if line.startswith('#=GF'):
# #=GF AC RF00001 → key='AC', value='RF00001'
m = re.match(r'#=GF\s+(\S+)\s+(.*)', line.strip())
if m:
k, v = m.group(1), m.group(2).strip()
cur['meta'].setdefault(k, [])
cur['meta'][k].append(v)
elif line.startswith('#=GC SS_cons'):
cur['ss_cons'] = line.split(None, 2)[-1].strip()
elif line.startswith('#=GC RF'):
cur['rf'] = line.split(None, 2)[-1].strip()
elif line.startswith('//'):
fams.append(cur)
cur = None
elif line and not line.startswith('#'):
parts = line.split()
if len(parts) >= 2:
cur['seqs'][parts[0]] = parts[1]
return fams
fams = parse_seed('Rfam.seed.gz')
print(len(fams), '个家族')
三个关键点:
#=GF可以重复(如多个RN、多个RT),解析时要用 list 而不是覆盖——否则会丢掉第二篇以后的文献。SS_cons与RF行的分隔符不固定(列对齐是人为的),必须用split(None, 2)而不是按列切。- 序列行有两列(名字 + 序列),中间可能多个空格;名字里含
/与坐标(FM200053.1/2777436-2777610),不要按/切。
§6.2 构建训练样本
任务一:家族分类(序列 + 结构 → 家族 ID)
# 输入:seed 比对的每一条序列 + SS_cons 对齐后的结构串
# 标签:家族 AC
# 划分:GroupKFold by clan(151 个 clan)
# 注意:类别 4,227 个,样本只有 109,390 条 → 平均每类 26 条
# 这是典型的小样本多分类,必须用原型网络或度量学习,不能用 softmax
任务二:结构与序列的联合表示学习
# 输入:(序列, SS_cons)
# 目标:自监督(masked token prediction 或对比学习)
# 这是近年 RNA 基础模型(RNA-FM 等)的标准做法
# Rfam 的 seed 比对比 RNAcentral 的原始序列更合适——因为已对齐
任务三:家族边界检测(是否有发夹 / 假结)
# 输入:序列
# 标签:SS_cons 里的 < > 配对模式
# 这是个 dense prediction 任务,比家族分类更接近实用
三任务共同的坑:必须按 clan 分组划分,否则同一 clan 的家族会跨侧,分数虚高。
§6.3 评价指标
| 任务 | 主指标 | 为什么 |
|---|---|---|
| 家族分类(4,227 类) | top-1 与 top-5 准确率(分开报) | 类别多,top-5 更实用 |
| 结构预测 | F1(按位置算配对) | 必须报每个位置的配对/非配对 F1,不能只报总体 |
| 家族边界检测 | IoU + 边界偏移分布 | 只看 IoU 会掩盖"整体偏移一格"的问题 |
| 跨 clan 泛化 | 留一 clan 交叉验证 | 唯一能反映真实泛化的设置 |
必须报告的分层:按种子数分箱(≤5 / 6-20 / >20)。不分层的话,模型在经典家族上表现好、在小家族上表现差,平均值会掩盖这个差异。
§6.4 MLOps:怎么钉住版本
dataset:
source: Rfam
release: "15.1"
release_date: "2025-12-22"
counts:
families: 4227
clans: 151
seed_sequences: 109390
files:
- Rfam.seed.gz # 5,928,432 B
- Rfam.clanin
- family.txt.gz # 378,804 B
parser_version: "v1-list-gf"
rf_list: "<写入实际用到的 RF 号列表>"
rf_list 这一行最关键。RF 号跨版本稳定、不复用,把用到的家族号列出来,就能在新版本里精确定位同一批家族,即使它们的边界被修正过。
§6.5 六个坑点
坑点 1:把 7,076,208 当家族数
- 症状:看到 EBI Search 的
Number of entries = 7076208,以为 Rfam 有 707 万个家族。 - 原因:那是 full region 命中数(4,227 个模型 × 平均 1,674 次命中)。
- 解决:家族数看
README或family.txt.gz的行数(4,227)。EBI Search 的 entry 是"家族 × 命中"的混合索引。
坑点 2:#=GF 重复导致解析丢数据
- 症状:解析一个家族的多篇文献,只拿到最后一篇。
- 原因:
#=GF RN、#=GF RT、#=GF RA会重复出现(每篇文献一组),用 dict 覆盖会丢。 - 解决:用
defaultdict(list)或按出现顺序保存。
坑点 3:TP 多值导致类型计数超过家族数
- 症状:统计类型分布,各类相加 = 9,000+,但家族只有 4,227。
- 原因:
#=GF TP Gene; sRNA;一个家族两个标签。 - 解决:分别统计,不做"占比相加等于 100%"的假设,或只取主类型(第一个)。
坑点 4:GA 阈值跨家族不可比
- 症状:把两个家族的命中按 bit score 排序,认为"分高的更可信"。
- 原因:GA 是每家族单独校准的。一个家族 GA=20、另一个 GA=100,两者的"20 分"含义完全不同。
- 解决:用
score / GA的比值做跨家族比较,而不是原始 score。
坑点 5:不做 clan 去重导致重复注释
- 症状:一段 tRNA 序列被注释成
tRNA+tRNA-Sec+mt-tmRNA三个家族。 - 原因:三个家族同属 CL00001。
- 解决:按 clan 合并,只留 bit score 最高的。
坑点 6:Rfam.seed.gz 下载不完整(无 EOF 标记)
- 症状:
gzip.open()抛EOFError: Compressed file ended before the end-of-stream marker was reached。 - 原因:下载被截断。本篇第一次下载只拿到 1,462,272 B(应 5,928,432 B)就报了这个错。
- 解决:下载后必须比对
Content-Length:curl -sI "$URL" | grep -i content-length ls -l Rfam.seed.gz # 两者必须相等
§6.6 反模式清单
| 反模式 | 为什么错 | 正确做法 |
|---|---|---|
| 把 707 万命中当家族数 | 家族只有 4,227 | 看 family.txt 行数 |
| 用 seed 训练分类模型 | 每家族中位仅 5 条 | 用 full region 命中,但要处理假阳性 |
| 不做 clan 去重 | 同一 clan 重复计数 | 按 clan 只留最高分 |
| 跨家族比 bit score | GA 阈值各不相同 | 用 score / GA 比值 |
假设 #=GF 不重复 |
文献块会重复 | 用 list 保存 |
| 用低于 GA 的阈值做注释 | 假阳性爆炸 | 严格用 GA |
§7 质量评估、DAIMS 与口径交叉核对
§7.1 记录级质量
Rfam 没有"质量分数"字段,但有五个隐含的质量信号:
| 信号 | 字段 | 判读 |
|---|---|---|
| 种子数 | SQ |
多 → 研究充分;少 → 可能只有算法预测 |
| 种子来源 | SE / SS |
Published + 人工 > Predicted; CMfinder |
| 是否有 3D 结构 | Rfam.pdb.gz |
有 → 结构被实验证实 |
| 阈值一致性 | GA vs TC |
GA 与 TC 差距大 → 模型可能不够锐利 |
| 假结证据 | pseudoknot_evidence(网站) |
seed with covariation support 最可靠 |
最实用的一个信号是 SE(种子来源)。如果写的是 Predicted; CMfinder; <作者>,说明种子是算法从基因组里找出来的候选,不是文献报道的。这类家族(主要是细菌 sRNA)的可信度低于人工校订的。
Rfam 越来越依赖算法生成种子(尤其细菌 sRNA 类),这是规模扩张的必然代价。用的时候要区分"人工校订的家族"与"算法预测的家族",两者证据强度差一个档次。
§7.2 抽样声明:本条目数字的边界
| 数字类别 | 来源 | 边界 |
|---|---|---|
| 4,227 家族 | README 原文 + seed 的 AC 行数 | 双重确认,准确 |
| 151 clan | EBI Search facet + Rfam.clanin 行数 |
一致 |
| 109,390 种子 | seed 的 SQ 求和 |
我们实际解析,准确 |
| 中位 5 条 | 同上 | 准确 |
| 类型分布 | seed 的 TP 行统计 |
计数之和 > 4,227(多标签) |
| 7,076,208 命中 | EBI Search indexInfos | 官方值,我们未重算 |
| GA / TC / NC 样例 | 单家族记录 | 仅示例,不代表全体 |
最重要的一条边界:我们只解析了 seed(5.9 MB),没有解析 full region(数 GB)。所以本篇所有"命中数"的细节都是官方声明,没有经过我们的独立核验。
§7.3 三个必须知道的生物学效度问题
第一,「不属于任何 Rfam 家族」不等于「没有结构」。 Rfam 只收了 4,227 个家族,而真实 RNA 家族数可能高一个数量级。一个未知的保守结构,只能说明"还没人做",不能说明"它不存在"。
第二,协方差模型有"过度拟合种子"的风险。 用 5 条序列建的模型,可能只抓住了这 5 条的共同特征,在远缘物种上找不到真成员(假阴性)。跨物种注释时,GA 阈值往往需要下调,代价是假阳性上升。
第三,二级结构预测与实验结构可能不一致。 SS_cons 是从比对推断出来的,不是从实验结构解出来的。真实 RNA 有大量三级相互作用(假结、三元配对),二阶模型看不到。Rfam 有 Rfam.3d.seed.gz 与 pseudoknot_evidence 字段部分弥补这一点,但覆盖不全。
§7.4 偏倚清单(可核查)
| 偏倚 | 证据 | 影响 |
|---|---|---|
| 校订人力偏倚 | 5 年只增 286 个家族 | 冷门类群的家族基本空白 |
| 物种偏倚 | TAXONOMY facet 前 20 全是灵长类 | 哺乳动物家族覆盖好,其他类群差 |
| 算法种子偏倚 | 大量家族 SE = Predicted; CMfinder |
细菌 sRNA 类可信度较低 |
| 种子规模偏倚 | 中位 5 条 vs 最大 1,613 条 | 小家族模型不够锐利 |
| 结构层级偏倚 | 只有二级结构,无三级 | 假结、三元配对覆盖不全 |
| rRNA/tRNA 覆盖薄 | rRNA 仅 14-22 个家族,tRNA 仅 64 个 | 这两类要配合 SILVA / GtRNAdb |
「TAXONOMY facet 前 20 全是灵长类」这个观察很有意思:
Pan paniscus 343、Gorilla gorilla 339、Macaca nemestrina 339……数量几乎一样(330-343)。这说明不是"灵长类研究多",而是"某批家族在灵长类里被系统扫描过"。这是批量注释的产物,不是研究热度的反映。
§7.5 数据完整性核查表
动手前的五分钟检查:
- [ ]
Rfam.seed.gz的大小与Content-Length一致(5,928,432 B)? - [ ] 解析
#=GF时用的是 list 而不是覆盖? - [ ]
TP多值是否处理了(不做占比相加)? - [ ] 划分是否按 clan 分组?
- [ ] 跨家族比较时用的是
score / GA而不是原始 score? - [ ] 是否做了 clan 去重?
- [ ] 是否区分了
SE = Predicted与人工校订的家族?
§7.6 DAIMS 24 项逐项评分
| # | 维度 | 判定 | 说明 |
|---|---|---|---|
| 1 | 数据集有唯一标识 | ✅ | RF 编号稳定不复用 |
| 2 | 有版本信息 | ✅ | 15.1 + 历史版本全归档 + release_stats.tsv |
| 3 | 有许可声明 | ✅ | CC0(COPYING 文件) |
| 4 | 有引用规范 | ✅ | README 有专门章节 |
| 5 | 有数据来源说明 | ✅ | 每个家族有 SE 种子来源 + RA 文献 |
| 6 | 有采集方法说明 | ✅ | README 详述 INFERNAL 流程 |
| 7 | 有预处理说明 | ✅ | BM(cmbuild 命令)+ CB(校准命令)逐家族记录 |
| 8 | 有标注规范 | ✅ | Stockholm 格式 + WUSS 记法 + SO 本体 |
| 9 | 有标注者信息 | ✅ | AU 字段逐家族记录校订者(含 ORCID) |
| 10 | 有标注一致性 | ❌ | 无 inter-annotator agreement |
| 11 | 缺失值有标记 | ✅ | NULL 显式标记 |
| 12 | 有数据类型定义 | ✅ | SO 本体(DR SO; 0000370; ...) |
| 13 | 有单位说明 | ✅ | bit score(无量纲) |
| 14 | 有样本量说明 | ✅ | 每家族 SQ 字段 |
| 15 | 有群体描述 | ✅ | 物种覆盖可从命中反推 |
| 16 | 有划分建议 | ❌ | 无 |
| 17 | 有基线 | ❌ | 无 |
| 18 | 有评价指标 | ⚠️ | 有 GA/TC/NC 三个阈值,算"内建评估标准" |
| 19 | 有伦理审查 | ⚠️ | 不适用个体数据,无显式声明 |
| 20 | 有隐私保护 | ✅ | 不涉及 |
| 21 | 有可复现性 | ✅ | 版本归档 + 建模命令逐家族记录,最强项 |
| 22 | 有更新机制 | ✅ | 定期发布(15.1 于 2025-12) |
| 23 | 有联系方式 | ✅ | rfam-help@ebi.ac.uk |
| 24 | 有多语言/多格式 | ✅ | Stockholm + CM(二进制)+ FASTA + JSON API |
得分:21 项 ✅ + 2 项 ⚠️ + 1 项 ❌ → 21 + 1.0 = 22.0 / 24 = 91.7%
这是目前已评十篇里的最高分,超过 RNAcentral 的 85.4%。决定性优势在「逐家族的建模命令记录」——每个家族的
BM(cmbuild 参数)与CB(校准参数)都写在记录里,这意味着任何人都能精确复现这个模型。这个做法在数据工程上是很罕见的严谨度。失分项只有「无划分、无基线、无一致性评估」——这三项都是机器学习取向的要求,而 Rfam 的定位是参考数据库,不做这些是合理的。
§7.7 口径交叉核对矩阵(不是模型性能验证)
第一组:家族数 vs 索引条目数(差 1,675 倍)
| 口径 | 数值 | 含义 |
|---|---|---|
| README 原文 | 4,227 families | 家族数(权威) |
Rfam.seed.gz 的 AC 行数 |
4,227 | 同上(我们实测) |
family.txt.gz 行数 |
4,227 | 同上(我们实测) |
EBI Search Number of entries |
7,076,208 | full region 命中数,不是家族数 |
| 比值 | 1,674.6 | 平均每家族 1,674 处命中 |
这三个来源都指向 4,227,只有 EBI Search 的 7,076,208 是另一个东西。 原因很简单:EBI Search 把每个 full region 命中都建了一条索引记录(为了让你能搜"哪些基因组里有 tRNA")。这是索引设计的取舍,不是数据错误。
第二组:EBI Search 的 entry_type 分布
| entry_type | 条数 |
|---|---|
| Sequence | 13,320 |
| Family | 1,458 |
| Genome | 617 |
| Clan | 5 |
| Motif | 1 |
这组数相加只有 15,401,而总数是 7,076,208。 说明 entry_type 这个 facet 只对一小部分记录生效(可能是最近新增的字段,老记录没打标)。不能用这个 facet 做全量统计。
第三组:家族类型计数的两种口径
| 口径 | Gene 数量 |
|---|---|
seed 的 TP 行(我们实测) |
3,655 |
EBI Search facet(query=RNA) |
13,124 |
这两个数差 3.6 倍。原因:EBI Search 的 rna_type: Gene 统计的是 full region 命中(13,320 条 Sequence 记录里绝大多数是 Gene 类型),不是家族。同一个词 Gene 在"家族层"与"命中层"是两个不同量纲。
这一组最能说明"口径矩阵"的必要性:同一个标签,在不同层级(家族 vs 命中)下差 3.6 倍。 写论文引用时如果不说明层级,读者无法判断。
§8 生态位与相邻资源
§8.1 Rfam 在网络里的位置
序列层:ENA / RNAcentral(6,005 万条序列)
↓ 聚类与人工校订
家族层:Rfam(4,227 个家族 + CM) ←── 本条
↓ cmsearch 扫描
命中层:Rfam.full_region(707 万条)
↓
结构层:Rfam.3d.seed / Rfam.pdb(实验结构映射)
↓
本体层:SO(rna_type)+ GO(rfam2go)
§8.2 与本站已收条目的关系
| 条目 | 关系 |
|---|---|
| RNAcentral(#137) | 1:N 上下游。RNAcentral 的 has_secondary_structure(2,252 万条)全部来自 Rfam;Rfam 有 7,409,783 条记录来自 RNAcentral 的 expert_db facet |
| ENA(#133) | 更上游。Rfam 的种子序列从 ENA/RefSeq 里挑,full region 扫的 RFAMSEQ 也主要来自 ENA |
| IMGT(#129) | 弱相关。IMGT 有部分非编码区(如 RSS),但主战场是蛋白编码的免疫基因 |
| MGI(#126) | 互补。MGI 给小鼠基因与表型,Rfam 给小鼠的非编码 RNA 家族 |
| Complex Portal(#135) | 互补。核糖体是一个蛋白-RNA 复合物:蛋白侧在 Complex Portal,rRNA 侧在 Rfam |
| GBIF(#134)/ NeuroVault(#136) | 无直接关系 |
与 RNAcentral 的关系值得展开:这是本站已收条目里唯一一对真正的"1:N 上下游":
- Rfam → RNAcentral:Rfam 的 4,227 个模型扫描出的命中,被 RNAcentral 拿去当
has_secondary_structure的标注。- RNAcentral → Rfam:RNAcentral 的 7,409,783 条记录被标为来自 Rfam(说明这些序列在 Rfam 的某个家族里)。
所以读这两篇时要建立的心智模型是:Rfam 定义"家族",RNAcentral 定义"序列"。 一个家族有成千上万条序列,一条序列属于零个或一个家族。
§8.3 为什么一个"医学数据集站"要收 RNA 家族库
因为"这段 RNA 是什么"这个问题,在临床与药物研发里出现得极其频繁,而答案的结构第一层来自 Rfam。
三条具体链路:
- 小分子药物的 RNA 靶点。risdiplam 作用于 SMN2 前体 mRNA 的剪接增强子;核糖开关是新一代抗菌药的靶点(如 lysine riboswitch、FMN riboswitch)。这些靶点的结构定义,第一步是"它属于哪个 Rfam 家族"——因为同家族的 RNA 有相同的整体折叠,可以复用已知的小分子结合位点。
- RNA 干扰疗法的脱靶评估。siRNA / ASO 药物的脱靶,一部分来自与非目标转录本的结构相似性。用 Rfam 的家族模型可以评估"这个设计是否可能结合到某个已知的结构化 RNA 上"。
- 病原体 RNA 的结构注释。病毒基因组里的 IRES、frameshift element(Rfam 里有 28 个家族)直接决定翻译调控。这些元件的注释是抗病毒药物设计的起点。
这就是它被收录的理由:它不是疾病数据,但它是把"一段序列"变成"一个可成药的折叠"的那一步。
§9 许可、伦理与合规
§9.1 许可结构
Rfam 采用 CC0 1.0(公有领域贡献),README 原文:
“Rfam is freely available and in the public domain under the Creative Commons Zero licence.”
- ✅ 可商用
- ✅ 可修改、可再分发
- ❌ 无需署名(学术界仍建议引用)
COPYING 文件在 FTP 根目录,是许可的权威文本。做商业产品时,把 COPYING 一并存档,作为许可凭证。
§9.2 模型文件(CM)的额外考量
Rfam.cm.gz 是"模型"而不是"数据",这在许可上有时会引起疑问:
- CM 是从种子比对自动生成的(
cmbuild),不是人工创造的独立作品。 - CC0 覆盖"数据库内容",模型的衍生性使用(如用 CM 扫描自己的基因组)在 CC0 下没有限制。
- 但如果把 CM 嵌入商业软件产品,建议在文档里注明来源(虽无法律义务,但符合学术惯例)。
§9.3 病原体与双重用途
Rfam 含病原体 RNA 家族(病毒 IRES、细菌 riboswitch 等),且完全开放。
- 这些家族本身是公开知识(来自已发表文献)。
- 不构成新的双重用途风险——它描述的是"结构模式",不是"毒性序列"。
- 合规上无特殊限制。
§9.4 引用规范
| 用途 | 建议写法 |
|---|---|
| 学术论文 | 引用 Rfam 最新 NAR 论文 + “Rfam 15.1” + 具体 RF 号 |
| 商业产品 | “RNA family models: Rfam 15.1 (CC0), EMBL-EBI” |
| 模型训练 | 在 model card 写明 release、clan 分组方式、种子数过滤条件 |
§9.5 引用规范
@article{rfam,
title = {Rfam 15.1: expanded coverage of non-coding RNA families},
author = {Rfam Consortium},
journal = {Nucleic Acids Research},
note = {release 15.1, 2025-12-22; 4,227 families; accessed 2026-10-23}
}
§10 复用边界与跨条目协作手册
§10.1 决策树:什么时候该用 Rfam
你要「这段序列属于哪个 RNA 家族」?
├── 是 → Rfam(跑 Rfam.cm 或查 Rfam.seed)
└── 否 → 继续
你要「这个 RNA 的二级结构长什么样」?
├── 是 → Rfam 的 SS_cons(家族共识结构)
└── 否 → 继续
你要「这个 RNA 的全部序列成员」?
├── 是 → **不要用 Rfam**,用 RNAcentral(#137)
│ 或直接看 Rfam.full_region(707 万条命中)
└── 否 → 继续
你要「这个 RNA 在哪些物种表达」?
├── 是 → **不要用 Rfam**,用 Expression Atlas / GTEx
└── 否 → 继续
你要「rRNA/tRNA 的精细分类」?
├── 是 → **不要用 Rfam**(只 14-64 个家族),用 SILVA / GtRNAdb
└── 否 → 用 Rfam
§10.2 与 RNAcentral 的配对(家族 ↔ 序列)
这是本站已收条目里唯一的一对"1:N 上下游",用法必须写清:
方向一:从 Rfam 出发
- 拿到一个家族的 RF 号(如
RF00005= tRNA)。 - 去
Rfam.full_region.gz找这个家族的全部命中(数百万条)。 - 每条命中给的是"在哪个序列的哪个位置"。
- 用 RNAcentral 查这些序列的 URS——拿到所有数据库编号。
方向二:从 RNAcentral 出发
- 拿到一批 URS。
- 查它们的
xrefs,看有没有RFAM来源的记录。 - 有 → 这些序列已被归入某个 Rfam 家族。
- 没有 → 它们不属于任何已知家族(候选新家族)。
关键差别要记住:
| 维度 | Rfam | RNAcentral |
|---|---|---|
| 实体 | 家族(4,227 个) | 序列(6,005 万条) |
| 记录单位 | 一个比对 | 一条序列 |
| 主键 | RF 号 | URS |
| 能回答 | “这是什么家族” | “这是哪条序列、别名是什么” |
| 不能回答 | “这条序列在哪个库” | “这个序列什么结构” |
§10.3 与 Pfam 的类比(蛋白侧对照)
| 维度 | Pfam | Rfam |
|---|---|---|
| 对象 | 蛋白家族 | RNA 家族 |
| 模型 | HMM(隐马尔可夫) | CM(协方差模型) |
| 建模内容 | 序列保守性 | 序列 + 二级结构 |
| 计算复杂度 | O(L) | O(L³)-O(L⁴) |
| 家族数 | 约 2 万 | 4,227 |
| 软件 | HMMER | INFERNAL |
| 覆盖率 | 蛋白研究充分 | RNA 研究相对薄弱 |
这个对照的价值在于:如果你的项目里同时有蛋白与 RNA,两侧可以对称地做"家族注释 → 结构域组合 → 功能推断"。Rfam 是那条 RNA 侧的腿。
§10.4 许可梯度对照
| 库 | 许可 | 商用 | 需署名 |
|---|---|---|---|
| Rfam(本条) | CC0 | ✅ | ❌ |
| RNAcentral(#137) | CC0 | ✅ | ❌ |
| NeuroVault(#136) | CC0 | ✅ | ❌ |
| Complex Portal(#135) | CC BY 4.0 | ✅ | ✅ |
| GBIF(#134) | 混合 | ⚠️ | ⚠️ |
| ENA(#133) | 依提交者 | ⚠️ | ⚠️ |
§10.5 三个"不要做"
- 不要把 7,076,208 当家族数——家族只有 4,227 个。
- 不要用 seed 数据训练分类模型——每家族中位仅 5 条。
- 不要跨家族比较 bit score——GA 阈值是逐家族校准的,要用
score / GA。
§10.6 一句话总结
Rfam 是 RNA 世界的 Pfam:4,227 个家族、每个一份手工结构比对、一个能同时看序列与配对的协方差模型——它的数据只有 5.9 MB,但它决定了 6,000 万条 RNA 序列里哪些属于同一个家族。
附录 A:本篇数字速查
| 项 | 数值 | 来源 |
|---|---|---|
| 家族数 | 4,227 | README + seed AC 行 + family.txt 行数(三重一致) |
| clan 数 | 151 | Rfam.clanin 行数 |
| 种子序列总数 | 109,390 | seed 的 SQ 求和 |
| 种子中位 | 5 | 同上 |
| 种子最大 | 1,613 | 同上 |
| 种子平均 | 25.9 | 109,390 ÷ 4,227 |
| full region 命中 | 7,076,208 | EBI Search indexInfos |
| 命中/家族比 | 1,674.6 | 除法 |
| 命中/种子比 | 64.7 | 除法 |
| 版本 | 15.1 | EBI Search Release version |
| 发布日期 | 2025-12-22 | EBI Search release date |
| 索引更新 | 2026-01-05 | EBI Search update date |
| 索引大小 | 1 GB(2,062,327,506 B) | EBI Search |
| Rfam.seed.gz | 5,928,432 B | FTP Content-Length(我们已核) |
| family.txt.gz | 378,804 B | FTP |
| family.txt 列数 | 35 | 我们实测 |
| TP=Gene | 3,655(86.5%) | seed 解析 |
| TP=miRNA | 1,598(37.8%) | 同上 |
| TP=snRNA | 813(19.2%) | 同上 |
| TP=snoRNA | 796(18.8%) | 同上 |
| TP=sRNA | 765(18.1%) | 同上 |
| TP=Cis-reg | 555(13.1%) | 同上 |
| TP=riboswitch | 52(1.2%) | 同上 |
| TP=ribozyme | 35(0.8%) | 同上 |
| TP=rRNA | 14(0.3%) | 同上 |
| clan 最大成员数 | 11(1 个 clan) | clanin 解析 |
| clan 2 成员数 | 82 个 | 同上 |
| 历史最早版本 | 0.1(2002-07,4 个家族) | release_stats.tsv |
| 5 年增量(15.1 − 14.4) | 286 个 | 计算 |
| DAIMS | 22.0 / 24 = 91.7% | §7.6 |
附录 B:五个可复制的查询
一、拿官方家族数(从 README)
curl -s "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/README" | grep -i "contains" | head -3
二、拿家族数与类型分布(从 seed)
curl -s "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/Rfam.seed.gz" -o Rfam.seed.gz
# 必须先核大小
curl -sI "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/Rfam.seed.gz" | grep -i content-length
ls -l Rfam.seed.gz
gzip -dc Rfam.seed.gz | grep -c '^#=GF AC'
gzip -dc Rfam.seed.gz | grep '^#=GF TP' | cut -d' ' -f3- | tr ';' '\n' | sed 's/^ *//;s/ *$//' | grep -v '^$' | sort | uniq -c | sort -rn | head -20
三、拿 clan 定义
curl -s "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/Rfam.clanin" | head -5
curl -s "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/Rfam.clanin" | wc -l # 151
四、看单个家族的完整记录
curl -s "https://rfam.org/family/RF00005/alignment" | head -40
五、拿家族元数据表(含 GA/TC/NC 阈值)
curl -s "https://ftp.ebi.ac.uk/pub/databases/Rfam/15.1/database_files/family.txt.gz" \
| gunzip | awk -F'\t' '{printf "%-9s %-20s GA=%s TC=%s NC=%s\n", $1, $2, $7, $8, $9}' | head -20
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- rnacentral — 共享标签:基因组学与多组学 / 医学问答与基准 / 多模态
- neurovault — 共享标签:医学问答与基准 / 多模态
- cpic — 共享标签:基因组学与多组学 / 医学问答与基准
- complexportal — 共享标签:基因组学与多组学 / 多模态
- gmai-mmbench — 共享标签:医学问答与基准 / 多模态
- ehrxqa — 共享标签:医学问答与基准 / 多模态
- microvqa — 共享标签:医学问答与基准 / 多模态
- mimic-iv-ext-cardiac-disease — 共享标签:医学问答与基准 / 多模态
- hra-knowledge-graph — 共享标签:基因组学与多组学 / 多模态
- radnli-report-inference — 共享标签:医学问答与基准 / 多模态
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

