Oncofusion

start / graph / ana-uniprot-localization-is-not-a-measurement-in-a-quarter-of-this-graph

Analysisstrong confidence 4 of 5: Replicated in peer-reviewed work by more than one group.Q57-localization2

A quarter of this graph's gene entries have a UniProt localization that nobody measured - and the subnuclear vocabulary UniProt does carry avoids the genes we care about most

also called localization evidence code audit · ECO code audit · UniProt subcellular provenance · by-similarity localization

Every gene entry here that names a protein can be checked against UniProt for where that protein lives. Doing that for all 299 of them shows that for about one in four the stated location was never measured in a human protein - it was copied from another species, inferred by a curator, predicted from the sequence, or left with no source at all. All four look identical if you just read the text.

The same thing, for a scientist

Audit of the 299 gene entries in this graph that carry a `data.uniprot` accession, run live against UniProtKB on 2026-09-20 and classified by the ECO evidence code attached to each subcellular-location value. **226 (75.6%) carry at least one experimentally coded location (ECO:0000269).** The remaining 73 do not: **36 (12.0%) have only non-experimental codes** - 21 by similarity (ECO:0000250), 12 curator inference (ECO:0000305), 3 sequence-model prediction (ECO:0000255) - **32 (10.7%) carry location values with no evidence code at all**, and 5 have no subcellular-location comment. Separately, **49 entries carry an uncoded free-text note** and **48 have at least one uncoded location value**, so the uncoded material is not confined to the 32. And the finding that changes what this beat could do: **82 of 299 (27.4%) name a subnuclear or mitotic structure in their UniProt locations, but only 2 of the graph's top 25 genes by degree do.**

Go deeper
The numbers
classn% of 299what it is
at least one ECO:000026922675.6%experimental evidence in manual assertion
only ECO:0000250217.0%by similarity - transferred from another entry, often another species
only ECO:0000305124.0%curator inference - the curator's reading, not the paper's assertion
only ECO:000025531.0%sequence model match - a profile said so
no evidence code at all3210.7%unattributed
no subcellular-location comment51.7%UniProt says nothing

Additional, overlapping counts: 49 entries carry a free-text subcellular NOTE with no evidence code, and 48 have at least one individual location value with no code even though the entry may be coded elsewhere. The note is where the subnuclear detail usually lives, so the uncoded fraction is disproportionately the interesting fraction.

Worked examples from this beat, one per class, all verified individually:

  • ECO:0000250 - gene-dot1l: Cytoplasm is transferred from mouse Q6XZL8, where it means AF17 overexpression pushes Dot1a out of the nucleus in mouse kidney collecting-duct cells, leptomycin-B sensitive.
  • ECO:0000305 - gene-ash2l: Nucleus is a curator inference from PubMed 17355966.
  • ECO:0000255 - gene-meis1: Nucleus is a match to the homeodomain ProRule PRU00108. A homeodomain-less MEIS1 isoform is cytoplasmic.
  • no code - gene-mllt1 (ENL): the comment is literally {"subcellularLocations": [{"location": {"value": "Nucleus"}}]}, with no evidences array.
  • uncoded NOTE - gene-paf1: "punctuate distribution throughout the nucleus except in nucleoli", uncited, and contradicted by a 2024 nucleolar proximity map.

All five render identically in the flat cc_subcellular_location text field that a bulk import reads. The distinction exists only in the JSON evidences array.

The 36 that have locations but no experimental evidence

Named in full, because rule 78's principle applies - a count is not a result until the members are named, and some of these are load-bearing here:

by similarity (21): ABI1, ANP32E, CCNT2, CSNK2A2, CSPG4, CTR9, FANCL, GAS7, HDAC9, KHDRBS2, MEF2C, NASP, PRDM9, PROM1, REL, RTF1, SEPTIN11, SEPTIN5, SGF29, SMC3, USP2.

