# Disease phenologs from Monarch KG 2026-03-06

Phenologs and gene candidates computed from Monarch KG 2026-03-06 (PHENIO 2025-11-14) by monarch-phenologs
local (294b8d7) (https://github.com/monarch-initiative/monarch-phenologs).

Human diseases are compared with the phenotypes of each model species through the PANTHER protein families of their
genes. A disease and a model phenotype whose families overlap more than chance make a phenolog: each species' p-value
cutoff is set from randomised trials at an FDR of 0.05 (`fdr` in `overview.json`). Each disease's 1,000 most
significant phenologs then rank the human genes they point to as candidates for the disease, by the hypergeometric score.

The tables call the diseases terms (`term_id`, `terms.parquet`, `n_known_terms`), the same names a disease release and a
human phenotype release use. Only the phenologs and candidates files are named for the network, so the four files of a
KG version keep apart once downloaded.

| file | one row per |
|---|---|
| `gene-disease-candidates.parquet` | (disease, gene) the ranking scored: the gene candidates |
| `disease-phenologs.parquet` | significant phenolog |
| `known_associations.parquet` | curated human gene-disease association |
| `gene_phenotypes.parquet` | gene-phenotype annotation, every species |
| `human_orthologs.parquet` | (model species gene, human gene) ortholog pair |
| `additive.parquet` | (disease, protein family, phenolog), for each disease's top 20 phenologs and top 40 families |
| `terms.parquet`, `genes.parquet`, `phenotypes.parquet`, `families.parquet`, `species.parquet` | disease, gene, phenotype, protein family, species, with their counts |
| `search.parquet` | thing the site's search box finds |

`overview.json` holds what the site's release page shows; its `release` block has the versions and settings.
`manifest.json` lists every file with its size, row count and sha256.

The tables open in DuckDB, Python and R:

    duckdb -c "SELECT * FROM 'gene-disease-candidates.parquet' WHERE NOT known ORDER BY global_rank LIMIT 10"
    python -c "import pandas as pd; print(pd.read_parquet('gene-disease-candidates.parquet').head())"
    Rscript -e "print(head(arrow::read_parquet('gene-disease-candidates.parquet')))"

Diseases are Mondo ids, human genes HGNC ids, protein families PANTHER ids, and species are written `Genus-species`.

## gene-disease-candidates.parquet

The gene candidates: every (disease, gene) the ranking scored, best first. The pipeline also lists each disease's
curated genes its phenologs never reached, without a score. Those are left out here (`known_associations.parquet` has
every curated pair).

| column | |
|---|---|
| `term_id`, `term_name` | the disease |
| `gene_id`, `symbol` | the human gene |
| `family` | the gene's PANTHER family |
| `score` | smaller is stronger: the hypergeometric p-value of the gene's hits, out of every hit the ranking drew |
| `known` | the gene is curated for the disease |
| `rank` | the gene's place in the disease's ranking, by score. Ties share a place |
| `global_rank` | the pair's place among every pair in this table, by score. Ties share a place |
| `support` | per model species, most phenologs first, as `species:phenologs:of:orthologs:hits`: the disease's phenologs with that species whose phenotype is annotated to an ortholog of the gene, of how many of the disease's phenologs with that species the ranking used, the orthologs that takes, and the (phenolog, ortholog) hits the score counts |
| `n_species` | model species in `support` |
| `n_phenologs` | phenologs in `support`, summed over species |

## disease-phenologs.parquet

Every significant phenolog, ranked within its disease by p-value.

| column | |
|---|---|
| `term_id`, `term_name` | the disease |
| `species` | the model species |
| `phenotype_id`, `phenotype_name` | the model species' phenotype |
| `overlap` | protein families carrying both the disease and the model phenotype |
| `n_term_orthogroups` | protein families of the disease's genes, counting only families the two species share |
| `n_phenotype_orthogroups` | protein families of the model phenotype's genes, counting only families the two species share |
| `n_common` | protein families present in both species: the background of the test |
| `pval` | hypergeometric p-value of the overlap, at or below the species' cutoff |
| `rank` | the phenolog's place among its disease's phenologs, by p-value |

## known_associations.parquet

The curated human gene-disease associations the candidates are measured against.

| column | |
|---|---|
| `gene_id`, `symbol` | the human gene |
| `term_id`, `term_name` | the disease |
| `predicate` | the association's Biolink predicate |
| `family` | the gene's PANTHER family |
| `rank`, `score` | the gene's place and score in the disease's ranking, empty when the ranking did not score it |

## gene_phenotypes.parquet

| column | |
|---|---|
| `species` | the gene's species |
| `gene_id` | the gene |
| `phenotype_id`, `phenotype_name` | a phenotype annotated to it |

## human_orthologs.parquet

| column | |
|---|---|
| `species` | the model species |
| `gene_id` | the model species gene |
| `human_gene_id`, `human_symbol` | its human ortholog |

## additive.parquet

What each protein family adds to a disease's candidates. For each of the disease's top 20 phenologs: the
families carrying that model phenotype that the species shares with humans (the families the phenolog test counts).
Each (family, phenolog) pair adds (overlap / disease orthogroups) x (1 - p-value), and families are ranked by their sum.
Each disease keeps its top 40 families.

| column | |
|---|---|
| `term_id` | the disease |
| `family` | the PANTHER family |
| `family_rank` | the family's place for the disease, by `family_total` |
| `family_total` | the family's sum over the disease's top phenologs |
| `phenolog_rank` | the phenolog's place among the disease's phenologs (`rank` in `disease-phenologs.parquet`) |
| `phenotype_id`, `phenotype_name`, `species` | the phenolog's model phenotype |
| `score` | what the phenolog adds to the family |
| `known_symbols` | the family's human genes curated for the disease |
| `other_symbols` | the family's other human genes |

## terms.parquet

The diseases with at least one phenolog.

| column | |
|---|---|
| `term_id`, `name` | the disease |
| `n_known_genes` | its curated genes |
| `n_phenologs` | its phenologs |
| `n_species` | model species with one of its phenologs |
| `best_pval` | its lowest phenolog p-value |
| `n_candidates` | genes its ranking scored |
| `n_novel_candidates` | of those, genes not curated for it |
| `n_known_recovered` | of those, genes curated for it |
| `top_species` | the model species with most of its phenologs |
| `by_species` | its phenologs per model species, as JSON: `{"Mus-musculus":12,"Danio-rerio":3}` |

## genes.parquet

Every gene of every species with a protein family, a phenotype or a curated disease.

| column | |
|---|---|
| `species`, `gene_id`, `symbol` | the gene |
| `family` | its PANTHER family |
| `n_ortholog_species` | other species of the release the gene has an ortholog in |
| `n_phenotypes` | phenotypes annotated to it |
| `n_known_terms` | diseases it is curated for (human genes only) |
| `n_predicted_terms` | diseases whose candidates here include it |
| `n_novel_terms` | of those, diseases it is not curated for |
| `best_rank` | its best place in a disease's ranking |
| `in_reach` | human genes only: one of its orthologs carries a phenotype the ranking can use, so a disease's ranking can reach it |

## phenotypes.parquet

Every phenotype annotated to a gene, in every species.

| column | |
|---|---|
| `species`, `phenotype_id`, `name` | the phenotype |
| `n_genes` | genes annotated with it |
| `n_orthogroups` | protein families of those genes |
| `n_shared_orthogroups` | model species only: of those, the families shared with humans (the ones the phenolog test counts) |
| `n_known_terms` | curated diseases of the genes annotated with it (so human phenotypes only) |
| `n_phenologs` | phenologs with it |
| `n_terms` | diseases with such a phenolog |
| `best_pval` | the lowest p-value among them |

## families.parquet

The PANTHER protein families.

| column | |
|---|---|
| `family` | the family |
| `n_genes`, `n_species` | its genes, and the species they are in |
| `n_base_genes`, `base_symbols` | its human genes |
| `n_predicted_terms` | diseases whose candidates here include one of its genes |
| `n_novel_terms` | of those, diseases none of its human genes is curated for |
| `best_score` | the best score of one of its genes |
| `n_known_terms` | diseases one of its human genes is curated for |

## species.parquet

| column | |
|---|---|
| `taxon_id`, `species`, `binomial`, `common` | the species |
| `ontology` | its phenotype ontology |
| `is_base` | the base species (human) |
| `color`, `plot_order`, `divergence_mya` | for the site: its colour, its place in lists, and when its lineage split from the human one, in million years (TimeTree) |
| `n_genes` | its genes in the graph |
| `n_phenotyped_genes` | of those, genes with a phenotype |
| `n_ortholog_genes` | of those, genes with an ortholog |
| `n_orthogroups` | protein families of its genes |
| `n_phenotypes_annotated` | phenotypes annotated to its genes |
| `n_phenologs`, `n_terms`, `n_phenotypes_matched` | its phenologs, the diseases they are with, and its phenotypes in them |
| `n_candidates`, `n_novel_candidates` | candidate pairs here it supports, and of those the ones not curated |
| `n_common_with_base` | protein families it shares with humans |
| `n_human_ortholog_genes` | its genes with a human ortholog |
| `fdr_cutoff` | its p-value cutoff at FDR 0.05 |

## search.parquet

| column | |
|---|---|
| `kind` | term, gene, phenotype, family or species |
| `id`, `label`, `species` | what it is |
| `detail` | the line the search box shows under it |
| `weight` | orders the results |
