Skip to content

Gene Ontology Causal Activity Models (GO-CAM) Reference Ingest Guide

Source Information

InfoRes ID: infores:gocam

Description: GO-CAM (Gene Ontology Causal Activity Models) is developed by the Gene Ontology Consortium as an extension of the GO knowledgebase. It provides computable mechanistic models representing how molecular activities are causally connected to form biological pathways and processes, supporting knowledge representation, computational reasoning, and pathway analysis. GO-CAM models describe molecular activities, biological processes, cellular components, gene products, causal relationships, and supporting evidence using semantic web technologies and biomedical ontologies. Knowledge is generated primarily through expert manual curation in which curators synthesize evidence from the literature into structured causal models, building on existing GO annotations; computational validation and ontology reasoning ensure logical consistency.

Citations: - Thomas PD, Hill DP, Mi H, Osumi-Sutherland D, Van Auken K, Carbon S, Balhoff JP, Albou LP, Good B, Gaudet P, Lewis SE, Mungall CJ. Gene Ontology Causal Activity Modeling (GO-CAM) moves beyond GO annotations to structured descriptions of biological functions and systems. Nat Genet. 2019 Oct;51(10):1429-1433. doi: 10.1038/s41588-019-0500-1

Data Access Locations: - GO-CAMs are downloaded model by model, via kghub-downloader that takes an index file that shows all possible gocams by identifier, and then iterates one by one through the identifiers, downloading each gocam. - Index: https://s3.amazonaws.com/provider-to-model.json - URL pattern: https://live-go-cam.geneontology.io/product/yaml/go-cam/[id].json

Data Provision Mechanisms: file_download

Data Formats: json

Data Versioning and Releases: New GO-CAMs are added to the index weekly. Releases page / change log: https://geneontology.org/docs/download-go-cams/. Latest status page: https://geneontology.org/docs/go-cam-overview/

Ingest Information

Ingest Categories: primary_knowledge_provider

Utility: GO-CAMs provide structured causal relationships between gene products that are essential for pathway analysis, mechanistic understanding, and systems biology approaches in Translator. Unlike traditional GO annotations, GO-CAMs explicitly model how gene products causally regulate each other, making them valuable for reasoning about biological mechanisms and predicting downstream effects of perturbations.

Scope: This initial ingest focuses on gene-to-gene causal regulatory relationships extracted from GO-CAM models. The scope includes direct regulatory relationships (positive and negative regulation) between gene products, with associated molecular function, biological process, and cellular component annotations for context.

Relevant Files

File Name Location Description
provider-to-model.json https://s3.amazonaws.com/provider-to-model.json index file of models
5a7e68a100001817.json, etc. https://live-go-cam.geneontology.io/product/yaml/go-cam/[id].json each model individually

Included Content

File Name Included Records Fields Used
5a7e68a100001817.json, etc. Gene to Gene edges source, target, causal_predicate, causal_predicate_assessed_by, causal_predicate_has_reference, causal_predicate_contributors, source_gene_molecular_function, source_gene_biological_process, source_gene_occurs_in, target_gene_molecular_function, target_gene_biological_process, target_gene_occurs_in, model_info.id, model_info.taxon

Filtered Content

File Name Filtered Records Rationale
GO-CAM models GO Term nodes and non-gene entities Initial focus on gene-gene relationships; GO Terms and other entity types will be included in future iterations
GO-CAM models Edges without clear causal predicates Only including edges with explicit causal relationship predicates to ensure high-quality causal assertions
GO-CAM models No records are filtered on model_info.status Deliberate non-filter, recorded here because the opposite looks correct.
model_info.status takes the values production, development, internal_test and
review, and 'development' reads like draft content. It is not: every
Reactome-derived GO-CAM model is flagged 'development', accounting for roughly
71% of that bucket, so filtering to production would silently delete the entire
infores:reactome knowledge source along with the only edges for which
infores:go-cam acts as an aggregator. The status distribution is logged at the
end of each transform run so drift is visible release over release. Do not add a
status filter without re-checking the status-by-provenance cross-tab first;
tests/unit/ingests/go_cam/test_go_cam.py guards this.
GO-CAM models Reactome pathway ids are not emitted as publications causal_predicate_has_reference carries PMIDs, GO_REF, MGI reference ids, ISBNs,
PAINT_REF ids and Reactome pathway ids. All except Reactome are emitted as
publications, after normalization that repairs the spellings present in the
source - whitespace and case, a missing PMID prefix, a doubled colon in
"PMID::29523808", the "GOREF"/"GO:REF" misspellings, and MGI's doubled prefix
("MGI:MGI:4417868" becomes "MGI:4417868"). Reactome ids identify pathway records
rather than literature, so they are carried as source_record_urls on the
infores:reactome retrieval source instead. No reference value is discarded; any
that could not be used would be counted and logged in aggregate.