curator inference (12): ASH2L, KDM6A, KDM6B, MCL1, MED12, MED23, MED26, PBX3, PPIL4, SMARCD2, SS18, SUPT6H.

sequence-model prediction (3): EP400, KDM4C, MEIS1.

Three of these matter immediately. ASH2L, CTR9 and RTF1 are core elongation/COMPASS machinery in this disease; PBX3 and MEIS1 are the homeodomain partners the graph's HOX layer runs on; CCNT2 is a P-TEFb cyclin. None of their localisations is a human measurement.

And 32 with no code at all includes gene-cdk9, gene-runx1, gene-flt3, gene-mllt1, gene-ell2, gene-kat6a, gene-smarcb1, gene-stag2 and gene-set - a list heavy with proteins whose compartment the graph reasons about.

The subnuclear vocabulary is real, and it points away from our genes

UniProt does carry subnuclear terms - nuclear speckle, Cajal body, PML body, nucleolus, nucleoplasm, nuclear matrix, centromere, kinetochore, spindle pole, centrosome. 82 of the 299 accession-carrying gene entries (27.4%) name at least one such structure. Before this beat, the graph's own subnuclear_localization field was present on 7 of 306 gene entries (2.3%).

So a tenfold coverage increase is available for the cost of a fetch. It should not be taken, at least not as content, for the reasons this beat's entries document one by one: the evidence class varies and is invisible in the flat text; the annotation describes the wild-type protein while this graph's subject is a fusion; and for several genes the UniProt statement is the one that turns out to be contested (PAF1's nucleolar exclusion) or unattributed (ENL's nucleus).

Use it as a worklist, not as a payload. And note the sharp limitation on that worklist: only 2 of the graph's top 25 genes by degree (ELL and KAT7) have a subnuclear-naming UniProt location at all. The genes the graph leans on hardest are precisely the ones UniProt cannot help with, which is why this beat had to read papers for DOT1L, PSIP1, HOXA9, MLLT1, MLLT10, WDR5, MEIS1, PAF1 and DPY30 rather than fetch them.

