mcpField
T
tooluniverse-comparative-genomics

tooluniverse-comparative-genomics

github.com/mims-harvard数据与数据库1.8k232 次安装3 天前更新
代码仓库

关于 tooluniverse-comparative-genomics

面向跨物种基因比较的 ToolUniverse 技能,可查找直系同源基因并比较序列、功能注释和进化关系。它汇集多种同源基因数据库,并提供处理基因重复与保守性分析的指导。

主要功能

  1. 01跨物种查找直系同源基因
  2. 02比较基因注释与序列
  3. 03分析进化保守性
  4. 04检查基因重复关系
  5. 05计算 dN/dS

适用场景

  1. 01查找人类基因的模式生物同源基因
  2. 02比较不同物种的基因功能
  3. 03评估基因的进化保守性
  4. 04分析基因家族的复制历史

MCP 相关

该技能使用 ToolUniverse 工具查询 Ensembl Compara、OMA、OrthoDB 等来源的同源基因及序列数据;输入未说明它如何作为 MCP 服务或客户端运行。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mims-harvard/tooluniverse --skill tooluniverse-comparative-genomics

安装后在 Claude Code 中输入/tooluniverse-comparative-genomics确认已加载。

附带文件scripts/dnds.py

详细介绍

比较基因组学与直系同源分析

跨物种基因比较、直系同源基因识别、序列检索和功能保守性分析,整合 Ensembl Compara、NCBI、UniProt、OLS、Monarch 和 OpenTargets。

查询,不要猜测

对任何科学事实不确定时,请先查询数据库(PubMed、UniProt、ChEMBL、ClinVar 等),而不是凭记忆推理。数据库验证过的答案总是比猜测更可靠。

计算,不要描述

如果分析需要计算(统计、数据处理、评分、富集分析),请通过 Bash 编写并运行 Python 代码。不要描述你会怎么做,而要实际执行并报告真实结果。使用 ToolUniverse 工具检索数据,然后用 Python(pandas、scipy、statsmodels、matplotlib)进行分析。

何时使用此技能

触发条件:

  • “查找 [人类基因] 的小鼠直系同源基因”
  • “比较不同物种中的 [基因]” -“[基因] 在 [生物] 中是否保守?”
  • “[基因] 有哪些直系同源基因?” -“跨物种比较 [基因/蛋白质]” -“[基因] 的进化保守性” -“比较人类和小鼠 [基因] 的 GO 注释”

使用场景:

  1. 直系同源基因发现:为人类基因查找其他物种中的对应基因
  2. 保守性分析:评估基因在不同进化距离上的保守程度
  3. 功能比较:比较直系同源基因间的 GO 术语、结构域和注释
  4. 模式生物选择:确定哪种模式生物最能重现人类基因功能
  5. 基因树分析:可视化基因家族的进化历史
  6. 跨物种表型关联:通过直系同源基因,将人类疾病表型与模式生物表型关联起来

保守性推理框架

要理解保守性,必须区分不同类型的进化模式,以及它们对功能的意义。

高度保守意味着存在功能约束。 如果一个基因从酵母到人类都以 1:1 直系同源基因的形式保留,说明净化选择阻止了序列分化——该基因的功能至关重要,无法轻易改变。蛋白质序列中高度保守的位置(PhastCons 评分 > 0.8,或 GERP RS > 4)受到强烈约束;这些位置上的突变致病的可能性远高于其他位置。对于非编码区域,哺乳动物中的 PhastCons > 0.5 表明该区域可能是候选调控元件。

某个谱系中的低保守性有两种可能的解释:选择压力放松或正选择。 使用 dN/dS 比值(非同义替换率与同义替换率之比)来区分两者。dN/dS 比值接近 1 表明中性进化——该基因不再受到净化选择(约束放松,可能反映该谱系中的功能丧失)。dN/dS 比值 > 1 表示正选择——该基因的分化速度超过中性预期,通常是因为它正在适应新的环境或功能。dN/dS 比值 << 1 是净化选择(功能约束)的标志。当某个脊椎动物基因在树的某个特定分支上表现出高度分化时,在断定其功能丧失之前,应先判断适用哪种解释。