Note that GO_REF, PAINT_REF and ISBN are not in the Biolink prefix map, so those publication CURIEs will not expand to URLs downstream. They are emitted anyway because dropping a real reference is worse than emitting one whose prefix is not yet registered. | | GO-CAM models | Contributor values that are not ORCIDs | causal_predicate_contributors is mostly ORCID URLs but also carries opaque curator-group identifiers such as GOC:reactome_curators, which attributes every Reactome-derived edge to a group rather than a person. Those are not publications and are dropped. | | GO-CAM models | Non-human/mouse models | Species filtering applied to include only human (NCBITaxon:9606) and mouse (NCBITaxon:10090) models based on model_info.taxon field |

Future Content Considerations

edge_property_content: model_id was removed from edge_properties: it was declared but never emitted, and no Biolink association slot holds it. The GO-CAM model a statement came from is best expressed as source_record_urls on the infores:go-cam RetrievalSource (https://model.geneontology.org/), which needs the same per-edge sources refactor as the Reactome reference item below.

edge_property_content: Reactome pathway references are still dropped. 2,756 Reactome-derived edges cite a Reactome pathway record as their only reference, and those edges consequently carry no publications at all. They are not literature, so they do not belong in the publications slot; the natural Biolink home is source_record_urls on the infores:reactome RetrievalSource, which requires building the sources list per-edge rather than once per model.

edge_property_content: Only causal_predicate_assessed_by is emitted as has_evidence_of_type. The edge also carries source_gene_product_assessed_by, target_gene_product_assessed_by, and _biological_process / _occurs_in variants, which evidence the qualifier annotations rather than the causal claim. Merging them into one evidence list would overstate the evidence behind the edge.

edge_property_content: The causal_predicate_assessed_by, causal_predicate_has_reference and causal_predicate_contributors arrays look co-indexed but are not - 83 edges in the release measured have mismatched lengths - so evidence, reference and curator cannot be reassembled into individual evidence lines. Each is read as an independent set.

edge_content: Currently, we are excluding GOTerms from the edges. This is just a first pass at the GO-CAMs to get the Gene to Gene edges in place. Future iterations will include the GOTerms, and potentially other edge types.

node_property_content: Includes only the gene identifier and category of 'Gene'. (Note, there are likely nodes that represent Genes or Gene Products, but we are not distinguishing between these at this time because we will NodeNormalize the category and id.)

edge_property_content: TODO: plenty of work to do here to make edges like this, Biolink compliant past the source, target, and causal_predicate which are mapped in this ingest to 'biolink:subject', 'biolink:object', and the appropriate 'biolink:predicate' respectively. The edge properties are not currently being mapped to Biolink Model edge properties, but this will be done in future iterations.

edge_content: Resolved. RO:0012010 ('removes input for') maps to biolink:precedes with a decreased direction; RO:0002313 ('transports or maintains localization of') resolves weakly to biolink:has_participant; RO:0002408 is obsolete in RO and RO:0002614 ('is evidence with support from') is not a causal relation, so both drop their edges. Also dropped: RO:0002418, RO:0004046, RO:0004047 and RO:0002332, which have no sound Biolink target. 17 edges total are dropped in the release measured, each counted and logged with its reason.

edge_content: RO:0002413 'provides input for' is 30% of ingested edges and now maps to biolink:precedes rather than biolink:is_input_of, because biolink:is_input_of maps exactly to a different RO relation (RO:0002352 'input of'). Confirm the intended reading with the GO-CAM team; a dedicated Biolink predicate for 'the product of A's activity is a substrate for B's activity' would fit better than either.

other: Consider including additional species beyond human and mouse in future iterations.

other: currently node normalization filters out all nodes with reactome identifiers as well as certain kinds of Uniprot ids like UniProtKB:P0DTD1-PRO_0000449630 UniProtKB:P0DTD1-PRO_0000449631 UniProtKB:P0DTD1-PRO_0000449633.

Target Information

Edge Types

Subject Categories Predicate Object Categories Knowledge Level Agent Type UI Explanation
biolink:Gene biolink:Gene knowledge_assertion manual_agent, automated_agent One gene product's molecular activity regulates another gene product's activity. The edge reads as a single qualified statement - for example "SPATA18 causes increased activity of PTPMT1" - with the GO qualifiers naming which activity, in which biological process, and in which cellular component.
biolink:Gene biolink:Gene knowledge_assertion manual_agent, automated_agent One gene product's molecular activity is causally upstream of another's, without a direct regulatory relation being asserted between them.
biolink:Gene biolink:Gene knowledge_assertion manual_agent, automated_agent A gene product is part of a larger complex or entity described by the model.
biolink:Gene biolink:Gene knowledge_assertion manual_agent, automated_agent A gene product has another entity described by the model as a part.
biolink:Gene biolink:Gene knowledge_assertion manual_agent, automated_agent A gene product's molecular activity takes another entity as input.
biolink:Gene biolink:Gene knowledge_assertion manual_agent, automated_agent A molecular activity is enabled by a gene product.
biolink:Gene biolink:Gene knowledge_assertion manual_agent, automated_agent A gene product is capable of a molecular activity.
biolink:Gene biolink:Gene knowledge_assertion manual_agent, automated_agent A gene product's molecular activity occurs in a location or context described by the model.
biolink:Gene biolink:Gene knowledge_assertion manual_agent, automated_agent A gene product's molecular activity has another entity as a participant.

Node Types

Node Category Source Identifier Types Additional Notes
biolink:Gene UniProtKB, MGI Gene identifiers from human and mouse models only (NCBITaxon:9606, NCBITaxon:10090)

Future Modeling Considerations

qualifiers: Ambiguous GO-term qualifiers are omitted, not guessed. The networkx export collapses several activity-level edges between the same pair of gene products into a single row, so source_gene_molecular_function and its five siblings can carry the set of terms seen across all of them. The lists are not co-indexed - in the release measured, 27 rows have lengths that cannot align, for example causal_predicate with 2 values alongside source_gene_molecular_function with 4 - so there is no way to tell which term belongs with which assertion. The destination qualifier slots are single-valued, so where a field carries more than one distinct term the qualifier is left unset rather than narrowed to an arbitrary member. This affects roughly 500 edges and omits roughly 650 GO terms; the counts are logged per field at the end of each transform run. Revisit if the export gains a co-indexed or per-assertion representation, or if Biolink gains multivalued forms of these qualifier slots - either would let the terms be carried rather than dropped.

spoq_pattern: Rows carrying several distinct causal_predicate values are split into one edge per predicate rather than resolved to the first. Each distinct RO relation between the same pair of gene products is a separate causal claim, and in the release measured 207 rows carry more than one - in some cases mixing positive and negative regulation, so keeping only the first silently discarded a contradictory claim. Splitting adds roughly 210 edges. The split edges share the row's qualifiers, evidence, publications and sources, because the source provides no way to attribute those to one predicate rather than another; each carries its own RO term on original_predicate.

predicates: Known and accepted: roughly half of emitted edges have a subject or object category that does not satisfy the Biolink predicate's domain/range constraint. biolink:precedes accounts for nearly all of them - its domain and range are both "occurrent", while GO-CAM gene-to-gene edges have a Gene (a "physical essence") in both slots. The remainder are biolink:has_input, biolink:has_participant, biolink:enabled_by and biolink:capable_of, whose domains are "biological process or activity". This is the same class of violation flagged for the acts_upstream_of family in NCATSTranslator/translator-ingests#339; those predicates are no longer emitted, but the underlying gap is not closed by replacing them. The cause is structural: GO-CAM asserts these relations between molecular activities, the networkx export projects them onto the gene products that enable those activities, and Biolink's process-level predicates carry process-level domain and range. biolink:regulates is the one predicate that both satisfies D/R for Gene-to-Gene and is sanctioned by an RO mapping, and it works precisely because RO defines an "enables o P o 'enabled by'" property chain giving a genuine gene-product-level counterpart. The causally-upstream family has no such chain, so no predicate is both mapping-sanctioned and D/R-valid for it. Resolving this needs Biolink Model changes, tracked at https://github.com/biolink/biolink-model/issues/1719. Deliberately not worked around by choosing a D/R-valid predicate with no mapping support, which would trade a visible violation for an unsupported assertion.

predicates: RO:0002413 "provides input for" is roughly 30% of ingested edges and currently maps to biolink:precedes, which is sound but weak. Neither biolink:is_input_of (which asserts something false) nor biolink:precedes (which drops the metabolic substrate meaning) captures "the product of A's activity is a substrate for B's activity". Raise with the GO-CAM team; a dedicated predicate may be warranted.

edge_properties: Only causal_predicate_assessed_by is emitted as has_evidence_of_type. The edge also carries source_gene_product_assessed_by, target_gene_product_assessed_by and the _biological_process / _occurs_in variants, which evidence the qualifier annotations rather than the causal claim. Merging them would overstate the evidence behind the edge.

edge_properties: The causal_predicate_assessed_by, causal_predicate_has_reference and causal_predicate_contributors arrays look co-indexed but are not - 83 edges in the release measured have mismatched lengths - so evidence, reference and curator cannot be reassembled into individual evidence lines. Each is read as an independent set.

predicates: Predicates that currently drop their edges, with reasons: RO:0002408 is obsolete in RO; RO:0002614 "is evidence with support from" is not a causal relation; RO:0002418, RO:0004046, RO:0004047 and RO:0002332 have no exact or narrow Biolink mapping. 17 edges total in the release measured, each counted and logged.

other: Consider including additional species beyond human, mouse and rat.

other: Node normalization currently filters out reactome identifiers and certain UniProtKB isoform ids such as UniProtKB:P0DTD1-PRO_0000449630.

Additional Notes: ['All RO-to-Biolink predicate mappings in this ingest were derived from the Relation Ontology and biolink-model rather than from a human reading RO labels. The rules that produced them are recorded in the notes below, and the resulting table is a static map in ro_predicate_mapping.py. Revisit it after an RO or biolink-model release by re-applying those rules to the RO terms the source uses; unit tests assert that every predicate in the table is a real Biolink predicate and that the table matches what the transform emits.', 'Why a projection step is needed. GO-CAM models causal relations between molecular activities, not between genes: a model is a graph of activity instances, each "enabled by" a gene product, with causal edges running activity-to-activity. RO is explicit about this - RO:0002629\'s alternate label is "directly positively regulates (process to process)". The networkx export flattens each causal edge into a row whose source and target are the gene products, demoting the activities to source_gene_molecular_function and target_gene_molecular_function, but it leaves causal_predicate as the activity-level RO term. Subject and object are swapped from activities to genes while the predicate is not, so the raw row cannot be mapped at face value.', 'Resolution rule 1 - gene-product projection. RO encodes the same projection the export performs, as property chains of the form "enables o P o \'enabled by\' -> Q". If P or a superproperty of P is the middle term of such a chain, the chain head Q is mapped to Biolink instead of P. Four such chains exist and are used here: RO:0002211 -> RO:0002448, RO:0002629 -> RO:0002450, RO:0002630 -> RO:0002449, and RO:0002411 -> RO:0002566. This is what turns RO:0002629 (process to process) into RO:0002450 "directly positively regulates activity of", whose rdfs:domain and rdfs:range are both BFO:0000040 material entity, and whose superproperty RO:0002448 has the Biolink exact mapping biolink:regulates.', 'Resolution rule 2 - direct resolution. If no projection chain applies, P itself is resolved by walking up rdfs:subPropertyOf to the nearest superproperty biolink-model maps. Note the RO:0002411 -> RO:0002566 "causally influences" chain is not usable because RO:0002566 has no exact or narrow Biolink mapping, so the causally-upstream family falls through to direct resolution.', 'Resolution rule 3 - only exact and narrow mappings are accepted as targets. A narrow mapping means the RO term is more specific than the Biolink predicate, so generalizing up to it is sound. A broad mapping means the RO term is more general, and asserting the narrower Biolink predicate would claim more than the source says. This is why RO:0002578 "directly regulates" is not emitted as biolink:directly_physically_interacts_with even though biolink-model records the pair: it is recorded as a broad mapping, and using it would assert physical interaction where the source asserts regulation.', 'Resolution rule 4 - biolink:related_to is never a mapping target. It carries no reasoning signal, and an edge asserting it is worse than an absent edge because absence is measurable. Predicates with no sound target, and predicates obsolete in RO, cause the edge to be dropped and counted with its reason rather than degraded.', 'Direction derivation. RO annotates directional relations with RO:0004049 "is positive form of" and RO:0004050 "is negative form of"; direction is inherited by subsumption, so if any superproperty of P is a positive form then P has a positive effect. This is how RO:0012010 "removes input for" is known to be negative (via RO:0002305) despite a label that says nothing about direction - deriving direction from labels would get it wrong. No predicate in the table has conflicting positive and negative ancestors.', 'Qualified statements are emitted whole or not at all. biolink:qualified_predicate, biolink:object_aspect_qualifier and biolink:object_direction_qualifier together read as one sentence, " causes of ". A direction on its own leaves "increased what?" unanswered, so a direction is only emitted where the projection supplies an aspect for it to attach to. See the biolink:precedes edge type\'s notes for the family this excludes and why.', "Every emitted predicate is validated as a real Biolink predicate through bmt before release; raw RO and BFO CURIEs never appear in the predicate slot. Note that bmt's default schema version is not necessarily the biolink-model version this project pins, so validation uses get_biolink_model_toolkit(), which builds from the installed schema."]

Provenance Information

Contributors: - Sierra Moxon: code - Matthew Brush: data modeling, domain expertise

Artifacts: - Ingest Survey: https://docs.google.com/spreadsheets/d/1R9z-vywupNrD_3ywuOt_sntcTrNlGmhiUWDXUdkPVpM/edit?gid=0#gid=0