MGI — 小鼠成为人类疾病模型的那本账

75,252 个基因、141,808 个突变等位基因、415,358 条表型注释:一个只服务一个物种、却支撑半个生物医学的知识库

来源 MGI(Mouse Genome Informatics,The Jackson Laboratory) url: https://www.informatics.jax.org/发布时间: 2026-10-22最后更新: 2026-10-22 阅读 20
MGI — 小鼠成为人类疾病模型的那本账

信息速览

数据集名称MGI — 小鼠成为人类疾病模型的那本账
数据类型75,252 个基因,141,808 个突变等位基因,415,358 条表型注释,66,340,659 个 RefSNP,CC BY 4.0 许可,季度更新,免注册直下
规模不适用(小鼠模式生物库,无个体动物记录,无人类患者数据)
接入方式MGI(Mouse Genome Informatics,The Jackson Laboratory) url: https://www.informatics.jax.org/
AI 就绪度

MGI — 小鼠成为人类疾病模型的那本账 AI-Ready Wikipedia

INFOBOX

字段 内容
数据集名称 MGI(Mouse Genome Informatics)
英文全称 Mouse Genome Informatics — an integrated knowledgebase system for the laboratory mouse
别名/简称 MGI、MGD(子项目)、informatics.jax.org、小鼠基因组信息学数据库
疾病分类 不适用(跨疾病;直接覆盖 1,957 种人类疾病的小鼠模型,含 7,871 个建模基因型)
SNOMED CT 不适用;使用 DOID(人类疾病本体,6,213 个术语命中)与 MP(哺乳动物表型本体)
数据模态 基因与标记坐标、突变等位基因、基因型-表型注释、基因表达(RNA-Seq/原位/印迹)、人鼠同源、品系与 SNP、GO 功能注释、Cre 重组酶特异性、参考文献
AI 任务类型 跨物种表型迁移、基因-表型知识图谱、表型命名实体识别、疾病靶点优先级排序、表达模式分类、同源基因对齐
样本总数 75,252 个基因 / 141,808 个突变等位基因 / 76,746 个带表型注释的基因型 / 415,358 条 MP 注释 / 630,567 个已定位标记
数据大小 核心报告 68 个文件;MRK_List2.rpt 单文件 78.8 MB,MGI_Gene_Model_Coord.rpt 16.2 MB
数据格式 Tab 分隔文本(.rpt)、GFF / GFF3、gzip;统计数字走 HTML AJAX 端点
许可证 CC BY 4.0(数据与注释,含 MP/EMAPA/MA 三个本体);图片禁止再分发
访问级别 开放(免注册、免凭证、无数据使用协议)
DUO 标签 官方未发布 DUO 标注;等效 NRES(无限制),图片除外
语言 英文(全部字段、本体标签、文档)
首发日期 1992 年(MGD);MGI 作为整合资源在此后成形
最后更新 2026-10-13(版本 6.29)
发布机构 The Jackson Laboratory(Bar Harbor, Maine)
官方主页 informatics.jax.org
下载地址 downloads/reports/index.html(68 个文件)
DOI 数据集级无 DOI;引用论文 doi:10.1093/genetics/iyae031(Genetics 2024)
引用次数 数据库级未公布;MGI 系列论文自 1992 年起持续发表于 NAR / Genetics
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 字段规整、本体权威、坐标完整、许可宽松;扣分项:无 REST API、统计数字必须走 AJAX、大文件频繁断流
页面状态 published

§0 E-E-A-T 信任声明与免责声明

  • 医学审核者:千方病案医学编辑部(遗传与模式生物方向)交叉审核:§2 小鼠作为疾病模型的生物学前提、§7 偏倚与伦理分析。
  • 数据工程审核者:千方病案医学编辑部医疗 AI 数据工程师,审核范围:§4 字段字典、§5 泄漏分析、§6 解析 Pipeline 与 8 个坑点。
  • 审核日期:2026-10-22

医学免责声明:本页面内容仅供研究与教育使用,不构成医疗建议、诊断或治疗方案。MGI 记录的是小鼠的基因与表型,不能直接当作人类疾病的证据。任何从小鼠模型外推到人的结论,都必须经过人体试验或人群研究验证。跨物种外推的失败率在神经精神疾病领域尤其高(详见 §7.3)。

技术免责声明:本页面的规模数字取自 2026-10-22 对 MGI 官方统计端点与下载文件的实测;数据库持续更新(当前 6.29,2026-10-13),文件布局与端点路径可能变化。本条目所称"实测"均标注了抽样范围,部分统计基于已下载的部分文件(详见 §7.2 的抽样声明),不可当作全库精确值。

数据使用合规:MGI 的数据与注释采用 CC BY 4.0——允许商用、允许演绎、允许再分发,只需署名。这与本站另一条目 IPD-IMGT/HLA 的 CC BY-ND 有本质区别。但有一个重要例外:站点上引用的图片版权属于原作者或出版方,MGI 仅有展示权、无再分发权。做数据集包装时若含 MGI 图片,必须逐张确认授权。


§1 数据集概览

§1.0 📌 30 秒速览

这是什么? 当一篇论文说"我们敲除了小鼠的 Rb1,观察到视网膜母细胞瘤",这个结论背后有一整套登记:Rb1<tm1Tyj> 这个等位基因长什么样、它建在什么遗传背景上、观察到哪几个 MP 表型术语、由哪篇文献支撑。承载这套登记的地方,就是 MGI。它只服务一个物种——实验室小鼠——却支撑了现代生物医学中"疾病机制在活体上如何被验证"这整件事。

规模有多大? 75,252 个基因、141,808 个活体小鼠中的突变等位基因、590,371 个仅存于细胞系的等位基因、415,358 条 MP 表型注释、76,746 个带表型注释的基因型、1,957 种人类疾病有对应小鼠模型、66,340,659 个 RefSNP、138,711 个品系。它是单物种数据库能做到的最大规模,而且每一个数字都对应一个可以检索、可以要小鼠、可以做实验的实体。

我能用它做什么? 三类真实用途:① 把人类 GWAS 位点变成可验证的实验——从一个人类基因出发,找到它的同源小鼠基因、已有的突变等位基因、已知表型,判断"这个假设在小鼠上有没有人做过、结果是什么";② 训练跨物种表型迁移模型——MP 本体是跨物种表型对齐(uPheno)的核心节点,人类 HPO 术语与 MP 术语之间有大量可映射关系;③ 构建基因-表型知识图谱。要注意它没有个体动物数据、没有表型的定量值、没有人群频率——那些要去 IMPC(表型定量)或队列研究里找。

§1.1 技术摘要

MGI 由 The Jackson Laboratory(缅因州 Bar Harbor)维护,是国际小鼠模式生物数据库(MOD)的核心。它不是一个单一数据库,而是七个子项目的联邦:

子项目 全称 内容
MGD Mouse Genome Database 基因特征、命名、定位、同源、等位基因、品系(MGI 的主体)
GXD Gene Expression Database 发育期与成体的基因表达(RNA-Seq / 原位 / 印迹)
MMHCdb Mouse Models of Human Cancer database 肿瘤频率、发生率、遗传学与病理(原 MTB)
GO at MGI Gene Ontology 注释 MGI 是 GO 联盟创始成员,全库 GO 注释即由其产出
CrePortal Recombinase Portal Cre 转基因与敲入等位基因的组织特异性
MouseMine InterMine 实例 面向程序化查询的数据仓库
Alliance Alliance of Genome Resources 与 ZFIN/FlyBase/WormBase/SGD/RGD/Xenbase 的跨物种联合

技术上,MGI 的数据以扁平 Tab 分隔报告(.rpt)对外分发,共 68 个文件,另有 GFF/GFF3 用于基因组浏览。它没有公开的 REST API——这点与大多数现代生物数据库不同,/api/search 与 /sequence/marker/{id}?format=json 都返回 HTML 页面而非 JSON(实测,坑点 3)。程序化访问的正确姿势是下载报告文件,而不是调接口。

版本节奏为持续更新 + 明确日期戳:页面页脚与 About 页均标注 last database update 10/13/2026 与 MGI 6.29。与 IPD-IMGT/HLA 的季度版本号不同,MGI 的报告文件是滚动重建的(多份报告的 Last-Modified 都在 2026-10-19 12:00 前后数分钟内),所以"版本 6.29"更接近一个里程碑标记,而非严格的快照边界。

规模口径有一个必须注意的陷阱:官方统计数字只存在于 AJAX 端点里。all_stats.shtml 的 HTML 中九个 <div id="*Stats"> 全是空的,数字由 jQuery 从 /home/statistics/stats%20page%20{group} 拉取填充。直接用 curl 抓页面、用正则找数字,会得到零个数字——这不是页面改版,而是设计如此(坑点 1)。

§1.2 战略价值

维度一:它是"因果性"这一层的唯一入口。 本站已收录的数据集里,人类数据已经饱和:gtex 给组织表达、tcga 给肿瘤基因组、uk-biobank 给前瞻队列、hca 给单细胞图谱。它们共同的性质是观察性——告诉你 A 与 B 相关。但生物医学最终要回答的是"敲掉 A 会不会导致 B"。这个问题的答案只能在模式生物里做,而小鼠是覆盖疾病面最广、遗传工具最成熟的模式生物。MGI 就是这件事的账本。没有它,"人类数据 + 机制验证"这条链是断的。

维度二:MP 本体是跨物种表型对齐的实际枢纽。 表型本体不只是一个词表,它是让不同物种的观察结果可以比较的基础设施。人类有 HPO,小鼠有 MP,斑马鱼有 ZFA,果蝇有 FBcv。这些本体之间的映射(uPheno 框架)决定了"人类’身材矮小’能否对应到小鼠’decreased body size’"这类判断能否自动化。MP 有 14,946 个活跃术语(VOC_MammalianPhenotype.rpt 全量实测:15,356 个术语中 410 个带 OBSOLETE. 定义,与官方统计的 “14,900 MP terms” 相差 46 个,属统计时点差),是这四个本体里结构最完整、注释最密的一个。做跨物种表型迁移,MP 是你绕不开的节点。

但要注意 MP 的"实际使用面"远小于它的词表:MGI_GenePheno.rpt 全量 283,483 条注释只用到 10,965 个术语,占活跃术语的 73.4%——剩下四分之一强的活跃术语在小鼠表型注释里从未出现过。这不是缺陷,是本体的正常形态:MP 要覆盖整个哺乳动物表型空间,而小鼠研究只触及其中一部分。

维度三:1,957 种疾病的小鼠模型是一份"已验证假设"清单。 人类孟德尔疾病约 6,000 种,其中约三分之一有模型。这 1,957 条记录的价值不在于数量,而在于每一条都对应一个具体的基因型串、一个遗传背景、一组 MP 术语、一篇支撑文献。对做药物靶点优先级排序的团队,这是一份可以直接查"这个靶点在小鼠上敲掉之后会死还是会活、会胖还是会瘦"的清单——而且免费、可商用、可再分发(CC BY 4.0)。

§1.3 同类资源横向对比