计算 dN/dS。 数据路径:ensembl_get_homology(...) → 1:1 直系同源基因 ID → 对每个 ID 调用 EnsemblSeq_get_id_sequence(id=..., type="cds") → 对两个 CDS 进行密码子比对(直系同源 CDS 通常可以直接比对;对于差异较大的序列对,应先比对蛋白质,再反向翻译)→ 计算 dN/dS。优先使用 Sequence_dn_ds 工具——一次调用即可返回结构化的 dN、dS、dN_dS、逐位点计数和解释:

Sequence_dn_ds(seq1="ATG...", seq2="ATG...")        # inline codon-aligned CDS
Sequence_dn_ds(fasta1_path="human.fa", fasta2_path="mouse.fa")

该工具实现了带有 Jukes-Cantor 校正的 Nei-Gojobori(1986)估算方法(捆绑的 scripts/dnds.py 是完全相同的 CLI 形式,且已通过 Biopython NG86 验证)。当 dS 为 0 或无法校正(替换次数过少或过多)时,dN_dS 为 null——如果同义位点不足,不要过度解读单个高度分化的序列对。

直系同源关系类型会影响解读。 1:1 直系同源关系(人类中一个基因,小鼠中一个基因)是可信度最高的功能等价关系——该基因在任一谱系中都没有发生复制,因此最可能执行相同的祖先功能。1:many 关系(人类中一个基因,小鼠中多个基因)意味着目标物种中的该基因发生了复制;这些拷贝可能发生亚功能化(每个拷贝执行原始功能的一部分)或新功能化(一个拷贝获得新功能)。不要假设两个拷贝都保留了完整的祖先功能。many:many 关系反映了两个物种中复杂的复制历史,需要逐一分析每一对旁系同源基因。

保守性的深度可预测基因的必需性。 一个在所有脊椎动物中都保守的基因,说明其参与基本的细胞过程。一个仅在哺乳动物中保守的基因,说明它可能是更专门化的脊椎动物创新。仅存在于灵长类或仅存在于人类中的基因,可能是近期进化出现的,或许参与人类特有的生物学过程,但通常不像深度保守的基因那样有充分的功能研究。

缺少直系同源基因是一个发现,而不是错误。 谱系特异性基因确实存在,并且具有生物学意义。在断定某个基因具有谱系特异性之前,请检查:(1)使用放宽阈值的 BLAST 能否找到远缘同源基因;(2)是否存在 Ensembl Compara 未能检出的高度分化直系同源基因;(3)该基因是否属于快速进化的基因家族(免疫基因、嗅觉受体、生殖蛋白质),这些家族通常会发生基因更替。


工作流概览

Input (gene symbol/ID + reference species)
  |
  v
Phase 1: Gene Identification & Validation
  |
  v
Phase 2: Ortholog Discovery (Ensembl Compara + OpenTargets)
  |
  v
Phase 3: Sequence Retrieval (NCBI + Ensembl)
  |
  v
Phase 4: Functional Annotation Comparison (UniProt + OLS GO terms)
  |
  v
Phase 5: Cross-Species Phenotype Bridging (Monarch)
  |
  v
Phase 6: Gene Tree & Evolutionary Context (Ensembl Compara)
  |
  v
Report: Conservation summary, ortholog evidence, functional comparison, phenotype bridging

阶段 1:基因识别与验证

ensembl_lookup_gene 接受 gene_id(基因符号或 Ensembl ID)。使用基因符号时,必须提供 species 参数(例如 species="homo_sapiens");省略该参数会导致错误。提取 Ensembl 基因 ID、描述、生物类型和染色体坐标,以供后续查询使用。对于非人类参考物种,请相应调整 species(例如 "mus_musculus"、"danio_rerio")。

对于 Ensembl 注释较完善的物种范围之外的物种(大多数非模式生物),请先检查 GoaT_get_species(taxon=...),确认是否确实存在参考基因组组装(及其状态:草图级、染色体级或已注释),再假定基因级查询能够正常工作。


阶段 2:直系同源基因发现