How to reproduce this
  1. Collect data.uniprot from every gene-*.json in data/graph/nodes/*/. (299 entries on 2026-09-20; all 299 accessions distinct.)
  2. Query https://rest.uniprot.org/uniprotkb/search in batches of 40 with fields=accession,gene_primary,length,cc_subcellular_location&format=json. JSON, not TSV - the TSV flattens the evidence codes away, which is the whole point.
  3. For each record walk comments[commentType=='SUBCELLULAR LOCATION'], then each subcellularLocations[].location, and read its evidences[].evidenceCode. Also test note.texts[].evidences for the free-text note.
  4. Classify: ECO:0000269 experimental; 0000305 curator inference; 0000250 by similarity; 0000255 sequence model; absent array = uncoded.
  5. Confirm every returned row's genes[0].geneName.value equals the symbol expected for that accession before using it - rules 62-66 apply to a batch query exactly as to a single one.

All 299 accessions resolved; none failed. The script used lives outside the repository in this cycle's scratchpad and the procedure above is the reproducible form.

Facts and figures
methodCollect data.uniprot from every gene-*.json; query UniProtKB REST search in batches of 40 with fields=accession,gene_primary,length,cc_subcellular_location and format=json (NOT tsv, which discards evidence codes); walk comments[SUBCELLULAR LOCATION].subcellularLocations[].location.evidences[].evidenceCode and note.texts[].evidences; classify by ECO code.
statusrun
run date2026-09-20
result summary299 accession-carrying gene entries: 226 experimental (75.6%), 36 non-experimental only (12.0%: 21 by-similarity, 12 curator-inference, 3 sequence-model), 32 with no evidence code at all (10.7%), 5 with no subcellular comment. 49 entries carry an uncoded free-text note; 48 have >=1 uncoded location value. 82 (27.4%) name a subnuclear or mitotic structure; only 2 of the top 25 by degree do.
n gene entries with accession299
n distinct accessions299
n unresolved0
recommendationUse the 82 as a WORKLIST, never as a payload. The annotation describes the wild-type protein, its evidence class is invisible in the flat text field, and for several core genes the UniProt statement is the contested or unattributed one.
counts
top25_naming_a_subnuclear…2.000top25_naming_a_subnuclear_structure: 2sequence_model_only3.000sequence_model_only: 3no_subcellular_comment5.000no_subcellular_comment: 5curator_inference_only12.0curator_inference_only: 12by_similarity_only21.0by_similarity_only: 21no_evidence_code_at_all32.0no_evidence_code_at_all: 32uncoded_location_value48.0uncoded_location_value: 48uncoded_note49.0uncoded_note: 49names_a_subnuclear_or_mit…82.0names_a_subnuclear_or_mitotic_structure: 82has_experimental226.0has_experimental: 226
inputs
[
  "data/graph/nodes/*/gene-*.json",
  "https://rest.uniprot.org/uniprotkb/search"
]
counts — the numbers behind the chart
{
  "has_experimental": 226,
  "by_similarity_only": 21,
  "curator_inference_only": 12,
  "sequence_model_only": 3,
  "no_evidence_code_at_all": 32,
  "no_subcellular_comment": 5,
  "uncoded_note": 49,
  "uncoded_location_value": 48,
  "names_a_subnuclear_or_mitotic_structure": 82,
  "top25_naming_a_subnuclear_structure": 2
}
by similarity only genes
[
  "ABI1",
  "ANP32E",
  "CCNT2",
  "CSNK2A2",
  "CSPG4",
  "CTR9",
  "FANCL",
  "GAS7",
  "HDAC9",
  "KHDRBS2",
  "MEF2C",
  "NASP",
  "PRDM9",
  "PROM1",
  "REL",
  "RTF1",
  "SEPTIN11",
  "SEPTIN5",
  "SGF29",
  "SMC3",
  "USP2"
]
curator inference only genes
[
  "ASH2L",
  "KDM6A",
  "KDM6B",
  "MCL1",
  "MED12",
  "MED23",
  "MED26",
  "PBX3",
  "PPIL4",
  "SMARCD2",
  "SS18",
  "SUPT6H"
]
sequence model only genes
[
  "EP400",
  "KDM4C",
  "MEIS1"
]
no evidence code at all genes
[
  "AFF3",
  "ARID2",
  "ATRX",
  "CD34",
  "CD7",
  "CDK9",
  "CHEK2",
  "EED",
  "ELL2",
  "FANCA",
  "FLT3",
  "FUT4",
  "H2AZ1",
  "HDAC5",
  "HIRA",
  "HNF4A",
  "HOXA10",
  "JAK1",
  "JUND",
  "KAT6A",
  "MAP3K14",
  "MLLT1",
  "MSI2",
  "NCOA6",
  "NFKB2",
  "RUNX1",
  "SBDS",
  "SET",
  "SIAH1",
  "SMARCB1",
  "STAG2",
  "UBN1"
]
subnuclear term list used
[
  "speckle",
  "Cajal",
  "nucleol*",
  "PML body",
  "lamina",
  "chromocent*",
  "heterochromat*",
  "nuclear body",
  "nucleoplasm",
  "nucleus matrix",
  "telomere",
  "centromere",
  "kinetochore",
  "spindle",
  "midbody",
  "centrosome"
]
subnuclear terms NOT searched
[
  "paraspeckle",
  "perinucleolar compartment",
  "Polycomb body",
  "transcription factory",
  "nuclear pore",
  "condensate"
]
How this could bite us back
  • A target dossier assembled from database localization will state compartments for proteins nobody has localised, and those statements will be quoted downstream with no marker of their provenance - the failure mode this graph has already recorded for fabricated identifiers, arriving through a legitimate source.
  • If a pharmacodynamic assay is designed around a compartment that turns out to be by-similarity from another species, the assay can be technically perfect and measuring the wrong thing.
  • Conversely, refusing all non-experimental annotations would discard 73 entries' worth of mostly-correct information. The fix is recording the class, not filtering on it.
