Rfam — 4,227 个 RNA 家族,每个家族一个协方差模型

十个种子序列、一个协方差模型、一份共识二级结构:Rfam 是 RNA 世界的 Pfam,它不给你序列清单,给你的是「怎么在基因组里找出这个家族」的搜索器

来源 [{'@type': 'DataCatalog', 'name': 'Rfam FTP', 'url': 'https://ftp.ebi.ac.uk/pub/databases/Rfam/'}, {'@type': 'DataCatalog', 'name': 'Rfam 网站与 API', 'url': 'https://rfam.org/'}]发布时间: 2026-10-23最后更新: 2026-10-23 阅读 15
Rfam — 4,227 个 RNA 家族,每个家族一个协方差模型

信息速览

数据集名称Rfam — 4,227 个 RNA 家族,每个家族一个协方差模型
数据类型4,227 个家族,151 个 clan,109,390 条种子序列,协方差模型,二级结构,INFERNAL,CC0 许可
规模不适用(RNA 家族模型库,无个体数据)
接入方式[{'@type': 'DataCatalog', 'name': 'Rfam FTP', 'url': 'https://ftp.ebi.ac.uk/pub/databases/Rfam/'}, {'@type': 'DataCatalog', 'name': 'Rfam 网站与 API', 'url': 'https://rfam.org/'}]
AI 就绪度

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

三个必须先知道的形状问题:

  1. 4,227 个家族,不是 707 万个。 EBI Search 索引里的 7,076,208 是全区域命中数——即"用 4,227 个模型扫遍 RFAMSEQ 数据库,一共找到 707 万处匹配"。这两个数差 1,675 倍,混用会得出荒谬结论。
  2. 每个家族的种子比对极小——中位数只有 5 条序列。 这看起来"数据量太少",但它不是用来训练统计模型的,而是用来构建协方差模型的:5 条精心挑选的同源序列 + 一致的结构,就能训练出一个能扫描全基因组的模型。这与机器学习意义上的"训练集"完全不同。
  3. 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 是结构注释的基准。

三个具体的链路:

  1. 小分子靶向 RNA。近年获批的 risdiplam(脊髓性肌萎缩症)作用于 SMN2 前体 mRNA 的剪接位点;核糖开关(riboswitch)是抗菌药物研发的热门靶点。这类工作第一步是"这个 RNA 有什么结构元件"——Rfam 的 SS_cons 直接给。
  2. miRNA 前体的结构决定加工。pri-miRNA 的发夹结构必须被 Drosha 正确识别。发夹的茎长、环大小、凸起位置都影响加工效率——这些参数在 Rfam 的 miRNA 家族比对里能看到。
  3. 病毒 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...
//

这份记录里有六件事值得逐条看:

  1. #=GF SQ 2——这个家族只有 2 条种子序列。 用 2 条序列建一个协方差模型,这在机器学习里是荒谬的,在结构生物学里是常规的。原因是两条序列已经被结构对齐了,每一条都贡献了完整的结构信息。
  2. #=GF SE/SS Predicted; CMfinder——种子不是人工挑的,是算法预测的。这是近年 Rfam 收录策略的一个变化:对细菌 sRNA 这类"数量多、研究少"的类群,允许算法生成种子。
  3. #=GF GA 100.00 而 #=GF SM 里用 -T 35.31——这两个数不一样。GA 是注释阈值(100),而扫描时用的临时阈值是 35.31。这说明 GA 阈值与扫描阈值是两件事,不要看到 -T 就以为是 GA。
  4. #=GF TP Gene; sRNA;——一个家族可以有两个类型标签。 这就是为什么 §4.2 的类型计数之和大于 4,227。
  5. #=GF DR SO; 0000370; small_regulatory_ncRNA——SO 本体编号与名字都在,这是与本体对齐的标准写法。
  6. #=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 做注释去重的正确步骤:

  1. 对一段序列,跑全部 Rfam.cm,得到若干命中(家族 + bit score)。
  2. 对每个命中的家族,查它的 clan(Rfam.clanin)。
  3. 同一 clan 的多个命中,只保留 bit score 最高的那个。
  4. 剩下的命中才是"独立的家族发现"。

不做第 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), '个家族')

三个关键点:

  1. #=GF 可以重复(如多个 RN、多个 RT),解析时要用 list 而不是覆盖——否则会丢掉第二篇以后的文献。
  2. SS_cons 与 RF 行的分隔符不固定(列对齐是人为的),必须用 split(None, 2) 而不是按列切。
  3. 序列行有两列(名字 + 序列),中间可能多个空格;名字里含 / 与坐标(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)
条目 关系
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。

三条具体链路:

  1. 小分子药物的 RNA 靶点。risdiplam 作用于 SMN2 前体 mRNA 的剪接增强子;核糖开关是新一代抗菌药的靶点(如 lysine riboswitch、FMN riboswitch)。这些靶点的结构定义,第一步是"它属于哪个 Rfam 家族"——因为同家族的 RNA 有相同的整体折叠,可以复用已知的小分子结合位点。
  2. RNA 干扰疗法的脱靶评估。siRNA / ASO 药物的脱靶,一部分来自与非目标转录本的结构相似性。用 Rfam 的家族模型可以评估"这个设计是否可能结合到某个已知的结构化 RNA 上"。
  3. 病原体 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 出发

  1. 拿到一个家族的 RF 号(如 RF00005 = tRNA)。
  2. 去 Rfam.full_region.gz 找这个家族的全部命中(数百万条)。
  3. 每条命中给的是"在哪个序列的哪个位置"。
  4. 用 RNAcentral 查这些序列的 URS——拿到所有数据库编号。

方向二:从 RNAcentral 出发

  1. 拿到一批 URS。
  2. 查它们的 xrefs,看有没有 RFAM 来源的记录。
  3. 有 → 这些序列已被归入某个 Rfam 家族。
  4. 没有 → 它们不属于任何已知家族(候选新家族)。

关键差别要记住:

维度 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 三个"不要做"

  1. 不要把 7,076,208 当家族数——家族只有 4,227 个。
  2. 不要用 seed 数据训练分类模型——每家族中位仅 5 条。
  3. 不要跨家族比较 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 — 共享标签:医学问答与基准 / 多模态

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集