EnsemblCompara_get_orthologues 是主要工具。它接受 gene(基因符号或 Ensembl ID)、species(源物种,默认值为 "human"),以及可选的 target_species(例如 "mouse"、"zebrafish")或 target_taxon(NCBI 分类 ID)。省略 target_species 可获取整个进化树中的所有直系同源基因;如需特定物种,可在客户端进行筛选。该工具会返回每个直系同源基因的同源类型(one2one、one2many、many2many)和分类学分化程度。

如果需要在直系同源基因映射之外获取序列级数据,可使用替代工具 ensembl_get_homology。使用 sequence="protein" 和 aligned=true 可比较不同物种间的比对序列。

OpenTargets_get_target_homologues_by_ensemblID(接受 ensemblId)提供来自 OpenTargets 的补充直系同源基因数据,可补充药物可成药性相关信息,并与模式生物表型数据交叉参考。

推理:优先选择 1:1 直系同源基因,将其视为高置信度的功能等效基因。对于 1:多 的情况,应报告所有拷贝,并指出需要进行旁系同源基因特异性功能分析。如果 Ensembl Compara 中没有对应条目,请先尝试 OMA(见下文),再使用 BLAST——OMA 收录的 2,600 多个基因组,涵盖的无脊椎动物、真菌和微生物远多于 Ensembl Compara。

建议检查的主要模式生物:小鼠(分类 ID 10090)、大鼠(10116)、斑马鱼(7955)、果蝇(7227)、秀丽隐杆线虫(6239)、酿酒酵母(4932)。

OMA:互补/更广泛的直系同源来源

Ensembl Compara 以脊椎动物为中心(参见 Limitations)。OMA(Orthologous MAtrix) 覆盖 2,600 多个基因组,横跨脊椎动物、无脊椎动物、植物、真菌和微生物;此外,它还提供 Ensembl Compara 不具备的两项内容:层级直系同源组(HOG)——记录基因家族在某一分类范围内完整的复制/物种形成历史,而不只是成对判定;以及 OMA 组——最严格的直系同源定义(每个物种最多贡献一个基因)。在以下情况下使用 OMA:目标物种不在 Ensembl 注释完善的物种范围内;你需要了解基因家族的复制历史(而不只是成对直系同源基因列表);或者你希望获得尽可能保守的 1:1 直系同源基因集,用于无法容忍假阳性的后续分析。

入口——将基因符号解析为 OMA 标识符: OMA_get_protein 只接受 UniProt 登录号(例如 P04637)或 OMA ID(例如 HUMAN31534),不接受基因符号。如果你已在 Phase 1/4 中解析出 UniProt 登录号,可直接在此使用;它比下面的替代方法更可靠。

如果你只有基因符号,OMA_resolve_xref(search=...) 可以进行查询,但它会在所有交叉引用数据库(STRING、RefSeq、UniProt 等)中进行子字符串/模糊匹配,而不是精确匹配基因符号——实时验证发现:搜索 search="TP53" 会返回 1109443.G4TP53(一个无关真菌蛋白的 STRING ID)和 29760.D7TP53(Vitis vinifera)等条目,纯粹是因为“TP53”是交叉引用字符串的子字符串,而不是因为它们是 TP53 的直系同源基因。务必筛选结果:只有同时满足 seq_match: "exact"、source 以 UniProtKB 开头,且 species_name 与预期相符的条目,才可采信其中的 oma_id/entry_nr。对于常见的人类基因,先解析出 UniProt 登录号(tooluniverse-sequence-retrieval / UniProt_search)更快捷、更安全,并可完全跳过 OMA_resolve_xref。

获得 UniProt 登录号或 OMA ID 后的 OMA 核心工作流:

OMA_get_protein(protein_id="P04637")
  -> oma_id (e.g. HUMAN31534), oma_group, oma_hog_id (e.g. HOG:F0782425.2c.7a),
     roothog_id, chromosome/locus — the hub record for everything below