Still open
  1. Should the graph record the evidence class alongside every imported localization? A one-word field ('experimental', 'by-similarity', 'curator', 'predicted', 'uncoded') would make the distinction this audit found machine-visible for the first time.
  2. How many of the 32 uncoded annotations are simply old? UniProt began evidence-tagging systematically in the late 2000s; an annotation age check would separate 'untagged legacy' from 'genuinely unsourced'.
  3. Do the same proportions hold for the protein-* entries, which were outside this audit? They carry accessions too and are used the same way.
  4. For the 21 by-similarity entries, which source organism did each come from, and is the source a measurement? DOT1L's traced back to a mouse kidney paper; a chain of transfers could be longer than one step.
Every source behind this entry (2)
  1. E1strong confidence 4 of 5: Replicated in peer-reviewed work by more than one group.database

    Of the 299 gene entries in this graph carrying a data.uniprot accession, 226 (75.6%) have at least one subcellular location annotated with an experimental evidence code (ECO:0000269); 36 (12.0%) have locations with only non-experimental codes - 21 ECO:0000250 by similarity, 12 ECO:0000305 curator inference, 3 ECO:0000255 sequence-model prediction; 32 (10.7%) carry location values with no evidence code at all; and 5 have no subcellular-location comment. 49 entries carry an uncoded free-text note and 48 have at least one uncoded location value.

    What this evidence cannot show

    A snapshot of a database that changes: UniProt curates continuously and these proportions will drift. The classification is per ENTRY, not per location value - an entry with one experimental and three uncoded locations counts as 'has experimental', so the table UNDERSTATES how much uncoded material is present, which is why the separate uncoded-location and uncoded-note counts are given. Accessions were taken from the graph's own data blocks and were not independently re-verified against gene symbol in this audit beyond checking that all 299 resolved; the individual accessions discussed in this beat's entries were each checked on gene_primary and length. Genes whose entries carry no accession are outside this audit entirely.

    Evidence that argues against this (1)
    • A non-experimental code is not a wrong annotation. By-similarity transfer between close orthologues is usually right, curator inference is usually right, and a homeodomain really does predict a nuclear protein. The claim here is narrower and it is about provenance: three quarters of these statements are measurements and a quarter are not, and nothing in the text a bulk import reads distinguishes them. The risk is a graph that presents all four as facts of the same kind.
  2. E2strong confidence 4 of 5: Replicated in peer-reviewed work by more than one group.database

    82 of the 299 accession-carrying gene entries (27.4%) name a subnuclear or mitotic structure in their UniProt subcellular-location values, while only 2 of the graph's 25 highest-degree gene entries (gene-ell and gene-kat7) do.

    What this evidence cannot show

    The 82 figure depends on a TERM LIST and is therefore bounded by it, in the same way rule 70 bounds a noncoding-element absence. Terms matched: speckle, Cajal, nucleol*, PML body, lamina, chromocent*, heterochromat*, nuclear body, nucleoplasm, nucleus matrix, telomere, centromere, kinetochore, spindle, midbody, centrosome. Terms NOT matched and therefore not counted: paraspeckle, perinucleolar compartment, Polycomb body, transcription factory, nuclear pore, condensate, and any structure named only inside a free-text note rather than as a location value. 'Nucleoplasm' is arguably not a structure and inflates the count slightly. Degree is computed over all edge files at the time of the run and changes as other beats write.

    Evidence that argues against this (1)
    • The low top-25 overlap could be an artefact of degree rather than of annotation: high-degree genes in this graph are chosen for their role in the fusion complex, and complex-resident chromatin proteins are exactly the class least likely to have a named nuclear body. The honest reading is not that UniProt neglects our genes but that OUR genes are of a type for which subnuclear terms are rarely appropriate - which is itself the argument for reading imaging papers rather than fetching database fields.
Connected to