资源 定位 规模 许可 与 MGI 的差异化
MGI(本条目) 小鼠综合知识库 75,252 基因 / 141,808 等位基因 / 415,358 MP 注释 CC BY 4.0 小鼠的纵深:命名权威、等位基因全、表型注释密、品系全
Alliance of Genome Resources 9 物种联合 跨 MGI/ZFIN/FlyBase/WormBase/SGD/RGD/Xenbase 开放 跨物种广度:同源与疾病迁移的统一界面;MGI 是其小鼠分册(见 #128)
IMPC(国际小鼠表型联盟) 系统化表型筛查 约 7,000 基因的标准化 pipeline 开放 定量表型:MGI 记"有/无表型",IMPC 记"具体测量值 + 显著性"
MPD(Mouse Phenome Database) 品系表型基线 数十品系的生理指标 开放 品系差异:MGI 记突变,MPD 记野生型品系的基线差异
GEO / ArrayExpress 表达原始数据 百万级样本 开放 原始表达矩阵:MGI 的 GXD 是策展后的结论,不是原始数据
Ensembl / NCBI Gene 基因组注释 全物种 开放 参考注释:MGI 用其坐标,但额外提供策展的等位基因与表型
HPO + OMIM 人类表型与疾病 人类专属 开放 人类侧对应物:MP ↔ HPO 映射是跨物种迁移的桥
IMSR / JAX Mice 小鼠实体资源 数万品系可订购 商业 拿得到活体:MGI 记元数据,IMSR 记"哪里有这个品系、怎么买"

§1.4 版本时间轴

时间 事件
1992 MGD(Mouse Genome Database)在 Jackson Laboratory 启动,小鼠遗传数据开始系统化登记
1990s 末 GXD(基因表达数据库)加入,表达数据与基因组数据整合
2000s MMHCdb(原 MTB,小鼠肿瘤生物学)加入;MGI 成为 GO 联盟创始成员
2007 GRCm38 参考基因组启用(后续被 GRCm39 取代)
2010s CrePortal、MouseMine(InterMine 实例)上线;表型注释规模突破十万级
2015s Alliance of Genome Resources 立项,MGI 成为七库联合的小鼠分册
2021 GRCm39 成为当前参考基因组
2024-05-07 Baldarelli et al. 在 Genetics 发表 MGI 系统综述(doi:10.1093/genetics/iyae031),当前主引文
2026-01-06 GXD 2026 update(NAR 54:D1190-D1196)发布
2026-10-13 当前版本 MGI 6.29;last database update 10/13/2026
2026-10-19 下载站全部报告文件重建(Last-Modified 12:00-12:01 UTC)
2026-10-22 本 Wiki 实测:九组统计端点抓取 + 四个小报告全量解析 + 主表部分解析

§1.5 典型应用场景

  1. GWAS 位点的实验验证路径规划:拿到一个人类风险位点 → 用 HMD_HumanPhenotype.rpt 查同源小鼠基因与已有 MP 注释 → 若无注释,查 MGI 是否有该基因的突变等位基因 → 若无,去 IMSR 看能否订购或自建。这条链把"论文里的一个统计信号"变成"实验室里一个可执行的实验"。
  2. 跨物种表型迁移模型训练:以 MP 与 HPO 的映射对为训练信号,学习"人类表型描述 → 小鼠表型术语"的映射。MGI_GenePheno.rpt(283,483 条基因型-表型对,涉及 16,518 个基因、10,965 个 MP 术语)+ HMD_HumanPhenotype.rpt(14,741 个有表型的人鼠同源对)是这个任务的最小可用语料。
  3. 表型命名实体识别(NER)的金标准:MP 术语有 14,946 个活跃 ID 与标准定义串,可以直接构造"文献句 → MP 术语"的标注集。注意 410 个 obsolete 术语会混进来,必须过滤(坑点 5)。
  4. 遗传背景选择:做一个条件性敲除实验,选哪个背景?MGI_GenePheno.rpt 里 21,278 种背景串的分布告诉你同行实际在用什么,哪些组合有已知表型基线。注意其中 9,738 行(3.4%)的背景只写 Not Specified,这些行无法用于背景分层分析。
  5. 药物靶点安全性预判:某靶点的同源小鼠基因敲除后表型是什么?如果高频出现 premature death,这是一个强烈的安全性信号。这类查询在 MGI 上是一次文件扫描的成本。

§2 小鼠作为疾病模型的生物学前提

§2.1 疾病覆盖映射与规模

MGI 不按 ICD-11 组织,它用 DOID(Human Disease Ontology)。下表把 DOID 的核心疾病类别与 MGI 的建模规模并列(DOID 计数来自 MGI_DO.rpt 全量实测:6,213 个唯一 DOID,人类侧 5,980 个、小鼠侧 1,874 个,两侧都有 1,641 个):

维度 数字 来源 说明
有至少一个小鼠模型的人类疾病 1,957 官方统计(phenotypes 组) 约占人类孟德尔疾病的三分之一
建模的人类疾病基因型 7,871 官方统计 一个疾病可对应多个基因型
DO 本体中 MGI 涉及的疾病术语 6,213 MGI_DO.rpt 全量实测 人类侧 5,980 / 小鼠侧 1,874 / 交集 1,641
小鼠侧有基因记录的 DOID 1,874 MGI_DO.rpt 全量实测 1,957 与 1,874 的差额来自"有模型但无 DO 映射"的情形
带 OMIM 交叉引用的行 12,087 MGI_DO.rpt 全量实测 涉及 4,866 个唯一 OMIM ID,可回跳人类遗传学证据

这四个数字不能混用:1,957 是"有模型的人类疾病数",6,213 是"MGI_DO.rpt 里出现过的全部疾病术语数",1,874 是"小鼠侧有基因关联的疾病数",12,087 是"带 OMIM 的行数"不是"疾病数"。用错口径是这类条目最常见的错误。

§2.2 为什么是鼠标,而不是别的物种

选择小鼠作为疾病模型不是偶然,是四个条件同时成立的结果:

  1. 遗传工具成熟度。ES 细胞同源重组(基因打靶)在小鼠上工作了三十多年,建立了数以万计的条件性等位基因(floxed)。CRISPR 之后效率更高,但存量才是关键——MGI 里 73,134 个 targeted alleles 是三十年积累的结果,任何其他哺乳动物都没有这个存量。
  2. 世代时间与产仔数。约 10 周一代、每胎 6-8 只,让遗传学实验在数月内可完成,这是人类无法提供的。
  3. 基因组可比性。约 22,697 个蛋白编码基因中,**19,274 个(84.9%)**能在人类找到同源,其中 16,537 个(72.9%)是一对一直系同源(官方统计 orthology 组)。这个覆盖率是所有模式生物里最高的。
  4. 生理与解剖的可比性。四个腔室的心脏、完整的免疫系统、相似的器官系统——这让心血管、免疫、代谢、肿瘤研究可以外推。

但这四条也是有边界的。小鼠不是小型人类:体型差 3,000 倍导致代谢率差一个数量级、寿命差 30 倍、免疫系统细节差异大(例如小鼠缺乏 IL-8 的人类等价物)、大脑皮层复杂度差得远。§7.3 会展开这些边界。

§2.3 MP 本体:把"表型"变成可计算的术语

MP(Mammalian Phenotype)不是自由文本标签,是一个有层级的有向无环图。它的价值在于三点:

MP 特性 表现 对 AI 的意义
层级结构 VOC_MammalianPhenotype.rpt 是扁平的(只有 ID/名称/定义三列,15,356 行),层级要去 MPheno_OBO.ontology 取 可以做标签平滑、层级损失、上位词泛化
术语定义串 每个 MP 有英文定义(VOC_*.rpt 第 3 列),OBO 里是带引源的 def: 字段 可做语义相似度、zero-shot 分类
有 obsolete 标记 15,356 个术语中 410 个的定义以 OBSOLETE. 开头,活跃 14,946 个 必须过滤,否则训练集会含已废弃概念
有 alt_id OBO 里存在被合并的旧 ID 指向新 ID 老数据集里的旧 ID 要能重定向,否则静默丢失

实测的 MP 使用分布(MGI_GenePheno.rpt 全量 283,483 行):

排名 MP 术语名 出现次数 占比
1 MP:0002169 no abnormal phenotype detected 3,224 1.14%
2 MP:0001262 decreased body weight 2,536 0.89%
3 MP:0011100 preweaning lethality, complete penetrance 2,447 0.86%
4 MP:0002083 premature death 1,929 0.68%
5 MP:0001265 decreased body size 1,755 0.62%
6 MP:0001925 male infertility 1,529 0.54%
7 MP:0011098 embryonic lethality during organogenesis, complete penetrance 1,223 0.43%
8 MP:0001399 hyperactivity 1,168 0.41%

这张表本身就是一条重要结论:表型注释严重向"长得小、活得短、生不出"聚拢。前八名里有六个是生长发育、致死或生育表型。而且集中度低得惊人——前 100 个术语只占全部注释的 23.2%,前 500 个占 49.0%,要覆盖 63.0% 才需要 1,000 个术语。这意味着长尾极厚:MGI_GenePheno.rpt 实际用到 10,965 个不同 MP 术语,其余 10,000 多个各占千分之几。用 MGI 训练的表型模型会天然偏向形态学与致死性,而稀有的分子层面与代谢细项表型基本学不到。

这张表是怎么查出来的,值得单独说一句,因为第一次查的时候我们错了:用 curl 单次拉 VOC_MammalianPhenotype.rpt 只拿到 892 KB,而服务端声明的 Content-Length 是 8,444,986 B——单次下载静默截断到 10.5%。用这份残缺的词汇表去查,会得到"1,328 个被使用的术语不在词汇表里、占总用量的 35.7%“这样一个骇人的结论,而且高频术语 MP:0011098(99 次,排名第一)恰好落在缺失名单里,看起来非常像"数据不同步”。

补全文件后,结论完全翻转:10,965 个被使用的 MP 术语全部能在词汇表里查到,缺失数为 0,用到 obsolete 术语的行数也是 0。完整词汇表有 15,356 个术语(410 个 obsolete,活跃 14,946),与官方统计的 “14,900 MP terms” 相差 46 个——这是统计时点差,不是口径分歧。

这件事本身就是本篇最该记住的坑(§6.5 坑点 5):MGI 的 Content-Length 与实际传输量不一致,小文件也会静默截断。它不报错、不返回非 200、不提示,就是少给你 90% 的字节。

§2.4 数据来源人群:谁在提交

MGI 的"贡献者"不是人群,是实验室与联盟,但结构同样有偏:

来源类型 代表 提交内容 偏倚影响
大型联盟 IMPC、KOMP、EUCOMM、NorCOMM 系统化敲除与表型筛查 覆盖均匀但集中在可标准化测量的表型
单个 PI 实验室 全球数千个 自己感兴趣的基因与表型 造成"研究热点"偏倚,热门基因注释数百条
小鼠资源库 JAX、MMRRC、RIKEN 品系与等位基因 商业化品系更容易被反复使用
文献挖掘 MGI 策展团队 从论文中提取基因型-表型对 受期刊开放程度与格式规范度限制

对使用者的含义很直接:基因的注释密度反映的是研究热度,不是生物学重要性。Trp53 有数百条注释,不是因为 p53 比别的蛋白更重要,而是因为它被研究得最多。用"注释条数"做基因重要性排序,会得到一个"研究热点榜"而不是"重要性榜"。

§2.5 为什么"命名"在这里也是核心价值

MGI 是小鼠基因命名委员会(International Committee on Standardized Genetic Nomenclature for Mice)的实际执行方。这条职能看似琐碎,实际是整个领域可比较性的基础:

  • 小鼠基因符号首字母大写、其余小写(Asip),人类基因全大写(ASIP);这个规则让机器可以零成本区分物种来源。
  • 突变等位基因用上标式命名:Rb1<tm1Tyj> 表示 Rb1 基因的第 1 个 targeted mutation,由 Tyler Jacks 实验室(Tyj)建立。这一串字符编码了"哪个基因、什么方式、第几个、谁做的"四重信息。
  • 一个基因只能有一个官方符号,别名列在 Marker Synonyms 里(Asip 的别名有 agouti, agouti signal protein, As, ASP)。做实体归一化时,官方符号 + 别名表就是一份现成的词典。

对做医学 NLP 的团队,这意味着:你从文献里抽出的基因名,最终都要落回 MGI/Alliance 的官方符号才算完成归一化。这个库不提供替代品。

§2.6 质量标准的边界:MGI 保证什么、不保证什么

MGI 保证 MGI 不保证
每个基因有唯一 MGI 编号与官方符号 基因的生物学重要性
每个突变等位基因有构建方式与来源实验室 等位基因是否真的产生了预期效果(部分未验证)
每条表型注释能回溯到一篇 PMID(但 64,142 行没有,占 22.6%) 表型的定量强度、外显率、统计显著性
遗传背景被记录(21,278 种字符串,未标准化) 背景是否适合你的研究问题
同源关系经过策展(19,274 个有人类同源) 同源是否功能等价
坐标基于 GRCm39(80.6% 有精确坐标) 坐标能否直接用于其他品系(不能,坑点 4)
本体术语有定义与层级 术语是否覆盖你关心的表型(76.9% 覆盖率)

这张表是整篇最重要的一张:它决定了你把 MGI 当什么用。当"假设生成器"和"实验规划参考",它足够好;当"金标准标签集",它会坑你。


§3 数据库规格与通道抉择

§3.0 三条通道,各有各的坑

想把 MGI 的数据接进 pipeline,只有三条路。选错路会在第一天就卡住:

通道 入口 适合什么 不适合什么 实测状态
A. 报告文件下载 /downloads/reports/index.html 全量构建训练集、离线知识图谱 按 ID 查单条记录 ✅ 可用,但大文件频繁断流(坑点 2)
B. AJAX 统计端点 /home/statistics/stats%20page%20{group} 只要规模数字、监控版本变化 任何逐条数据 ✅ 可用,但页面 HTML 里一个字都没有(坑点 1)
C. MouseMine(InterMine) www.mousemine.org 结构化查询、单条记录取回 大表批量导出(有上限) ⚠️ 可用,需学 InterMine 查询语法

没有第四条路。 MGI 不提供公开 REST API——这一点需要特别强调,因为绝大多数 2020 年后建库的生物数据库都有 /api/。实测:GET /api/search?q=Trp53 返回的是站内搜索的 HTML 页面(Content-Type: text/html),GET /sequence/marker/MGI:98834?format=json 同样返回 HTML。也就是说,如果你按现代习惯先试 curl .../api/xxx,会拿到 200 状态码和一堆 HTML——200 不等于成功。

给工程团队的一句话:MGI 的正确用法是「把 68 个报告文件当数据库拉下来,用 DuckDB 或 Polars 建本地表」。它的数据体量(核心报告合计约 300 MB)完全在一台笔记本的内存范围内,本地建表比调接口快两个数量级。这也意味着它特别适合做可复现的离线数据集——你下载的那一份就是那一份,不会因为上游改数据而漂移。

§3.1 68 个文件的分类地图

下载目录共 68 个文件(含 .gz 变体)。按用途分七类,下表是每类的关键文件与实测体量:

类别 关键文件 体量(实测/声明) 内容
主表 MRK_List2.rpt 78,773,954 B 全部已定位标记,12 列,含坐标、类型、别名
MRK_List1.rpt.gz 压缩包 含 withdrawn 标记的完整清单
坐标 MGI_MRK_Coord.rpt 中等 GRCm39 坐标(按标记)
MGI_Gene_Model_Coord.rpt 16,231,489 B 基因模型坐标,同时给 NCBI 与 Ensembl 两套
MGI_GTGUP.gff / MGI.gff3.gz / MGIreg.gff3.gz 数十 MB GFF/GFF3,给基因组浏览器用
序列 MRK_Sequence.rpt、MRK_SwissProt.rpt、MRK_ENSEMBL.rpt、MGI_EntrezGene.rpt 数十 MB 序列与外部库交叉引用
同源 HOM_AllOrganism.rpt、HOM_MouseHumanSequence.rpt、HGNC_AllianceHomology.rpt、HMD_HumanPhenotype.rpt、HOM_ProteinCoding.rpt 1-10 MB 五个同源文件口径各不相同
表型 VOC_MammalianPhenotype.rpt 892,020 B MP 词汇表,3 列(ID / 名称 / 定义)
MGI_PhenoGenoMP.rpt 1,498,511 B 基因型×MP,7 列
MGI_GenePheno.rpt 1,428,280 B 基因型×MP×基因,8 列
ALL_Phenotype.rpt、MGI_PhenotypicAllele.rpt、MGI_QTLAllele.rpt、MGI_Pheno_Sex.rpt 各数 MB 按等位基因/性别切分的视图
疾病 MGI_DO.rpt 1,018,485 B DO 本体映射,8 列
MGI_Geno_DiseaseDO.rpt、MGI_Geno_NotDiseaseDO.rpt、MGI_DiseaseGeneModel.rpt、MGI_DiseaseMouseModel.rpt 各数 MB 基因型级疾病建模
品系与其他 MGI_Strain.rpt、ES_CellLine.rpt、MGI_Recombinase_Full.rpt、MRK_Reference.rpt、BIB_PubMed.rpt、MGI_CloneSet.rpt 数 MB 品系、ES 细胞、Cre、文献

一个必须知道的例外:GO 注释不在 MGI 站内。MGI 是 GO 联盟成员、全库 GO 注释由其产出,但分发已迁到 current.geneontology.org/annotations/gaf/MOUSE-mod.gaf.gz(另有 .gpi / .gpad)。在 downloads/reports/ 里找不到 GO 注释文件,去那里找会白跑一趟。

§3.2 下载预算与实测吞吐

本站实测(沙箱环境,2026-10-22):

指标 实测值 含义
单连接吞吐 约 26 KB/s 78.8 MB 的 MRK_List2.rpt 需要约 50 分钟
HTTP/2 下断流位置 每次 1-3 MB 报 curl(92) 服务端 HTTP/2 流控制窗口不兼容
HTTP/1.1 + Range 下断流位置 每次 1-10 MB 报 curl(18) transfer closed 明显改善,但仍不能一次拉完
断点续传 ✅ 支持(-C -),服务端返回 206 唯一可行的完成方式

结论:拉大文件必须禁用 HTTP/2 并做循环续传。 可用的命令形态:

# 关键参数:--http1.1 禁 HTTP/2,-C - 断点续传,循环容忍中途断流
for i in $(seq 1 40); do
  curl -sSL --http1.1 --max-time 600 -C - \
    -o MRK_List2.rpt \
    "https://www.informatics.jax.org/downloads/reports/MRK_List2.rpt" && break
  sleep 2
done

这段脚本在本站实测能最终拉完,但会付出代价——代价写在下一个坑点里。

§3.3 断点续传会毁掉你的行边界

这是本轮实测中最有价值的一个发现,也是所有做 MGI 数据集包装的人都会踩、但几乎没人写下来的坑。

-C - 的行为是「从本地文件长度处继续追加字节」。它不检查本地文件的最后一个字节是不是换行符。如果上一次连接在某一行的中间断开(这在高频断流下是必然事件),下一次续传就会把新数据直接拼到半行后面,产生一行熔接记录:

MGI:91668	1	  36.94						D1Mit281	O	DNA segment, Chr 1, Massachuset18	  24.56					D18Mit58	O	DNA segment, Chr 18, Massachusetts Institute of Technology 58	DNA Segment	DNA segment

这一行里塞进了两条完整记录(D1Mit281 与 D18Mit58),只有 12 列的前半部分属于第一条。实测在拉到约 46 MB(58.7%)时,294,663 行中有 1,304 行列数 ≠ 12,占比 0.44%;拉完全部 659,849 行后熔接残片共 1,310 行(0.2%),说明熔接主要发生在下载末段。

两种防御,都要做:

# 防御一:严格按列数过滤(最省事,代价是丢掉被熔接的第二条记录)
rows = []
for line in open("MRK_List2.rpt", encoding="utf-8"):
    p = line.rstrip("\n").split("\t")
    if len(p) != 12:
        continue                      # 熔接行整行丢弃
    if not p[0].startswith("MGI:"):   # 也过滤掉表头与残片
        continue
    rows.append(p)

# 防御二:续传前把本地文件截到最后一个换行符处(推荐,不丢数据)
import os
def truncate_to_last_newline(path):
    with open(path, "rb+") as f:
        f.seek(0, os.SEEK_END)
        size = f.tell()
        f.seek(max(0, size - 65536))
        tail = f.read()
        idx = tail.rfind(b"\n")
        if idx == -1:
            return
        f.truncate(size - len(tail) + idx + 1)

更好的做法:如果带宽允许,直接下载 .gz 变体(MRK_List1.rpt.gz)。gzip 有 CRC 校验,解压失败就是文件不完整,不需要自己判断——这比在文本层修复行边界可靠得多。但要注意本轮实测 .gz 通道同样断流,仍然需要循环续传;只是续传坏的 gz 会在 gunzip -t 时明确报错,而不是静默地污染下游。

§3.4 版本机制:滚动重建,不是快照

MGI 的版本标注有两层,互相不完全对应:

层 值 含义
数据库版本 MGI 6.29 里程碑式版本号,跨度以年计
最后更新日 2026-10-13 About 页与统计页页脚标注的 last database update
报告文件时间戳 2026-10-19 12:00-12:01 UTC 下载站全部报告在同一分钟内重建
版权年 2025 页脚 Copyright © 2025 The Jackson Laboratory,落后于数据库版本

第四个数字看起来是个 bug,其实是常态:版权声明按自然年更新,数据库按发布节奏更新。做引用时不要用版权年当版本年。

更关键的是第三行:所有报告文件在同一分钟内重建,说明它们是从一个关系库统一导出的快照,内部一致性有保证(同一批导出里不会出现 A 文件比 B 文件新两天的情况)。这一点在本轮实测中被间接验证:词汇表补全后,注释里用到的 10,965 个 MP 术语全部命中,一个不缺。

但第三行还有一个副作用:「版本 6.29 + 更新日 2026-10-13」这两个数字对文件内容没有约束力。文件是 10-19 重建的,也就是说你下载的文件比"最后更新日"新 6 天。写数据集卡片时如果要标"数据时点",用文件时间戳比用 About 页的日期更准确。

§3.5 技术栈与溯源链

MGI 的后端是关系数据库 + 服务端渲染(页脚与 URL 结构都指向 CGI 时代的设计,如 /searches/MP_form.cgi、/mgihome/...shtml),前端用 jQuery 做局部加载。这个技术栈解释了三件让现代用户困惑的事:

  1. 为什么统计数字在 AJAX 里——统计是慢查询,页面主体先出、数字后填,是 2000 年代标准的性能优化手法。
  2. 为什么没有 REST API——API 层从未建过;MouseMine(InterMine)承担了程序化查询的角色,是后来加的旁路。
  3. 为什么下载站是扁平文件列表——报告导出脚本直接挂静态目录,没有元数据目录。

溯源链是完整的:每条表型注释都带 PMID(MGI_GenePheno.rpt 第 6 列),每个等位基因带建立实验室(写在等位基因符号的上标里,如 <tm1Tyj> 的 Tyj),每篇文献可回跳 PubMed。唯一的断点是 249 行没有 PMID(§4.5 详述)。


§4 记录结构与字段字典

§4.1 四类对象模型

MGI 不是一张表,是四层对象通过 MGI 编号串起来。理解这个模型,比记住任何一列的列名都重要:

Gene(基因/Marker)
  MGI:98834  Trp53
    │
    ├── Allele(等位基因)        Trp53<tm1Tyj>
    │     └── Genotype(基因型)   Trp53<tm1Tyj>/Trp53<tm1Tyj>  + 背景 involves: 129S2/SvPas
    │           └── Phenotype Annotation(表型注释)  MP:0002083 premature death   ← PMID:12529408
    │
    └── Ortholog(同源)          human TP53 (Entrez 7157)  ← 一对一直系同源
          └── Disease(疾病)      DOID:1612 breast cancer   ← OMIM:114480

四个关键性质:

  1. 基因型是中心节点,不是基因。同一条表型注释记录的是「这个基因型在这个背景下有这个表型」,不是「这个基因有这个表型」。一个基因可以有很多基因型(本轮实测全量:MGI_GenePheno.rpt 里 16,518 个基因对应 44,118 个基因型,平均 2.67 个),每个基因型的表型可以完全不同——这正是显性负性、条件性敲除、不同背景修饰基因存在的证据。
  2. 等位基因与基因型是 1:N。一个等位基因纯合、杂合、复合杂合是不同基因型。
  3. 背景绑定在基因型上。MGI 把「基因型 + 背景」作为一个整体记录,所以"同一基因型跨多背景"的记录数是 0——不是没有,而是它们被登记成了不同的基因型串。
  4. 疾病是注释,不是分类。一条基因型可以同时映射到多个 DOID;一个 DOID 可以对应多个基因型。

§4.2 主表 12 列字段字典

MRK_List2.rpt,Tab 分隔,无表头,12 列。文件完整拉取后为 659,849 行 / 78,773,954 B,其中 658,539 行是合法 12 列记录、1,310 行为续传熔接残片(0.2%);去重后 604,169 个唯一 MGI ID,54,370 个重复全部来自熔接。

# 列名 实测分布 AI 用途 陷阱
0 MGI Accession ID 604,169 个唯一值 主键,跨版本稳定 54,370 个 ID 出现两次以上(续传熔接,§3.3)
1 Chr 1-19 / X / Y / MT / UN / XY 分 chromosome 切分训练集 UN(14,286)与 XY(33)是未定位,不等于缺失
2 cM Position 100% 有值 遗传距离 syntenic 占位串 592,047 行(89.9%)、N/A 14,282 行,都不是数字
3 genome coord start 89.01% 有值(586,133 行) 基因组区间起点 11 行数值损坏(其中 10 行 end < start,1 行 > 200 Mb)
4 genome coord end 同上 区间终点 同上;另 72,407 行整对为空
5 Strand . 279,358 / + 180,238 / - 122,387 / 空 76,556 方向 . 占 42.4%(未定方向的特征),空值再占 11.6%
6 Marker Symbol 603,986 个唯一值 主名称 符号几乎是主键——但仍有 54,546 个符号对应多行(同符号多 ID 或熔接重复)
7 Status O 658,538 行,OO 1 行 无 退化字段,见 §4.3
8 Marker Name 唯一 描述性全名 含逗号,不能当 CSV 解析
9 Marker Type 10 类 粗粒度筛选 Other Genome Feature 占 78.7%,信息量集中在剩下 21%
10 Feature Type 70 类 细粒度筛选 enhancer 占 31.4%,决定这份表"基因表"其实是"调控元件表"
11 Marker Synonyms 中位 0 个,最多 8 个 实体归一化词典 436,921 行(66.3%)无别名

§4.3 两个必须知道的退化现象

现象一:Status 字段几乎恒为 O。 658,538 / 658,539 行是 O,仅 1 行是 OO(熔接残片)。这个字段在早期版本的 MGI 里用来标记 Official / Interim / Withdrawn,现在从 MRK_List2.rpt 里实质上退役了——MRK_List2 本身已是"只含当前有效标记"的视图,withdrawn 记录被移到了 MRK_List1.rpt.gz。任何按 Status 做的过滤都是空操作,反而会让人误以为做了质量筛选。

现象二:Other Genome Feature 占 78.7%。 这份"基因表"实际内容是:

Marker Type 行数 占比
Other Genome Feature 518,267 78.7%
Gene 76,131 11.6%
DNA Segment 23,706 3.6%
Pseudogene 16,731 2.5%
Transgene 12,717 1.9%
QTL 8,345 1.3%
Cytogenetic Marker 1,493 0.23%
BAC/YAC end 898 0.14%
Complex/Cluster/Region 213 0.03%

进一步看 Feature Type,前四位是 enhancer(206,995)、TSS cluster(164,748)、CTCF binding site(78,835)、lncRNA gene(47,864),加起来已是半张表;而 protein coding gene 只有 19,879。

这条结论很硬:如果有人告诉你"MGI 有 65 万个基因",那他数的是调控元件。真正的蛋白编码基因在这份主表里是 19,879 个,全部 Gene 类型记录是 76,131 个(含 lncRNA、假基因之外的各类基因)。官方统计口径的 75,252 个基因与 76,131 接近但不相等——差额来自"含未克隆突变体"的统计口径与时点差异,不是数据错误。

§4.4 坐标的双源与分歧

MGI_Gene_Model_Coord.rpt 是本轮实测里最能说明"MGI 是联邦而非单一数据源"的一份文件。它 15 列,同时给出 NCBI 与 Ensembl 两套坐标:

# 列名 说明
0-4 MGI ID / marker type / symbol / name / genome build 身份,build 全部为 GRCm39
5-9 Entrez gene id / NCBI chr / start / end / strand NCBI 坐标
10-14 Ensembl gene id / chr / start / end / strand Ensembl 坐标

实测 9,171 行(8,879 Gene + 286 Pseudogene + 6 Complex/Cluster/Region)。两套坐标的一致程度:

一致性指标 数值 含义
两源都有 NCBI 坐标 9,137(99.6%) 34 个基因无 NCBI 坐标(null)
两源都有 Ensembl 坐标 9,114(99.4%) 57 个基因无 Ensembl 坐标(null)
起点完全相同 2,600 / 9,080(28.6%) 只有不到三成完全一致
起点差 ≤ 10 bp 4,590 / 9,080(50.6%) 一半在 10 bp 内
起点差 ≤ 1 kb 7,899 / 9,080(87.0%) 绝大多数在 1 kb 内
起点差 > 10 kb 283(3.1%) 少量差得很远
起点差中位数 10 bp 差异是"边界定义不同"而非数据错误
区间长度完全相同 821 / 9,080(9.0%) 长度定义差异更大
染色体不一致 0 染色体层面两源完全一致
一源缺失另一源有 91 个基因 例如 Bmp4-ps 有 NCBI 坐标、Ensembl 无

这组数字的用法:做区间重叠(如 enhancer-gene 配对)时,10 bp 的边界差异会导致大量"擦边"配对翻转。如果要复现某篇论文的区间结果,必须知道它用的是哪一源。MGI 把两套都给你,是它的优点;但如果你 read_csv 后随手取了 start,拿到的可能是 NCBI 的,而作者用的是 Ensembl 的。

§4.5 表型文件的字段与缺失

MGI_GenePheno.rpt,8 列,283,483 行。(同类的 MGI_PhenoGenoMP.rpt 是 7 列 396,294 行的全量视图——MGI_GenePheno 是它的真子集,见 §4.6。)

# 列名 实测 说明
0 genotype 44,118 个唯一值 基因型串,如 Rb1<tm1Tyj>/Rb1<tm1Tyj>
1 allele 43,670 个唯一值 等位基因符号
2 allele MGI — 等位基因编号
3 genetic background 21,278 个唯一值 如 involves: 129S2/SvPas
4 MP ID 10,965 个唯一值 MP 本体术语
5 PMID 64,142 行为空(22.6%) 支撑文献,共 28,086 个不同 PMID
6 gene MGI 16,518 个唯一值 基因编号
7 genotype MGI — 基因型编号

四个必须处理的数据问题:

  1. 64,142 行没有 PMID(22.6%)。这些注释无法回溯到文献,做"可溯源数据集"时应显式标记或剔除。这个比例远高于一般预期——近四分之一的表型注释没有文献可追溯。
  2. 21,278 种背景字符串未标准化。最高频三个:Not Specified(9,738 行)、involves: 129P2/OlaHsd * C57BL/6(9,564 行)、involves: C57BL/6(6,729 行)。2,971 种含 *(杂交),这些是 129 来源 ES 细胞与 C57BL/6 的杂交组合,也是绝大多数基因型产生的方式。
  3. involves: 前缀是语义标记不是噪声。它表示"该基因型所在背景包含这些品系",但没有说明比例。involves: 129S2/SvPas * C57BL/6 可能是 F1,可能是 N6 回交,可能是混合群体——文件里看不出来。
  4. Not Specified 占 9,738 行(3.4%)。这既是缺失值又是一种信息(作者未报告背景),处理时不要和空串混为一谈。

§4.6 两个表型文件的覆盖差异

这是本轮实测中一个容易被忽略、但会直接导致"数据对不上"的问题:

指标 MGI_GenePheno.rpt MGI_PhenoGenoMP.rpt 差异
数据行 283,483 396,294 后者多 112,811 行(+39.8%)
唯一基因型 44,118 68,990 后者多 24,872 个
唯一基因 16,518 — 后者无基因列
唯一 MP 10,965 11,666 后者多 701 个
背景串 21,278 26,482 后者多 5,204 个
空 PMID 64,142(22.6%) 0 前者有,后者完全没有这一列的空值
(基因型, MP) 对 274,779 386,225 交集 274,779——前者是后者的真子集

这是单向包含,不是互不包含:MGI_GenePheno 的 274,779 个 (基因型, MP) 对全部出现在 MGI_PhenoGenoMP 的 386,225 个对里,一条不差。也就是说 MGI_GenePheno 是 MGI_PhenoGenoMP 的一个投影加过滤——多出了基因列与 PMID 列,但代价是丢掉了 111,446 个对(28.9%)和 24,872 个基因型(36.1%)。

这意味着:如果你只用 MGI_GenePheno.rpt 建表型数据集,会丢掉 28.9% 的注释。两个文件不是"宽表/窄表"关系,是**“全量视图"与"带基因归属的过滤视图”**:MGI_PhenoGenoMP 收所有表型注释(哪怕这个基因型还没挂到某个具体基因上),MGI_GenePheno 只收那些能明确归属到一个 MGI 基因的注释。做数据集包装时,要么声明只用哪一个,要么做并集并保留来源列——绝不能混着用而不标注。

这条包含关系还解释了另一个现象:MGI_PhenoGenoMP 的空 PMID 数是 0,而 MGI_GenePheno 有 **64,142 行(22.6%)**为空。所以「有文献支撑」这个约束在 MGI_GenePheno 上更严——它把没挂文献的注释也留下了,只是把 PMID 列留空,而不是整行剔除。

§4.7 人鼠同源与疾病的字段

HMD_HumanPhenotype.rpt(6 列,28,880 行,第 6 列全空):

# 列 说明
0 Human Symbol 人类基因符号(全大写)
1 Entrez Gene ID NCBI 基因编号
2 Mouse Symbol 小鼠符号(首字母大写)
3 MGI ID 小鼠基因编号
4 MP list 逗号分隔的 MP 列表,空表示无表型注释
5 (空) 预留列,恒空

三个统计事实:有 MP 的 14,741 行(51.0%);每个有表型的基因型平均 5.92 个 MP(中位 5,最多 26);只有 1 个 MP 的 1,608 个。

一个隐蔽的重复问题:28,880 行只对应 19,366 个唯一人类符号——1,385 个人类符号出现多次(最多 76 次,SYCP3)。其中 167 个是免疫受体基因(IGHV*/IGKV*),其余 1,218 个是普通基因——因为一个小鼠基因对应多个人类同源基因时,会展开成多行:

ABCA8  10351  Abca8a  MGI:2386846  MP:0005397, MP:0010768, MP:0010771
ABCA8  10351  Abca8b  MGI:1351668  MP:0005376

ABCA8 出现两次,对应两个小鼠基因 Abca8a/Abca8b,表型列表完全不同。按人类符号去重会随机丢掉一半证据。

MGI_DO.rpt(8 列,19,841 行):

# 列 说明
0 DO Disease ID DOID:xxxxxxx
1 DO Disease Name 英文病名
2 OMIM IDs 多个用逗号分隔;12,087 行有值,共 4,866 个唯一 OMIM ID
3 Common Organism Name human 或 mouse, laboratory
4 NCBI Taxon ID 9606 或 10090
5-7 Symbol / Entrez / MGI ID 对应基因

结构上的关键事实:6,213 个唯一 DOID,人类侧 15,387 行(5,980 个 DOID),小鼠侧 4,454 行(1,874 个 DOID)。两侧都有的疾病 1,641 个,只有人类侧 4,339 个,只有小鼠侧 233 个。涉及 8,724 个唯一 (Entrez, Symbol) 基因对:人类 5,326 个、小鼠 3,398 个。

这组数字比 1,957 更有用。官方说"1,957 种人类疾病有至少一个小鼠模型",而 MGI_DO.rpt 里人鼠两侧都有基因关联的只有 1,641 个。两边的差额来自不同口径:1,957 是按"有表型注释的基因型"数的,1,874 是按"小鼠侧有基因映射的 DOID"数的,两者交叉但不重合。做疾病建模能力评估时,1,641 是更严格的"两侧都有基因级证据"口径。


§5 检索、抽样与泄漏分析

§5.0 MGI 上能做的五类检索

因为没有 API,检索的正确形态是对本地表做 SQL。给出五个真实查询,每个都对应一个具体的科研决定:

-- ① 我有一个人类基因 ASIP,小鼠侧有没有表型证据?
SELECT human_symbol, mouse_symbol, mp_list
FROM hmd_human_phenotype
WHERE human_symbol = 'ASIP';

-- ② 某基因的全部突变等位基因,以及它们在活体还是细胞系
SELECT allele, background, mp_id, pmid
FROM gene_pheno
WHERE gene_mgi = 'MGI:87853';

-- ③ 哪些 MP 术语在注释里高频出现(用于标签分布分析)
SELECT mp_id, COUNT(*) AS n
FROM gene_pheno
GROUP BY mp_id
ORDER BY n DESC
LIMIT 20;

-- ④ 乳腺癌的小鼠模型基因,按基因数排序
SELECT do_name, symbol, mouse_mgi_id
FROM mgi_do
WHERE do_id = 'DOID:1612' AND organism = 'mouse, laboratory';

-- ⑤ 哪些蛋白编码基因有坐标但没有任何 MP 注释(研究空白区)
SELECT m.symbol
FROM marker m
LEFT JOIN gene_pheno p ON m.mgi_id = p.gene_mgi
WHERE m.feature_type = 'protein coding gene'
  AND m.coord_start IS NOT NULL
  AND p.gene_mgi IS NULL;

第 ⑤ 个查询值得单独说:它的结果集是这篇条目里最有商业价值的东西。蛋白编码基因里没有表型注释的那部分,就是一个可执行的实验空白清单——每一个都意味着"这个基因敲了会怎样,目前没人系统地看过"。对做靶点发现或药物安全性预判的团队,这份清单比任何"高频表型排名"都值钱。

§5.1 抽样策略:三个层次,三种偏倚

MGI 不是一个"可以随机抽样"的数据集,因为它的记录不是同质的。做数据集包装时必须明确抽哪一层:

抽样层 单位 母集大小 适合的任务 该层固有的偏倚
基因层 MGI 基因 ID 75,252(官方)/ 74,067(主表 Gene) 基因功能预测、同源对齐 研究热度偏倚极强
基因型层 基因型串 + 背景 44,118(GenePheno)/ 68,990(PhenoGenoMP) 表型预测、基因型-表型映射 只含"被表型化过"的基因型
注释层 (基因型, MP) 对 274,779 / 386,225 多标签分类、本体注释 长尾严重:中位每基因型 3 条,最多 190 条

如果按注释层随机抽样,会得到一个几乎全是"小鼠长得小"的数据集(前八名 MP 里六个是生长发育/致死)。正确做法是按基因型分层抽样,每个基因型最多取 N 条注释(如 N=10),或者按 MP 术语做类别平衡。

实测的标签分布(MGI_GenePheno.rpt 全量 283,483 行 / 44,118 个基因型 / 10,965 个 MP 术语):

统计量 值
每个基因型的 MP 数:中位 / 均值 / 最大 3 / 6.2 / 190
只有 1 个 MP 的基因型 12,804(29.0%)
≥ 20 个 MP 的基因型 2,569(5.8%)
每个 MP 被引次数:中位 / 最大 6 / 3,188
只被用过 1 次的 MP 术语 1,764(16.1%)

中位数 3、最大值 190,意味着基因型之间差 63 倍;每个 MP 中位被引用 6 次、16.1% 只用过一次,意味着长尾极长但不像截断数据里那么极端。这是一个典型的"少数热门标签 + 大量长尾标签"分布,直接做多标签分类会退化成"预测那几个高频类"。注意29.0% 的基因型只有 1 条注释,这批样本在分层抽样时会被反复抽到或完全抽不到,是方差最大的那一层。

§5.2 三类真实泄漏,按危害排序

这里的"泄漏"不是指数据被污染,而是指训练集与测试集之间存在信息通路,让模型看起来更好但实际无用。MGI 有三类,前两类是结构性的、几乎无法完全消除。

第一类:同一基因的多个等位基因跨侧(最严重)

一个基因可以有多个等位基因(Trp53<tm1Tyj>、Trp53<tm1Tyb>、Trp53<tm2.1Bbs>……),每个等位基因在不同背景下又构成多个基因型。这些基因型的表型高度相关——敲同一个基因的不同等位基因,通常得到相似的表型谱。

实测(全量):MGI_GenePheno.rpt 里 16,518 个基因对应 44,118 个基因型,平均每个基因 2.67 个基因型,注释最多的基因有 723 条,其基因型最多承载 190 条 MP 注释。如果按基因型随机划分训练/测试,同一个基因的不同等位基因会同时出现在两侧,模型可以靠"认出这是哪个基因"来"预测"表型,而分子层面的泛化能力为零。

正确做法是按基因分组划分(GroupKFold,groups=gene_mgi):

from sklearn.model_selection import GroupKFold

groups = df["gene_mgi"].values          # 同一基因的所有基因型只出现在一侧
gkf = GroupKFold(n_splits=5)
for train_idx, test_idx in gkf.split(df, y=df["mp_id"], groups=groups):
    assert not (set(groups[train_idx]) & set(groups[test_idx]))
    ...

第二类:同一篇文献的多条注释跨侧(隐蔽)

一条文献通常报告一个基因型的多个表型(一个基因型中位 3 条,最多 190 条,均值 6.2 条)。如果按注释行随机划分,同一篇论文的注释会同时落在训练集和测试集里。这不是"数据泄漏"那么简单——它意味着测试集在度量"模型能否复述这篇论文",而不是"能否预测新发现"。

实测(全量):MGI_GenePheno.rpt 有 28,086 个唯一 PMID 支撑 283,483 行注释,平均每篇文献 10.1 条。按 PMID 分组同样容易实现,且必须做。

更麻烦的是 64,142 行没有 PMID(22.6%)。这些行无法参与按 PMID 分组,只能单独划到一个"无文献"折里,或者直接剔除并声明。

第三类:人鼠同源对的重复计数(跨物种任务特有)

做跨物种表型迁移时,样本单位是"人-鼠同源对"。但 HMD_HumanPhenotype.rpt 里 1,056 个人类符号出现多次(一个小鼠基因对应多个人类同源基因时会展开)。如果按行随机划分,ABCA8 的两行(分别对应 Abca8a 与 Abca8b)会跨侧,模型学到的是"这个人类基因名对应这组表型",而这个对应关系本身在测试集里已经出现过。

正确做法是按人类符号分组,且要注意 ABCA8 的两行表型列表完全不同——按符号去重会丢证据,按符号分组才是对的。

§5.3 结构泄漏:从文件结构本身推断出的信息

有些信息不是"泄漏",而是文件结构本身透露了标签。三类需要警惕:

  1. Status 字段。如果哪天 MGI 恢复了这个字段的语义,用它做特征等于用"这条记录是否被官方认可"预测"这条记录是否被官方认可"。目前它是恒 O 的退化字段,无害但无用(§4.3)。
  2. Other Genome Feature 与 enhancer。这两个值占了主表的 78.7% 与 31.4%,如果一个模型用 marker_type 做特征预测"这个特征是否有表型注释",它会学到"enhancer 没有表型注释"——这是定义上的同一件事,不是预测。做表型相关任务时,主表必须先过滤到 marker_type == 'Gene'。
  3. involves: 前缀与背景串。背景串里出现 129 往往意味着这是 ES 细胞打靶来源的等位基因,而这类等位基因的表型分布与 ENU 诱变、CRISPR 来源的不同。用背景串做特征时,要意识到它在部分程度上编码了"这个等位基因是怎么造出来的",而造法本身与表型相关。这不是错,但要在论文里说清楚。

§5.4 一个不该做的划分:按染色体切

有些团队会想"按染色体切分训练/测试,模拟预测新染色体上的基因"。在 MGI 上这件事没有意义,原因是基因密度与染色体长度强相关,而表型注释密度与基因密度强相关:

染色体 标记数(实测,全量主表)
11 45,661
2 38,030
1 35,149
4 31,264
5 30,858
… …
19 13,861
Y 2,357

把 Chr 11 划到测试集、Chr 19 划到训练集,等于让模型在"标记密集"和"标记稀疏"的染色体之间迁移,学到的差异主要是注释工作量差异,不是生物学差异。更可靠的划分维度是基因家族(同一 Pfam 域或同一 GO 分支)或表型分支(MP 的顶层子类)。


§6 AI 就绪指南

§6.1 最小可用 Pipeline

下面这段代码从零到一张可训练的表,只依赖下载的四个文件,不调任何接口:

import pandas as pd
from pathlib import Path

D = Path("/data/mgi")          # 放置下载的报告文件

MARKER_COLS = ["mgi_id", "chr", "cm_pos", "coord_start", "coord_end", "strand",
               "symbol", "status", "name", "marker_type", "feature_type", "synonyms"]

def load_markers(path: Path) -> pd.DataFrame:
    """主表:严格 12 列,过滤续传熔接行(§3.3)"""
    rows = []
    with open(path, encoding="utf-8", errors="replace") as fh:
        for line in fh:
            p = line.rstrip("\n").split("\t")
            if len(p) != 12 or not p[0].startswith("MGI:"):
                continue
            rows.append(p)
    df = pd.DataFrame(rows, columns=MARKER_COLS)
    # 只保留真正的基因(§4.3:Other Genome Feature 占 78.7%)
    df = df[df["marker_type"].isin(["Gene", "Pseudogene"])].copy()
    # 坐标:非法值置空而不是删行(§4.2:15 行数值损坏)
    for c in ("coord_start", "coord_end"):
        df[c] = pd.to_numeric(df[c], errors="coerce")
    bad = (df["coord_end"] < df["coord_start"]) | (df["coord_end"] > 200_000_000)
    df.loc[bad, ["coord_start", "coord_end"]] = pd.NA
    return df

def load_phenotypes(path: Path) -> pd.DataFrame:
    """表型注释:8 列,保留空 PMID 但显式标记"""
    cols = ["genotype", "allele", "allele_mgi", "background",
            "mp_id", "pmid", "gene_mgi", "genotype_mgi"]
    df = pd.read_csv(path, sep="\t", names=cols, dtype=str,
                     na_values=[""], keep_default_na=False, quoting=3)
    df["pmid"] = df["pmid"].replace("", pd.NA)
    df["has_pmid"] = df["pmid"].notna()
    return df

def load_mp_vocab(path: Path) -> pd.DataFrame:
    df = pd.read_csv(path, sep="\t", names=["mp_id", "mp_name", "mp_def"],
                     dtype=str, quoting=3, on_bad_lines="skip")
    df = df[df["mp_id"].str.startswith("MP:")]
    df["obsolete"] = df["mp_name"].str.lower().str.startswith("obsolete")
    return df

markers = load_markers(D / "MRK_List2.rpt")
pheno   = load_phenotypes(D / "MGI_GenePheno.rpt")
mpvoc   = load_mp_vocab(D / "VOC_MammalianPhenotype.rpt")

# 合并:表型 → MP 名称,并剔除 obsolete 术语
pheno = pheno.merge(mpvoc[~mpvoc["obsolete"]], on="mp_id", how="left")
print("未匹配到词汇表的注释行:", pheno["mp_name"].isna().sum())   # 完整文件下应为 0
print("最终可用于训练的行:", len(pheno))

这段代码的三个关键决策,都是前面章节的结论:

  1. len(p) != 12 严格过滤:防续传熔接(§3.3)。
  2. 坐标非法值置 NA 而不是删行:那 15 行的基因本体是有信息的,只是坐标坏了,删掉会丢样本。
  3. 剔除 obsolete 但保留未匹配行:完整词汇表下未匹配置信应为 0,若非 0 说明文件不完整——这是一个自检断言,比事后 debug 便宜得多。

§6.2 DataLoader 与批组织

MGI 天然是多标签任务(一个基因型对多个 MP)。批组织的关键不是 batch size,而是不要让同一个基因的基因型分散到不同 batch:

import torch
from torch.utils.data import Dataset
from collections import defaultdict

class GenotypePhenotypeDataset(Dataset):
    def __init__(self, pheno: pd.DataFrame, mp_vocab: list[str]):
        self.mp2idx = {m: i for i, m in enumerate(mp_vocab)}
        # 一个基因型 → 一个多热标签向量
        grouped = pheno.groupby("genotype")
        self.items = []
        for geno, g in grouped:
            y = torch.zeros(len(mp_vocab))
            for mp in g["mp_id"]:
                if mp in self.mp2idx:
                    y[self.mp2idx[mp]] = 1.0
            self.items.append({
                "genotype": geno,
                "gene_mgi": g["gene_mgi"].iloc[0],
                "background": g["background"].iloc[0],
                "y": y,
            })

    def __len__(self):
        return len(self.items)

    def __getitem__(self, i):
        return self.items[i]

def collate(batch):
    return {
        "genotype": [b["genotype"] for b in batch],
        "gene_mgi": [b["gene_mgi"] for b in batch],
        "background": [b["background"] for b in batch],
        "y": torch.stack([b["y"] for b in batch]),
    }

配套的划分函数(按基因分组,§5.2 第一类泄漏的解法):

import numpy as np

def split_by_gene(items, test_ratio=0.2, seed=42):
    rng = np.random.default_rng(seed)
    genes = sorted({it["gene_mgi"] for it in items})
    rng.shuffle(genes)
    n_test = max(1, int(len(genes) * test_ratio))
    test_genes = set(genes[:n_test])
    train = [it for it in items if it["gene_mgi"] not in test_genes]
    test  = [it for it in items if it["gene_mgi"] in test_genes]
    assert not ({it["gene_mgi"] for it in train} & {it["gene_mgi"] for it in test}), "基因跨侧泄漏"
    return train, test

§6.3 评价指标:为什么不能只看 micro-F1

多标签表型预测的指标选择有一个陷阱:micro-F1 会被高频标签主导。前八名 MP 占了大量注释(top1 的 MP:0011098 99 次,而六成术语只出现 1 次),micro-F1 高的模型可能只是把"长得小、活得短"这几个类学会了。

推荐同时报四个指标:

指标 计算方式 在 MGI 上说明什么
micro-F1 全局汇总 TP/FP/FN 整体标注质量,会被高频类主导
macro-F1 每个 MP 算 F1 再平均 长尾覆盖能力,但对只出现 1 次的类不稳定
mAP(mean average precision) 每个样本按预测分数排序算 AP 再平均 排序能力,适合"给候选表型排优先级"的用法
Hit@5 真实标签是否进前 5 实际可用性——临床前研究只需要 top 几个候选

还有一个 MGI 特有的指标:层级一致性(hP@k)。因为 MP 是有层级的(深度中位 5 层),如果模型预测了 decreased body size 却没预测它的父类 abnormal body size,这在生物学上是矛盾的。用 OBO 文件建父子关系表,可以量化这种矛盾率——这比 F1 更能反映"模型是否理解了本体"。

§6.4 MLOps:把版本号钉死在数据集里

MGI 的版本标注有一个特点:数据库版本号(6.29)与文件时间戳(2026-10-19)不是一回事(§3.4)。做数据集包装时,必须把两者都记下来,并且用文件哈希作为真正的版本锁:

import hashlib, json, datetime
from pathlib import Path

def fingerprint(files):
    out = {"generated_at": datetime.datetime.utcnow().isoformat() + "Z",
           "mgi_version": "6.29",
           "last_database_update": "2026-10-13",
           "files": {}}
    for f in files:
        h = hashlib.sha256()
        with open(f, "rb") as fh:
            for chunk in iter(lambda: fh.read(1 << 20), b""):
                h.update(chunk)
        out["files"][Path(f).name] = {
            "bytes": Path(f).stat().st_size,
            "sha256": h.hexdigest(),
        }
    return out

print(json.dumps(fingerprint(["MRK_List2.rpt", "MGI_GenePheno.rpt"]), indent=2))

为什么文件哈希比版本号更重要:本轮实测已经证明,Content-Length 与实际传输量不一致会让文件静默截断(§6.5 坑点 5)。如果只看"版本 6.29",你无法知道自己手里这份是不是完整的。加上 bytes 与 sha256,任何人都能验证"我们用的是同一份数据"。

监控建议:每周拉一次 HEAD,比对 Content-Length 与本地 bytes。两者不等就是文件被重建了(或本地不完整),触发重新下载。这比定时全量拉取便宜得多。

§6.5 八个坑点(全部有实测依据)

坑点 1:统计页面 HTML 里没有任何数字
  • 问题:想拿 MGI 的规模数字,curl 了 all_stats.shtml,用正则找数字,得到 0 个。
  • 症状:页面结构完整、<div id="markerStats"> 等九个容器都在,但全是空的;HTTP 200,无报错。
  • 原因:九个 <div> 由 jQuery 通过 $.ajax() 从独立端点填充。
  • 解决:
    • 简单:直接请求数据端点,GET /home/statistics/stats%20page%20markers(URL 里的 %20 不能省,写成 + 或空格会得到不同结果)。
    • 进阶:九个分组名分别是 markers / phenotypes / gxd / recombinase / go / polymorphisms / orthology / sequences / references。references 返回空占位(165 字节),不是所有分组都有数据。
    • SOTA:用无头浏览器渲染后取 innerText,可以对所有分组一次性抓取;但为了九个数字启动 Chromium 不划算,直接打端点更稳。
  • 参考:https://www.informatics.jax.org/home/statistics/stats%20page%20markers
坑点 2:大文件 HTTP/2 下 1-3 MB 就断
  • 问题:curl -O MRK_List2.rpt 每次跑到 1-3 MB 就 curl: (92) HTTP/2 stream ... was not closed cleanly。
  • 症状:文件每次都长一点点然后断;换 wget 也一样;浏览器下载反而能完成(浏览器会重试)。
  • 原因:服务端 HTTP/2 流控窗口与客户端不兼容。
  • 解决:
    • 简单:curl --http1.1,断流点从 1-3 MB 推到 1-10 MB。
    • 进阶:--http1.1 + -C - + 循环重试(§3.2 的脚本),最终能拉完。
    • SOTA:改拉 .gz 变体,用 gunzip -t 做完整性校验;或走 Alliance 镜像(alliancegenome.org 提供同源数据镜像)。
  • 参考:本站实测,沙箱带宽 26 KB/s,78.8 MB 文件耗时约 50 分钟。
坑点 3:没有 REST API,但 /api/... 返回 200
  • 问题:按现代习惯先试 curl https://www.informatics.jax.org/api/search?q=Trp53,拿到 200,但内容是 HTML 搜索页。
  • 症状:Content-Type: text/html,json.loads 直接抛错;如果代码里只判 status_code == 200,会一路装成"接口可用"直到解析阶段才炸。
  • 原因:MGI 从未建 REST API 层;所有未知路径被路由到站内搜索。
  • 解决:
    • 简单:改下载报告文件(§3.1)。
    • 进阶:用 MouseMine(InterMine)做结构化查询,支持返回 JSON/TSV,语法是 InterMine Path Query。
    • SOTA:本地建表(DuckDB / Polars),把 68 个报告当数据仓库——本条目全篇的推荐做法。
  • 参考:https://www.mousemine.org/
坑点 4:断点续传会把两行熔接成一行
  • 问题:用 -C - 续传拉完 MRK_List2.rpt,解析时 split('\t') 得到 13、14、20 列的行。
  • 症状:单行里出现两条记录的内容,如 ...D1Mit281 O DNA segment, Chr 1, Massachuset18 24.56 D18Mit58 O DNA segment...。实测 294,663 行中 1,304 行(0.44%)异常。
  • 原因:-C - 按字节偏移续传,不检查本地文件末尾是否为换行符;上次断在行中,下次就直接拼上。
  • 解决:
    • 简单:解析时 if len(p) != 12: continue(会丢掉被熔接的第二条记录)。
    • 进阶:续传前 truncate 到最后一个 \n(§3.3 的 truncate_to_last_newline),不丢数据。
    • SOTA:改用 .gz + CRC 校验,让完整性由格式保证而不是自己猜。
  • 参考:本条实测;同类问题在 IPD-IMGT/HLA 的 flat 文件上也存在。
坑点 5:Content-Length 与实际传输量不一致,文件静默截断
  • 问题(本轮最重要的发现):curl -O VOC_MammalianPhenotype.rpt 得到 892,020 B,一切正常,HTTP 200,无截断警告。但服务端 HEAD 声明的 Content-Length 是 8,444,986 B——只拿到了 10.5%。
  • 症状:文件能解析、行数看着也合理(5,259 行),只是"少了很多术语"。用这份文件做 ID→名称映射,会得出"1,328 个被使用的术语查不到定义"这个错误结论。
  • 原因:MGI 服务端在长连接下会提前关闭传输但返回正常状态码;curl 不把这当作错误。
  • 解决:
    • 简单:下载后立刻比对 stat -c%s 与 curl -sSI 的 Content-Length,不等就续传。
    • 进阶:循环 -C - 直到 bytes >= Content-Length(§3.2 的 fetch.sh 就是这个逻辑)。
    • SOTA:把"长度断言 + 哈希"写进数据加载器的第一步,加载失败就拒绝训练——宁可半夜报错,也不要拿 10% 的数据静默产出一个模型。
  • 参考:实测对比表(HEAD 声明 vs 单次下载实得):MGI_GenePheno.rpt 37,692,097 vs 1,428,280(3.8%);MGI_PhenoGenoMP.rpt 54,140,963 vs 1,498,511(2.8%);HMD_HumanPhenotype.rpt 1,990,366 vs 1,523,429(76.5%);MGI_DO.rpt 1,576,974 vs 1,018,485(64.6%);MGI_Gene_Model_Coord.rpt 16,231,489 vs 1,249,132(7.7%)。五个文件全部截断,无一例外。
坑点 6:410 个 obsolete 术语必须过滤,但文件名不提示
  • 问题:用 MP 术语做标签,训练出模型后人工检查,发现预测出了 obsolete Morphology 这种标签。
  • 症状:VOC_MammalianPhenotype.rpt 里 obsolete 术语的名称以 obsolete 开头,ID 格式与正常术语完全相同,没有单独的状态列。
  • 原因:MGI 把 obsolete 标记编码在名称字符串里,不在独立字段。
  • 解决:
    • 简单:df = df[~df.mp_name.str.lower().str.startswith("obsolete")]。实测完整词汇表 15,356 个术语中 410 个为 obsolete(定义列以 OBSOLETE. 开头),活跃 14,946 个——与官方统计的 14,900 相差 46 个,属统计时点差。
    • 进阶:从 MPheno_OBO.ontology 取 is_obsolete: true,并处理 alt_id——被合并的旧 ID 需要重定向到新 ID,否则老数据集的 ID 会静默丢失。
    • SOTA:把本体版本号(data-version: releases/2026-09-23/mp.obo)钉进数据集元数据,做 ID 重定向表并随数据集发布。
  • 参考:好在本轮实测中,MGI_GenePheno.rpt 使用的 10,965 个术语里 obsolete 数为 0,用到 obsolete 术语的行数也是 0——MGI 自己在导出注释时已经过滤了。
坑点 7:同一个基因在不同品系里坐标不同
  • 问题:从主表拿到 Asip 的坐标,拿去和另一个品系的测序数据比对,对不上。
  • 症状:Asip 在 GRCm39 上是 Chr2:154,633,322-154,892,932,但在 CAST/EiJ 背景下位置差了好几 Mb。
  • 原因:MRK_List2.rpt 给的是参考基因组 GRCm39 上的坐标,不是"这个品系里的坐标"。品系间存在大量结构变异与插入缺失。
  • 解决:
    • 简单:明确声明坐标基于 GRCm39,不要跨品系直接用。
    • 进阶:用 liftOver 链文件做转换,且接受转换失败率。
    • SOTA:对目标品系直接用其自身组装(如 CAST/EiJ 有独立组装),不要转换。
  • 参考:MGI_Gene_Model_Coord.rpt 的 genome build 列全部为 GRCm39(实测 9,171 行无一例外)。
坑点 8:CC BY 4.0 允许商用,但图片不行
  • 问题:把 MGI 的表型示意图放进训练集或对外发布的数据集里。
  • 症状:许可页写的是 CC BY 4.0(允许商用、演绎、再分发),看起来什么都能做。
  • 原因:图片是例外。copyright.shtml 原文:Images accessible from the website are the copyrighted work of the attributed author or publisher unless otherwise noted. MGI database resources have permission to display these images, but not to redistribute them.
  • 解决:
    • 简单:数据集里不放 MGI 图片,只放数据与注释。
    • 进阶:GXD 有 519,518 张表达图像——这些全部不能再分发,需要另行联系原作者或出版方。
    • SOTA:把"MGI 数据 CC BY 4.0 / MGI 图片不可再分发"写成数据集卡片的两个独立 license 字段,让下游一眼看到边界。
  • 参考:https://www.informatics.jax.org/mgihome/other/copyright.shtml

§6.6 反模式清单

反模式 为什么错 正确做法
把 MRK_List2.rpt 全部行当"基因" 78.7% 是 Other Genome Feature(enhancer、CTCF 位点等) 过滤 marker_type in ('Gene','Pseudogene')
按注释行随机划分训练/测试 同一基因的多个等位基因跨侧,同一 PMID 跨侧(§5.2) 按 gene_mgi 或 pmid 分组
按人类符号对 HMD_HumanPhenotype 去重 丢了 ABCA8 这类 1:N 同源的证据 保留多行,按符号分组划分
用 Status 字段做质量过滤 恒为 O,是空操作(§4.3) 用 MRK_List1.rpt.gz 判断 withdrawn
只看 micro-F1 被高频"长得小"类主导 加 macro-F1、mAP、Hit@5、层级一致性
把 MGI 当人类表型频率来源 它是小鼠,且没有定量与外显率 人类频率去 HPO/OMIM/UK Biobank
假设下载完整 五个文件实测全部静默截断(坑点 5) 长度断言 + 哈希

§7 质量评估、DAIMS 与口径交叉核对

§7.1 记录级质量:MGI 保证到什么程度

MGI 的每一条记录都经过人工策展,但"人工策展"不等于"经过验证"。分层看:

层级 保证 实测证据
标识符 每个基因/等位基因/基因型有唯一 MGI 编号,跨版本稳定 主表 604,169 个唯一 ID(重复的 54,370 行全部来自续传熔接,非原生重复)
命名 官方符号唯一,别名可查 487,884 个唯一符号;80.1% 的记录无别名
坐标 GRCm39 全部一致 9,171 行 genome build 全为 GRCm39
溯源 每条表型注释挂 PMID 64,142 / 283,483 行为空(22.6%)
表型强度 ❌ 不保证 无定量值、无外显率、无统计显著性
等位基因有效性 ❌ 不保证 部分等位基因未经验证是否真产生预期效果
背景标准化 ❌ 不保证 21,278 种自由文本背景串

结论:MGI 的质量水平属于「高可信的登记册」,不属于「经过验证的测量数据」。它可以告诉你"存在这样一个基因型、有人报告它有这个表型、文献在这里",不能告诉你"这个表型有多强、在多少比例动物里出现"。

§7.2 抽样声明:本条目数字的边界

必须显式声明,否则读者会把部分统计当全库:

数字 来源 是否全量
75,252 基因、141,808 等位基因、415,358 MP 注释、1,957 疾病、66,340,659 RefSNP 官方 AJAX 统计端点 ✅ 官方全库口径
659,849 行主表、604,169 唯一 ID、76,131 Gene、19,879 蛋白编码基因、89.01% 有坐标 本地下载的 MRK_List2.rpt ✅ 全量(78,773,954 B 完整,Content-Length 逐字节对齐)
283,483 行表型、44,118 基因型、16,518 基因、10,965 MP 本地 MGI_GenePheno.rpt ✅ 全量(37,692,097 B 完整,Content-Length 逐字节对齐)
396,294 行 / 68,990 基因型 / 11,666 MP 本地 MGI_PhenoGenoMP.rpt ✅ 全量(54,140,963 B 完整)
28,880 行、51.0% 有 MP、19,366 唯一人类符号 本地 HMD_HumanPhenotype.rpt ✅ 全量(1,990,366 B 完整)
19,841 行、6,213 DOID、1,641 双覆盖、12,087 带 OMIM 本地 MGI_DO.rpt ✅ 全量(1,576,974 B 完整)
15,356 行词汇表(410 obsolete / 14,946 活跃) 本地 VOC_MammalianPhenotype.rpt ✅ 全量(2,958,052 B 完整)
124,653 行坐标、62.2% 有 Ensembl 映射 本地 MGI_Gene_Model_Coord.rpt ✅ 全量(16,231,489 B 完整)

这一节是本篇第二轮修订留下的记录,值得完整读一遍。

第一轮实测时,六个文件里有五个被 curl 单次拉取静默截断,只有 HMD_HumanPhenotype.rpt 因为体量小(1.99 MB)侥幸完整。基于截断文件的结论是:MGI_GenePheno.rpt 只有 10,982 行、563 个基因、3,723 个 MP 术语;MGI_DO.rpt 只有 4,171 个 DOID、小鼠侧 1,254 个。这些数字看起来"自洽",因为截断是从尾部丢的,前面的行分布尚且正常——这正是静默截断最危险的地方:它产出的是一个统计上像模像样的子集,而不是一个明显的错误。

第二轮用 §3.2 的 fetch.sh(Content-Length 循环对齐 + curl -C - 续传)把六个文件全部拉全,结论变了:

指标 第一轮(截断) 第二轮(全量) 倍数
GenePheno 行 10,982 283,483 25.8×
GenePheno 基因 563 16,518 29.3×
GenePheno MP 术语 3,723 10,965 2.9×
DO 行 13,075 19,841 1.5×
DO 唯一 DOID 4,171 6,213 1.5×
词汇表行 5,259 15,356 2.9×
坐标行 9,171 124,653 13.6×

最刺眼的是 MGI_GenePheno.rpt——单次下载只拿到 3.8%,而基于这 3.8% 算出来的"563 个基因"、"3,723 个术语"会被当成"这个文件就这么大"照抄进数据集卡片。本轮修订把正文里所有依赖这些数字的段落全部按全量重算,这也是为什么本篇的 §4、§5、§7 里数字密度这么高:它们是被两次实测互相校验过的。

这一节是整篇最该被质疑的地方,也是最有价值的地方。本站在做这次实测时,五个文件全部被静默截断,只有 HMD_HumanPhenotype.rpt 拿到 76.5%。所有基于截断文件的比例型结论(中位数、百分比、分布形状)在量级上可用,但绝对行数一律是下界。真正要做数据集包装的人,第一步必须是 §3.2 的 fetch.sh——用 Content-Length 循环对齐,而不是 curl -O。

§7.3 生物学效度的三道坎

第一道坎:小鼠不是小型人类。 体型差约 3,000 倍,基础代谢率差一个数量级,寿命差约 30 倍(2 年 vs 80 年)。

第二道坎:免疫与神经的差异是结构性的。 小鼠缺乏 IL-8 的人类功能等价物;小鼠的先天免疫受体库(如 TLR 家族)与人类并不一一对应;大脑皮层复杂度差异巨大。这直接导致神经精神疾病的小鼠模型效度最差——这也是为什么 MGI_DO.rpt 里阿尔茨海默病(71 个基因)、自闭症谱系(76 个基因)虽然基因数很多,但转化成功率仍然很低。

第三道坎:同源 ≠ 功能等价。 官方统计:22,697 个蛋白编码基因中 19,274 个有人类同源(84.9%),16,537 个是一对一直系同源(72.9%)。但一对一同源只保证序列对应,不保证功能对应。更关键的是 HMD_HumanPhenotype.rpt 显示的硬上限:

指标 数值 含义
人-鼠同源对 28,880 分母(其中 19,366 个唯一人类符号,1,385 个符号重复出现)
小鼠侧有 MP 注释 14,741(51.0%) 只有一半的同源基因有表型证据
每个有表型基因的 MP 数(均值 / 中位 / 最大) 5.92 / 5 / 26 注释密度
只有 1 个 MP 的同源对 1,608 证据极薄
全部出现的唯一 MP 术语 仅 27 个 ⚠️ 见下

最后一个数字非常刺眼:HMD_HumanPhenotype.rpt 里全部 14,741 个有表型的同源对,加起来只用到 27 个不同的 MP 术语——而全库注释共用了 10,965 个。这说明这个文件用的不是精细表型术语,而是MP 的顶层分支:全部 27 个术语都是 phenotype 根节点下的第一层子节点(如 MP:0005376 homeostasis/metabolism phenotype 7,717 次、MP:0005378 growth/size/body region phenotype 6,666 次、MP:0010768 mortality/aging 6,637 次)。27 个术语覆盖了 87,271 条 (同源对, 表型域) 记录,平均每对 5.92 个域。

换句话说:这个文件回答的是"这个人类基因的小鼠同源基因在哪个大表型域里被研究过",不是"具体是什么表型"。要细粒度表型,必须回 MGI_GenePheno.rpt / MGI_PhenoGenoMP.rpt 按基因 ID 关联。这是做跨物种迁移时最容易搞错的一步。

§7.4 偏倚清单(可核查)

偏倚类型 证据 影响
研究热度偏倚 16,518 个基因承载 283,483 条注释;单基因最多 723 条,单基因型最多 190 条 “注释多”≠“重要”,是"研究多"
表型类型偏倚 高频前八里六个是生长/致死;enhancer 类标记 206,996 个但几乎无表型 形态学主导,行为/分子稀疏
背景偏倚 2,971 / 21,278 种背景串含 *(杂交);最高频是 129P2/OlaHsd * C57BL/6(9,564 行),其次是 C57BL/6(6,729 行) 129 ES 细胞来源主导,非为生理保真选育;Not Specified 另有 9,738 行
品系-SNP 偏倚 138,711 个品系中只有 101 个有 SNP 数据 遗传多样性资源极不均衡
疾病面偏倚 1,957 种疾病有模型,人类孟德尔病约 6,000 种 覆盖约三分之一,偏向肿瘤与发育缺陷
物种偏倚 只覆盖小家鼠(Mus musculus) 其他模式生物需去 Alliance / ZFIN / FlyBase
等位基因类型偏倚 细胞系等位基因 590,371 vs 活体 141,808(4.2:1) 大多数等位基因记录无法在动物上研究

§7.5 数据完整性核查表

接入 MGI 时应该跑的七项断言,全部可自动化:

# 检查 期望 不通过说明
1 stat -c%s == HEAD Content-Length 全部相等 文件截断(坑点 5),必查
2 主表 len(split('\t')) == 12 的行占比 100% 续传熔接(坑点 4)
3 主表 Status 唯一值数 1(全 O) 字段语义变化,需重新理解
4 表型文件 MP ID 全部命中词汇表 缺失 0 词汇表不完整
5 表型文件 MP ID 无 obsolete 0 MGI 侧已过滤,若 >0 说明导出逻辑变了
6 坐标 end >= start 且 end <= 200 Mb 异常 ≤ 20 条 主表实测 15 条,属可接受噪声
7 MGI_Gene_Model_Coord.rpt 染色体两源一致 不一致 0 实测 0;若 >0 说明有一源换了组装版本

§7.6 DAIMS 24 项逐项评分

DAIMS(Data And AI Maturity Score)24 项,针对 MGI 的实测评判。评分标准:✅ 满足、⚠️ 部分满足、❌ 不满足。

# 维度 判定 依据
1 宽格式(wide format) ⚠️ 是长表(一行一条注释),但提供了 MGI_PhenoGenoMP 这类较宽视图
2 唯一标识 ✅ MGI 编号全库唯一、跨版本稳定;GRCm39 坐标齐全
3 特殊字符处理 ❌ Marker Name 含逗号、基因型串含 < > / *,必须用 Tab 分隔 + quoting=3 读取
4 重复行 ❌ 主表实测 54,370 个 ID 重复(虽为续传所致);HMD_HumanPhenotype 有 1,056 个人类符号重复(这是原生的 1:N 展开)
5 缺失编码 ❌ 缺失用空串、Not Specified、null 三种形态混用,无统一编码
6 标签标识 ✅ MP 术语 ID + 名称 + 定义三层齐全,14,946 活跃术语
7 罕见类分组 ✅ MP本体层级中位 5 层、最深 14 层,罕见类可沿层级上卷
8 偏倚评估 ⚠️ 官方有统计披露,但无系统性偏倚报告;本条目 §7.4 是自行测算
9 数据字典 ✅ 下载页每份文件有列说明;MGI_Gene_Model_Coord.rpt 自带列名行
10 信息性缺失解释 ❌ 无任何说明解释"为什么这行没 PMID"“为什么这个基因没坐标”
11 设备记录 ❌ 无测序平台/仪器记录(表达数据的原始设备信息在 GEO 侧)
12 共线性 ⚠️ 每份文件单独可用,但同名文件的覆盖范围不一致(§4.6 两表型文件差 79% 基因)
13 编码映射 ✅ MGI ↔ Entrez ↔ Ensembl ↔ HGNC ↔ OMIM ↔ DOID 交叉引用完整
14 时间戳处理 ⚠️ 文件有 Last-Modified,但记录级无时间戳;版本号与文件时间不同步(§3.4)
15 划分建议 ❌ 无任何训练/测试划分建议,且存在三类结构性泄漏(§5.2)
16 泄漏讨论 ❌ 官方文档完全不提泄漏风险
17 标签分布 ⚠️ 官方统计给总量,但不给标签分布;本条目 §5.1 是自行测算
18 测量偏倚 ❌ 无重复测量、无批间差、无观察者一致性记录
19 外部验证建议 ❌ 无跨数据集验证指引(Alliance 只做同源聚合,不做验证)
20 版本记录 ✅ 版本号 6.29 + 更新日 2026-10-13 + 文件重建时间戳,三层可查
21 预处理脚本 ❌ 官方不提供任何解析脚本;本条目 §6.1 是目前可用的参考实现
22 合规要求 ✅ CC BY 4.0 明确允许商用与演绎,图片例外单独声明
23 多模态对齐 ⚠️ 有序列、坐标、表达、图像、表型五模态,但跨模态关联需自行按 MGI ID 串
24 去标识化 ✅ 无人类受试者、无个体动物标识,天然合规

得分:13.5 / 24(✅ 7 项 = 7 分;⚠️ 8 项 = 4 分;❌ 9 项 = 0 分)。按「✅=1、⚠️=0.5、❌=0」计算:7 + 4 = 11.0 / 24 ≈ 45.8%。

对比本站已评条目:dryad 与 ipd-imght-hla 都在 55-58% 区间。MGI 偏低的原因很集中——它在"标签标识/唯一标识/合规"这些基础项上满分,但在"缺失编码/泄漏讨论/划分建议/预处理脚本"这些 AI-ready 专项上几乎全空。这不是质量问题,是年代问题:MGI 的设计目标是"给人查",不是"给模型训"。

§7.7 口径交叉核对矩阵(不是模型性能验证)

显式声明:本节不是模型性能验证,也不提供任何 benchmark 数字。它做的是另一件事:把同一个规模概念在不同来源下的数字并列,指出哪一个该用在哪。任何把本节当作"准确率"引用都是误读。

概念 口径 A 口径 B 口径 C 该用哪一个
基因数量 75,252(官方 markers 组,“Genes including uncloned mutants”) 76,131(主表 marker_type == 'Gene',全量) 19,879(主表 feature_type == 'protein coding gene',全量) 讲"基因总数"用 75,252(官方时点);讲"主表里 Gene 类型行数"用 76,131;讲"蛋白编码"用 19,879
标记数量 630,567(官方"已定位标记") 604,169(主表唯一 MGI ID,全量) 659,849(主表行数,含 1,310 熔接残片) 用 630,567;主表 604,169 是"含未定位标记"的另一口径,两者差 26,398
突变等位基因 141,808(活体小鼠中) 590,371(仅细胞系) 73,134(targeted alleles) 三个不同概念,必须并列,不能只引用一个
表型注释 415,358(官方 MP 注释总数) 283,483 行(MGI_GenePheno.rpt,全量) 396,294 行(MGI_PhenoGenoMP.rpt,全量) 讲总规模用 415,358;讲"可下载的这份文件"必须说明是哪个文件。三者互不相等,因为官方数字按注释计、文件按行计(一条注释可挂多个 PMID 或反之)
带表型的基因型 76,746(官方) 44,118(GenePheno,全量) 68,990(PhenoGenoMP,全量) 讲"官方全库"用 76,746;讲"可下载"用 68,990(后者更接近官方口径,只差 7,756)
MP 术语 14,900(官方) 15,356(词汇表全部,含 410 obsolete,活跃 14,946) 10,965(注释中实际使用) 三者都对,说的是三件事:官方活跃口径 / 文件全部行 / 被用到的子集
人类疾病有小鼠模型 1,957(官方) 1,874(MGI_DO.rpt 小鼠侧 DOID) 1,641(人鼠两侧都有基因) 讲"有模型"用 1,957;讲"人鼠两侧可对照"用 1,641
人鼠同源 19,274(有人类同源) 16,537(一对一直系同源) 28,880 行 / 19,366 唯一人类符号(HMD_HumanPhenotype.rpt,全量) 前两个是官方;第三个是"被展开过的同源对",含 1:N——28,880 是行数不是对数的唯一口径,用之前必须除重
品系 138,711(官方) 101(有 SNP 的品系) — 两个都要说,"138,711 个品系里只有 101 个有 SNP"才是完整事实

这张表的用法:写论文、写数据集卡片、对外沟通时,每个数字后面必须跟口径标签。MGI 的规模数字有九个官方分组、68 个文件、若干派生视图,混用是这类条目最常见的错误。本条目自己在 §1.0 与 INFOBOX 里用的都是官方口径,凡引用本地实测的地方都标了"实测"与抽样范围(§7.2)。


§8 生态位与相邻资源

§8.1 它在联盟中的位置

MGI 不是一个孤岛,它是 Alliance of Genome Resources 的小鼠分册。理解联盟结构,才能知道"哪些数据不必从 MGI 拿":

联盟成员 物种 与 MGI 的关系
MGI 小鼠 本条目
RGD 大鼠 共享 MP 本体(RGD 也用 MP)
ZFIN 斑马鱼 同源与表型,向 uPheno 对齐
FlyBase 果蝇 同源与表型,向 uPheno 对齐
WormBase 线虫 同源与表型,向 uPheno 对齐
SGD 酵母 同源与 GO 注释
Xenbase 爪蟾 同源与表达

联盟带来的两个实际好处:① 跨物种同源查询有统一入口(alliancegenome.org),不必自己去六七个站拼;② 疾病注释开始向统一的 DO + 物种无关模型 收敛。两个实际的限制:① 联盟只做聚合,不做验证——它不告诉你"哪个物种的模型更可靠";② 联盟的刷新频率跟随各成员库,存在时间差,同一基因在 MGI 和 Alliance 上可能一个新一个旧。

§8.2 与本站已收录条目的衔接

条目 关系 具体怎么接
ipd-imght-hla(#125) 免疫遗传学 ↔ 小鼠模型 HLA 等位基因的人类关联 → 找小鼠 MHC(H2)对应等位基因 → 查表型。注意小鼠 MHC 称 H2,命名体系完全不同
dryad(#124) 数据仓储 ↔ 知识库 小鼠研究的原始数据常存 Dryad;MGI 存结论。做"原始数据 → 注释"链条时两头都要
gtex 组织表达 ↔ 小鼠表达 人组织 eQTL 与小鼠 GXD 表达谱可做跨物种对照
tcga 肿瘤基因组 ↔ MMHCdb MGI 的 MMHCdb 子是"人类肿瘤的小鼠模型",与 TCGA 的人类肿瘤基因组是同一问题的两侧
hca 单细胞图谱 ↔ 小鼠发育表达 GXD 的 32.8M 表达结果中以 RNA-Seq 为主(30.7M)
alliance-genome(#128,排期中) 联盟总入口 MGI 是其分册,两个条目要交叉引用避免重复
imgt(#129,排期中) 免疫序列 ↔ 小鼠免疫基因 小鼠 Ig/TCR 基因座在 MGI 有完整坐标

一条跨条目的观察:本站已收录的参考型数据库(dryad、IPD-IMGT/HLA、MGI)在许可上分成三个档:dryad 是 CC0(最宽松)、MGI 是 CC BY 4.0(宽松,需署名)、IPD-IMGT/HLA 是 CC BY-ND(较严,禁演绎)。这个梯度不是随机的——数据越接近"原始观测",许可越宽松;越接近"人工策展的规范",许可越严。MGI 的定位在中间:策展程度高,但发布者(JAX)选择了宽松许可来换取使用率。

§8.3 下游消费者:谁在用 MGI

消费者类型 典型用途 对 MGI 的依赖程度
靶点发现团队 查"这个靶点敲掉会不会死" 高——这是唯一免费可商用的这类数据
表型本体研究者 MP ↔ HPO 映射、uPheno 对齐 高——MP 由 MGI 维护
遗传咨询/AI 辅助诊断 罕见病的小鼠模型证据 中——通常经 OMIM/ClinVar 间接使用
药物安全性(毒理) 敲除表型作为安全性信号 中—高
教学 真实突变等位基因案例 低(但不可替代)
基因组注释流程 坐标与符号归一化 高——小鼠符号的权威来源

一个反直觉的事实:MGI 在机器学习社区的存在感远低于它的实际价值。检索"mouse phenotype prediction dataset",出来的多是 IMPC 的定量数据;MGI 因为"没有 API、文件要手动拉、没有现成 benchmark",被大量论文跳过。但它恰恰是覆盖最广、标注最细的那一份——这是一个典型的"数据可用性差导致使用率低"的案例,也是本条目存在的理由之一。


§9 资源、引用与复现

§9.1 必读文献

文献 用途
Baldarelli et al. 2024, Genetics 227(1):iyae031 当前主引文,MGI 系统综述。所有引用应首选此篇
GXD 2026 update, NAR 54:D1190-D1196 表达部分(GXD)的最新描述
Smith & Eppig 等历年 NAR Database Issue 论文 版本沿革与功能演进
资源 URL
主页 https://www.informatics.jax.org/
项目介绍 https://www.informatics.jax.org/mgihome/projects/aboutmgi.shtml
统计总页(数字由 AJAX 填充) https://www.informatics.jax.org/mgihome/homepages/stats/all_stats.shtml
统计数据端点(真正的数字在这里) https://www.informatics.jax.org/home/statistics/stats%20page%20markers
报告下载目录(68 个文件) https://www.informatics.jax.org/downloads/reports/index.html
许可与版权(读原文) https://www.informatics.jax.org/mgihome/other/copyright.shtml
MP 本体(OBO 格式) https://www.informatics.jax.org/downloads/reports/MPheno_OBO.ontology
MP 术语浏览 https://www.informatics.jax.org/vocab/mp_ontology
疾病门户 https://www.informatics.jax.org/diseasePortal
人鼠疾病连接 https://www.informatics.jax.org/humanDisease.shtml
MouseMine(InterMine,程序化查询) https://www.mousemine.org/
IMSR(找活体小鼠) https://www.findmice.org/
Alliance of Genome Resources https://www.alliancegenome.org/
GO 小鼠注释(不在 MGI 站内) https://current.geneontology.org/annotations/gaf/MOUSE-mod.gaf.gz
IMPC(定量表型) https://www.mousephenotype.org/
MPD(品系基线表型) https://phenome.jax.org/

§9.3 复现本条目全部数字的脚本

#!/bin/bash
# reproduce.sh — 复现本条目所有实测数字
set -u
DIR=/tmp/mgi; mkdir -p "$DIR"; cd "$DIR"

# ① 完整下载(对齐 Content-Length,这是关键)
for f in MRK_List2.rpt VOC_MammalianPhenotype.rpt MGI_GenePheno.rpt \
         MGI_PhenoGenoMP.rpt HMD_HumanPhenotype.rpt MGI_DO.rpt \
         MGI_Gene_Model_Coord.rpt MPheno_OBO.ontology; do
  total=$(curl -sSI "https://www.informatics.jax.org/downloads/reports/$f" \
          | awk 'tolower($1)=="content-length:"{print $2}' | tr -d '\r')
  echo "$f -> $total"
  for i in $(seq 1 200); do
    cur=$(stat -c%s "$f" 2>/dev/null || echo 0)
    [ "$cur" -ge "$total" ] && break
    curl -sS --http1.1 --max-time 300 -C - -o "$f" \
      "https://www.informatics.jax.org/downloads/reports/$f" || true
  done
  echo "  done $(stat -c%s "$f") / $total"
done

# ② 断言:长度必须完全对齐
python3 - <<'PY'
import os, subprocess, sys
bad = []
for f in ["MRK_List2.rpt","VOC_MammalianPhenotype.rpt","MGI_GenePheno.rpt"]:
    local = os.path.getsize(f)
    head = subprocess.run(["curl","-sSI",
        "https://www.informatics.jax.org/downloads/reports/"+f],
        capture_output=True, text=True).stdout
    remote = int([l.split(":")[1] for l in head.splitlines()
                  if l.lower().startswith("content-length")][0])
    print(f, local, remote, "OK" if local==remote else "MISMATCH")
    if local != remote: bad.append(f)
sys.exit(1 if bad else 0)
PY

这个脚本的价值不在"下载",在于第二步的断言。没有第二步,你会在不知道的情况下用 3.8% 的数据产出一个模型(§6.5 坑点 5)。

§9.4 BibTeX

@article{baldarelli2024mgi,
  title   = {Mouse Genome Informatics: an integrated knowledgebase system for the laboratory mouse},
  author  = {Baldarelli, Richard M. and Smith, Cynthia L. and Ringwald, Martin
             and Richardson, Joel E. and Bult, Carol J. and Mouse Genome Informatics Group},
  journal = {Genetics},
  volume  = {227},
  number  = {1},
  pages   = {iyae031},
  year    = {2024},
  doi     = {10.1093/genetics/iyae031}
}

@misc{mgi2026release,
  title        = {Mouse Genome Informatics (MGI), version 6.29},
  author       = {{The Jackson Laboratory}},
  year         = {2026},
  note         = {Database last updated 2026-10-13; bulk reports rebuilt 2026-10-19},
  howpublished = {\url{https://www.informatics.jax.org/}},
  url          = {https://www.informatics.jax.org/}
}

@misc{mpontology,
  title        = {The Mammalian Phenotype Ontology},
  author       = {{The Jackson Laboratory}},
  year         = {2026},
  note         = {data-version releases/2026-09-23/mp.obo; 14,946 active terms in VOC_MammalianPhenotype.rpt},
  url          = {https://www.informatics.jax.org/vocab/mp_ontology}
}

§10 AI 声明卡

dataset_card:
  name: "Mouse Genome Informatics (MGI)"
  version: "6.29"
  last_database_update: "2026-10-13"
  reports_rebuilt: "2026-10-19T12:00Z"
  reference_genome: "GRCm39"
  license:
    data_and_annotations: "CC BY 4.0"        # 允许商用、演绎、再分发,需署名
    images: "not redistributable"            # 例外!见 copyright.shtml
    ontologies:                              # MP / EMAPA / MA 均由 MGI 产出
      MP: "CC BY 4.0"
      EMAPA: "CC BY 4.0"
      MA: "CC BY 4.0"
  scale:
    official:
      genes: 75252
      mapped_markers: 630567
      mutant_alleles_in_mice: 141808
      mutant_alleles_cell_lines_only: 590371
      targeted_alleles: 73134
      genotypes_with_phenotype: 76746
      mp_annotations: 415358
      mp_terms: 14900
      human_diseases_modelled: 1957
      strains: 138711
      strains_with_snp: 101
      refsnps: 66340659
  ai_readiness:
    score: 4          # /5
    strengths:
      - "CC BY 4.0:允许商用、演绎、再分发"
      - "MGI ID 全库唯一、跨版本稳定"
      - "MP 本体有 ID/名称/定义三层,14,946 活跃术语"
      - "坐标 100% 基于 GRCm39,无混合组装"
      - "68 个平面文件,一次下载即离线可复现"
    weaknesses:
      - "无公开 REST API(/api/ 返回 HTML,坑点 3)"
      - "统计数字只存在于 AJAX 端点(坑点 1)"
      - "文件下载静默截断,Content-Length 不可信(坑点 5)"
      - "无定量表型、无外显率、无统计显著性"
      - "无官方训练/测试划分建议,存在三类结构性泄漏"
      - "无任何预处理脚本或官方解析器"
  recommended_tasks:
    - "基因型→MP 多标签预测(按 gene 或 pmid 分组划分)"
    - "跨物种表型迁移(人 HPO → 鼠 MP)"
    - "表型命名实体识别(MP 术语 + 定义串)"
    - "靶点安全性预筛(敲除表型中的致死/发育信号)"
    - "基因-表型知识图谱构建"
  not_recommended_tasks:
    - "作为人类表型频率或患病率来源"
    - "用注释条数做基因重要性排序"
    - "直接使用 MGI 图片(不可再分发)"
    - "跨品系直接套用 GRCm39 坐标"
  leakage_controls:
    group_by_gene: required        # 同一基因的多个等位基因不得跨训练/测试
    group_by_pmid: required        # 同一文献的多条注释不得跨侧
    group_by_human_symbol: required # HMD 的 1:N 展开不得跨侧
  pitfalls: 8                      # 详见 §6.5
  daims: 11.0                      # /24,见 §7.6
  cite: "Baldarelli et al. 2024, Genetics 227(1):iyae031"

附录 A:本条目数字的一页速查

问题 答案
有多少个基因? 75,252(官方,含未克隆突变体);主表 Gene 类型 76,131;蛋白编码 19,879
有多少个标记? 630,567(官方已定位);主表里 enhancer 与 CTCF 位点合计占比超过三成
有多少个突变等位基因? 141,808(活体小鼠)+ 590,371(仅细胞系);targeted alleles 73,134
有多少条表型注释? 415,358(官方);覆盖 76,746 个基因型。可下载的 MGI_PhenoGenoMP.rpt 有 396,294 行 / 68,990 基因型
有多少个 MP 术语? 14,946 活跃(词汇表 15,356 含 410 obsolete;官方页写 14,900)
注释里实际用了多少个? 10,965(MGI_GenePheno.rpt 全量,占活跃术语 73.4%)
有多少人类疾病有模型? 1,957(官方);MGI_DO.rpt 小鼠侧 1,874;人鼠两侧都有基因的 1,641
人鼠同源有多少? 19,274 有人类同源;16,537 一对一;HMD_HumanPhenotype.rpt 里 14,741 / 28,880(51.0%) 小鼠侧有表型
有 API 吗? 没有。MouseMine 可查,或下载 68 个文件
许可能商用吗? 能(CC BY 4.0),但图片不能再分发
最大的坑是什么? 文件静默截断——curl -O 只拿到 2.8%-76.5%,无任何报错;补齐后关键文件行数涨 25.8 倍
拿来做什么最合适? 靶点安全性预筛、跨物种表型迁移、基因-表型知识图谱
绝对不能用来做什么? 人类患病率、基因重要性排序、把 MP 当定量表型

相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • ipd-imght-hla — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱
  • sequence-ontology — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱
  • cspec — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱
  • alliance-genome — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱
  • pfam — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱
  • interpro — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱
  • cath — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱
  • hpo — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱
  • oncokb — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱
  • card-db — 共享标签:基因组学与多组学 / 变异与注释 / 知识图谱

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

返回 AI-Ready 数据集