OMA_get_orthologs(protein_id="P04637", rel_type="1:1"|"1:n"|"n:1"|"n:m"|omit, per_page=...)
  -> pairwise orthologs with rel_type, evolutionary distance, alignment score.
     OMA does not paginate internally — it fetches the whole set and ToolUniverse
     slices it client-side — so metadata.total_count is the TRUE ortholog count
     (e.g. 130 for human TP53) even when metadata.count (page size) is much
     smaller; never report metadata.count as "the number of orthologs".

OMA_get_hog(hog_id="HOG:F0782425")
  -> full duplication/speciation tree: level (taxonomic rank of this HOG node,
     e.g. "Euteleostomi"), children_hogs (lineage-specific sub-duplications,
     each with its own hog_id and alternative_levels), completeness_score.
     Use this — not OMA_get_orthologs — when the question is about *when and
     where* a gene family duplicated, not just which species have a copy.
     HOG IDs are reassigned between OMA releases; always get the current one
     from OMA_get_protein's oma_hog_id, don't hardcode one from an old query.

OMA_get_group(group_id="1458663")  # from OMA_get_protein's oma_group field
  -> the strict 1:1-only cross-species group. Use the oma_group value FROM
     THE PROTEIN RESPONSE, not from unrelated examples — group numbering is
     dense and a group ID a few hundred thousand off from the right one
     returns a completely unrelated gene family's group with no error
     (verified live: group 1388790 returns "THO complex subunit 5 homolog",
     not p53 — always confirm the group_nr in the response matches what you
     expect, don't assume a group ID you were told is correct actually is).

OMA_get_protein_go(protein_id="HUMAN31534", aspect="biological_process"|...)
  -> GO annotations with per-term information_content (higher = more specific/
     rarer term) and evidence code. This is OMA's own GO layer — use it
     alongside (not instead of) the UniProt/OLS GO retrieval in Phase 4;
     the two databases' annotation sets do not always match exactly.

OMA_get_genome_pair_orthologs(genome1="HUMAN", genome2="MOUSE", per_page=..., page=...)
  -> the FULL proteome-vs-proteome ortholog table between two species (not one
     query protein) — the right tool for building a species-pair ortholog
     table or synteny/dN-dS panel across many genes at once, rather than
     calling OMA_get_orthologs one protein at a time. Species arguments accept
     either a UniProt species code ("HUMAN", "MOUSE", "PANTR") or an NCBI
     taxon ID.

推理:当某个发现是关键依据时(例如为疾病研究选择模式生物),应将 Ensembl Compara 的 1:1 判定与 OMA 对同一蛋白返回的 OMA_get_orthologs(rel_type="1:1") 结果交叉核对——这两个数据库使用不同的直系同源推断算法(Compara:基因树;OMA:成对比较 + 基于图的方法),对于高度保守的基因通常结果一致,但出现分歧本身也很有参考价值(通常意味着该关系确实存在歧义,例如近期发生过基因复制)。

将 OrthoDB 用作第二种基于分组的直系同源来源

OrthoDB 是第三个直系同源数据库,与 Ensembl Compara(基于基因树)和 OMA(基于成对关系 + 严格分组)都不同:它会按分类层级定义直系同源组——同一个基因家族在 Eukaryota、Metazoa、Vertebrata、Primates 等层级上会获得不同的 group_id,每个组都反映该进化深度下可见的成员和重复模式。这与 OMA 的 HOG 树(一个对象编码完整的重复历史)真正不同:OrthoDB 会为每个层级提供一个扁平的成员列表快照,并且在有数据时,直接附加到组上的 GO/KEGG/InterPro 功能注释;此外,在这三个数据库中,它是唯一一个能够通过一次调用直接检索组内所有成员 FASTA 序列的数据库。

入口——按基因名称搜索并不可靠,已在线验证。 OrthoDB_search_groups(query="TP53", species=9606, limit=20) 在总计 100 个结果中,前 20 个结果里并未返回 p53 基因的实际分组,而是返回了“TP53-target gene 3 protein”“TP53-binding protein 1”以及“phosphoglycerate mutase”等无关分组,因为搜索是针对组共识名称/文本进行宽松匹配,而不是精确的基因符号索引。只有搜索该组的真实 OrthoDB 共识名称,才找到了实际分组:OrthoDB_search_groups(query="cellular tumor antigen p53") → Eukaryota 层级上的 "tumor protein p53",其 group_id="4289813at2759"。这与 OMA_resolve_xref 的子字符串匹配(见上文)属于同一类失效模式——绝不要把搜索结果中的第一项直接当作“该基因所属的分组”,而不先确认返回的 name,并通过 OrthoDB_get_orthologs 确认其中确实包含预期的物种/gene_id。

OrthoDB 核心工作流(已在上文 OMA 部分所用的同一 TP53 示例上在线验证,可直接比较):

OrthoDB_search_groups(query=..., species=9606, level=..., limit=...)
  -> candidate group_ids. Prefer a descriptive/consensus-name query over a bare
     gene symbol (see above). `level` narrows to one taxonomic depth (7742 =
     Vertebrata, 33208 = Metazoa, 2759 = Eukaryota) if you already know which
     scope you want; omit it to see the gene's group at every level OrthoDB
     tracks separately.

OrthoDB_get_group_details(group_id="4289813at2759")
  -> name, level_name, tax_id, plus go_terms/kegg_pathways/interpro_domains
     WHEN POPULATED. Verified live: this TP53 (Eukaryota-level) group returned
     `go_terms: null, kegg_pathways: null, interpro_domains: null` -- these
     enrichment fields are not populated for every group, do not assume their
     absence means "no known function," just that OrthoDB hasn't attached
     that layer at this particular group/level.

OrthoDB_get_orthologs(group_id="4289813at2759", species="9606,10090")
  -> per-organism member list. Verified live: returned 2 entries EACH for
     human and mouse (gene_id "TP53"/"7157" for human, "Trp53"/"22059" for
     mouse) -- OrthoDB can list more than one record per organism per group
     (alternate gene-model annotations for the same locus), so
     `total_orthologs` is a record count, not a species count; group by
     `organism_name` (or use `organisms_summary`) to get the actual per-species
     tally.

OrthoDB_get_group_fasta(group_id="4289813at2759", species="9606", limit=...)
  -> the one thing OMA and Ensembl Compara tool calls in this skill don't give
     you directly: real amino-acid sequences for every member of a group in
     one call, with `pub_gene_id`/`organism_name` parsed out of each header.
     Verified live: returned 2 human sequences (410 aa and 393 aa -- different
     isoform-level records, not an error) ready for MSA/phylogenetic input
     without a separate NCBI/Ensembl sequence-retrieval round-trip.

理由:当你明确需要以下内容时,应将 OrthoDB 与 OMA 配合使用(而非取代 OMA):(a) 按分类层级划分的组快照,而不是合并后的单一重复树;(b) 有数据时,组级别的 GO/KEGG/InterPro 富集信息;或 (c) 通过一次调用获取整个直系同源组的 FASTA 序列,用于后续比对。对于原始直系同源数量以及 1:1/1:n 关系类型查询,OMA 的 OMA_get_orthologs 更便于与 Ensembl Compara 得到的同类结果直接比较;应将 OrthoDB 视为补充数据层,而非替代性的决策依据。


第 3 阶段:序列检索

使用 NCBI_search_nucleotide(organism 接受完整名称,例如 “Homo sapiens”;gene;seq_type = "mRNA")查找序列记录,然后使用 NCBI_fetch_accessions 将 UID 转换为登录号,最后使用 NCBI_get_sequence 检索 FASTA 数据。对于典型序列,优先选择 RefSeq(mRNA 使用 NM_,蛋白质使用 NP_),而不是其他登录号。

需要直接获取比对序列时,使用 sequence="cdna" 或 sequence="protein" 的 ensembl_get_homology 比运行 BLAST 更快。只有在 Ensembl Compara 未能找到直系同源基因时,才使用 BLAST。


第 4 阶段:功能注释比较

UniProt_search 接受 UniProt 语法的查询(例如 "gene:TP53 AND organism_id:9606 AND reviewed:true")以及用于检索特定注释列(包括 GO 术语)的 fields。使用 reviewed:true 可将结果限制为经 Swiss-Prot 策展的条目。

UniProt_get_function_by_accession 接受 UniProt 登录号,并返回功能描述字符串列表(而非字典)。

对于每个要比较的物种,检索 GO 术语,并按生物过程(BP)、分子功能(MF)和细胞组分(CC)进行分组。共有的 GO 术语表示功能保守;人类中存在而直系同源基因中缺失的术语,可能反映的是注释偏差(研究较少的生物体拥有较少的 GO 注释),而非真正的功能分化。关于功能保守的结论应聚焦于共有术语。

关于注释缺失的判断:如果小鼠直系同源基因缺少人类蛋白质具有的 GO 术语,应考虑这可能是因为小鼠基因的注释不完整,而非功能分化。反过来——小鼠中存在而人类中缺失的 GO 术语——则较少见,但可能表示功能发生了分化或获得。


第 5 阶段:跨物种表型关联

Monarch_search_gene(接受基因符号作为 query)返回 Monarch 查询所需的基因 CURIE。Monarch_get_gene_phenotypes 和 Monarch_get_gene_diseases 接受基因 CURIE(例如 "HGNC:11998"),并返回跨多个物种的表型/疾病关联。

各物种的表型本体:人类 = HP(HPO),小鼠 = MP(哺乳动物表型),斑马鱼 = ZP,果蝇 = FBcv。Monarch 可整合跨物种信息;比较表型主题(例如,人类的“肿瘤易感性”和小鼠的“肿瘤发病率升高”),而非要求术语完全匹配。

选择模式生物的依据:与人类基因存在 1:1 关系,且在 Monarch 中表现出可重现人类疾病表型的小鼠直系同源基因,是强有力的疾病模型候选。如果小鼠表型与人类疾病表型明显不同,应特别指出这一点——这可能表示物种特异性功能或模型本身的局限性。


第 6 阶段:基因树与进化背景

EnsemblCompara_get_gene_tree(接受 gene、species)返回基因树成员、物种分布,以及物种形成与基因重复事件。EnsemblCompara_get_paralogues 返回源物种中的所有旁系同源基因。

根据基因树评估:(1) 有多少个物种含有该基因家族的成员;(2) 基因重复事件发生的时间(古老或近期);(3) 该基因家族是否在特定谱系中扩增。若某个基因在所有脊椎动物中都以单拷贝形式存在(深度保守、未发生重复),则很可能受到强烈的选择约束。

比较物种的基因组组装背景:当某物种的直系同源基因判定看起来不完整,或你需要查看底层参考组装时,可使用 NCBIDatasets_list_genomes_by_taxon(参数 taxon 为 tax_id,另有 limit、reference_only)查找参考基因组;使用 NCBIDatasets_get_genome_assembly(参数 accession)获取组装指标(连续性/N50/完整性——碎片化的组装可能导致错误的“缺失直系同源基因”判定);使用 NCBIDatasets_get_sequence_reports(参数 accession)获取染色体/支架复制子图。有关微生物基因组的完整组装质控工作流,请参见 tooluniverse-microbial-genome-characterization 技能。


综合问题

解读汇总后的证据时,请逐一思考以下问题:

  1. 直系同源关系是一对一,还是由基因复制产生了功能可能已经发生分化的旁系同源基因?这决定了模式生物中的研究结果能否直接应用于人类基因。
  2. 直系同源基因是否共享保守的 GO 术语(尤其是生物过程),还是存在提示功能分化的谱系特异性功能注释?
  3. 对于疾病基因研究,模式生物的直系同源基因是否重现了相关的人类表型(通过 Monarch),从而支持将其用作疾病模型?
  4. 基因周围的非编码调控区域是否也保守(来自 OpenCRAVAT 的 PhastCons/GERP),这是否表明基因调控也受到保守,而不仅仅是蛋白质功能?
  5. 如果没有找到直系同源基因,该基因是否确实为谱系特异性基因,还是可能存在高度分化的同源基因,只能通过灵敏的序列方法检测到?

后备策略

  • 在 Ensembl Compara 中未找到直系同源基因:先尝试 ensembl_get_homology,然后尝试 OpenTargets_get_target_homologues_by_ensemblID,接着尝试 OMA_get_orthologs(分类群覆盖范围更广,尤其适用于无脊椎动物、真菌和微生物——参见第 2 阶段的 OMA 部分),最后再尝试 BLAST。如果某个物种既不在 Compara 中,也不在 OMA 中,请通过 NCBIDatasets_list_genomes_by_taxon 确认该物种是否有参考组装,并使用 NCBIDatasets_get_genome_assembly 检查其连续性,然后再断定该基因确实不存在
  • 需要了解复制/物种形成历史,而不只是成对的直系同源基因列表:OMA_get_hog 可提供完整的 HOG 树;Ensembl Compara 的基因树(EnsemblCompara_get_gene_tree)可提供类似视图——如果复制时间对结论至关重要,请交叉核对两者
  • 序列检索失败:使用 ensembl_get_homology,并设置 sequence="cdna",作为 NCBI 的替代方案
  • UniProt 在设置 reviewed:true 时返回空结果:尝试移除该筛选条件;该生物可能只有 TrEMBL 条目
  • Monarch 未返回数据:尝试使用 MonarchV3_get_associations,并设置 category="biolink:GeneToPhenotypicFeatureAssociation" 作为替代方案
  • 基因符号在不同物种间存在歧义:全程使用 Ensembl ID,避免符号混淆(例如斑马鱼中的 “p53” 与 “tp53”)

局限性

  • Ensembl Compara:最适用于脊椎动物;对某些基因家族的无脊椎动物和植物覆盖有限。OMA 覆盖 2,600 多个基因组,其中包括更多无脊椎动物/真菌/微生物,但也有自身的缺口(没有像 Ensembl Plants 那样针对植物的基因树整理)——应将两者视为互补,而不是认为其中一个能完全取代另一个
  • OMA_resolve_xref:执行子字符串/模糊匹配,而非精确的基因符号解析——单独输入基因符号(例如 "TP53")会返回仅仅包含该字符串的不相关交叉引用。务必筛选 seq_match: "exact" 和预期的 species_name/来源,或先解析 UniProt 登录号并跳过此工具
  • OMA group/HOG IDs:编号密集且不做范围检查——错误 ID 若与正确 ID 相差几十万,会静默返回另一个不相关的基因家族,且不会报错。务必使用实时 OMA_get_protein 响应中的 ID,切勿凭记忆或假设旧查询中的 ID 仍然正确
  • OrthoDB_search_groups:根据群组共识名称进行宽泛匹配,而非匹配基因符号——搜索单独的基因符号(如 "TP53")可能无法在前 20 多条结果中的任何一条找到该基因所属的群组(已通过实时查询验证),反而会返回名称相似但不相关的群组("TP53-target gene 3 protein"、"TP53-binding protein 1")。在信任返回的群组之前,通过 OrthoDB_get_orthologs 确认其成员;或者搜索描述性名称(如 "cellular tumor antigen p53"),而非单独的符号
  • OrthoDB group/level split:对于 OrthoDB 跟踪的每个分类学级别(Eukaryota、Metazoa、Vertebrata 等),同一个基因都有不同的 group_id——不像 OMA 中有一个 oma_group,不存在基因唯一的规范群组 ID。此外,许多群组的 OrthoDB_get_group_details 中 GO/KEGG/InterPro 字段为 null(已通过实时查询验证)——这些字段缺失表示数据填充不完整,并不代表该基因在其他地方没有相关注释
  • BLAST_protein_search:速度很慢(5–30 分钟);仅在发现直系同源基因的最后手段时使用
  • Monarch:表型覆盖因生物而异;小鼠和斑马鱼的覆盖最好;果蝇和蠕虫的数据较稀疏
  • UniProt GO annotations:偏向研究充分的生物;缺少注释并不意味着缺少功能
  • NCBI_search_nucleotide:可能返回许多异构体;筛选 RefSeq(NM_*)以获取规范转录本
  • 保守性不等于必需性:某些高度保守的基因在特定生物中并非必需

评论

支持 Markdown