{"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"4.0.5"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":41875,"databundleVersionId":5521661,"sourceType":"competition"},{"sourceId":9331346,"sourceType":"datasetVersion","datasetId":3258945}],"dockerImageVersionId":30433,"isInternetEnabled":true,"language":"r","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# An Exploratory Analysis of Gene Ontology (GO)","metadata":{}},{"cell_type":"markdown","source":"<strong>What's this about:</strong>\n<div style=\"line-height:24px; font-size:16px\">\n    <ul style=\"list-style:circle\">\n        <li>Briefly describe the basics of Gene Ontology\n        <li>Visualize top-level human  GO terms for each of the three ontologies (BP, MF, CC)\n        <li>Examine GO changes over time\n        <li>Visualize a simplified representation of a GO DAG (Reduced GO DAG)\n        <li>Provide a way to locate a biologically related set of terms in the GO DAG (e.g. Splicing, Post-transcription/transcriptional regulation)\n        <li>Examine the most and least frequent GO terms in the CAFA5 training set\n        <li>Provide a way to track GO terms in the GO DAG\n    </ul>\n    <div style=\"margin-top:20px;\">\n     I use and cite Bioconductor annotation data package GO.db (<a href= \"http://bioconductor.org/packages/release/data/annotation/html/GO.db.html\">Reference Manual</a>) and GOxploreR package (<a href= \"http://www.nature.com/articles/s41598-020-73326-3\">article</a>)\n    </div> \n</div>","metadata":{}},{"cell_type":"markdown","source":"**Load packages**","metadata":{}},{"cell_type":"code","source":"if (!require(\"BiocManager\", quietly = TRUE))\n  install.packages(\"BiocManager\")\nBiocManager::install(version = \"3.12\")\n\nsuppressPackageStartupMessages({\n    \n    library(stringr)\n    library(ggplot2)\n    library(data.table)\n    library(tictoc)\n    \n    BiocManager::install(\"GOxploreR\")\n    library(\"GOxploreR\")    \n    library(\"annotate\")    \n    install.packages(\"ontologyIndex\")\n    library(ontologyIndex)\n    library(visNetwork) #interactive plots\n})\n\n#function for figure size adjusment\nfig <- function(width, heigth) {\n    options(repr.plot.width = width, repr.plot.height = heigth)\n}","metadata":{"_kg_hide-output":true,"_kg_hide-input":true,"execution":{"iopub.status.busy":"2025-12-19T18:17:11.19032Z","iopub.execute_input":"2025-12-19T18:17:11.197444Z","iopub.status.idle":"2025-12-19T18:24:33.594752Z","shell.execute_reply":"2025-12-19T18:24:33.592876Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Basics of Gene Ontology","metadata":{}},{"cell_type":"markdown","source":"GO (Gene Ontology) is a structured terminology that categorizes gene functions into three distinct domains:\n- molecular function (MF), \n- cellular component (CC), \n- and biological process (BP)  \n\nIt encompasses over 45,000 terms and 130,000 parent-child relationships.","metadata":{}},{"cell_type":"markdown","source":"**Number of terms in each domain:**","metadata":{}},{"cell_type":"code","source":"zz = Ontology(GOTERM)\ntable(unlist(zz))","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:31:45.73017Z","iopub.execute_input":"2025-12-19T18:31:45.732178Z","iopub.status.idle":"2025-12-19T18:31:45.874406Z","shell.execute_reply":"2025-12-19T18:31:45.872607Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"- GO:0003673 is the GO root \n- GO:0003674 is the MF root \n- GO:0005575 is the CC root \n- GO:0008150 is the BP root \n- GO:0000004 is biological process unknown \n- GO:0005554 is molecular function unknown \n- GO:0008372 is cellular component unknown ","metadata":{}},{"cell_type":"markdown","source":"\n\nGO has a **hierarchical structure organized as a directed acyclic graph (DAG)**, which means that the GO terms are interdependent. The relationship between terms follows a parent-child model, where **parent terms are broader and less specific than their child terms**. The mapping between terms can be one-to-many in both directions, allowing a child to have multiple parents and a parent to have multiple children. There is a single root node for all ontologies, along with separate root nodes for each of the three ontologies mentioned earlier (Molecular Function, Cellular Component, and Biological Process).\n\nThe types of child-parent relationships in GO are defined as follows: ([link](http://geneontology.org/docs/ontology-relations/)): \n- is-a: the child term is a more specific version of the parent\n- has part: part-whole relationship from the perspective of the parent,\n- part-of: part-whole relationship from the perspective of the child, i.e. the child is a part of the parent, \n- regulates: one process directly affects the manifestation of another process or quality, i.e. the former regulates the latter\n- negatively regulates\n- positively regulates\n\n![image.png](attachment:4c841d38-a03b-4cb5-8fe7-75858ecf4791.png)\n\nA child node in GO doesn’t necessarily have to be on the next hierarchical level and can connect to nodes further down the DAG. Depending on the organism and domain (Biological Process, Molecular Function, or Cellular Component), a GO DAG may consist of thousands of nodes.\n\nHowever, there are tools that make GO visualization easier, such as GOxploreR, which exploits graph-theoretic properties of DAGs to facilitate exploration and interpretation of GO data.","metadata":{},"attachments":{"4c841d38-a03b-4cb5-8fe7-75858ecf4791.png":{"image/png":"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e9GxdlEdig+dHBtlk/Fy/Lcl4+oV84jbERfg7Y7HYxGXiYiI7hWxGqd0Ew2HEXYOIxLUIaqfcVWDxp6YM0GlF9OLr5ovoilA2DWGiM+dmJGI7mfOfj2Gm0zIi6pRro9e0YpF042rczI1uGo+2dTDOvRdNCPkm76rGBn3YvFPxMHxsTF22R4RN68g4urV84k4KuKwjMcyLhMREd0raXOdQrosGvIiMtwM1WgTVK6rzyah6ngf6HgvcUswFwFVv4KoadxFlrUmRDJnQ5U1C+oMkQQR0X2tox24eAGx4wl9437l6x1W4V+3AD3DiQnCEytFW3X1KiQ/W4WKMmButQgf5sTEaSYy1o3oSDPUIo6OP+GWytsDnP9nwCNPIpNQ9jSiZU8lblwWtRYjKuKoOnsWVCKmEhER3QssCulqR/4YOPqdxA0hez7w+M/jQyJKS/XNwOe+FR8qvv2rwB+IRuMM1wFbXo4PFStFTF31R4kbREREqYW7jxIREREREaUxFoVERERERERpjEUhERERERFRGmNRSERERERElMZYFBIREREREaUxFoVERERERERpjEUhERERERFRGmNRSERERERElMZYFBIREREREaUxFoVERERERERpjEUhERERERFRGmNRSERERERElMZYFBIREREREaUxFoVERERERERpjEUhERERERFRGmNRSERERERElMZYFBIREREREaUxFoVERERERERpjEUhERERERFRGmNRSERERERElMZYFBIREREREaUxFoVERERERERpjEUhERERERFRGmNRSDSlogiH/PC5nRgZ7MfA4BCGnC74wxFEEnMQEaWraDSMoN+NMccwBvv70T/swJjXj5C8Lz4LERHdBSwKiaaMTGkicI10o7XuILa/+SreePsDvHvwDDrGPPAx4yGitBZBKODGUGc9Tuzdgnd+8Qv84qM9ONrciTERH8OJuYiIaOqxKCSaKpEg4O7EgT3b8b0fvYq6vjE43UFEnWNwByLw86fCaS/sG8Bo/T/iw49+jn94+zy6HD4mukQK/wgG22vxr//2Y3y0/yR6fSqEnC4EPD64QyKEcsMZEdFdw6KQ0ldUVGUhD/r7h3GheRBjvhBCdzIJCQcQGevA4QMH8ZO3D2DMlIf84hJUZFqgU6sRZcIz7UUCDnja38PRo7vxzoEODLvEMpG4jyjlRQLwu524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vd7rxOd7iMcUElGaYVFIKcN55v/h2K6f4GvvrsYLLz4tkvON0AWDUMtf3DRaebmtccmCKMZEAhIMhsQdIpHWigJQDCPhMMKRSOzag/IC8ZNJMGQ3iMSuayjmFi909WtNJIKweIx4qdjry0td3K3rD14Xi8JJm+qi8NpE2JXJc0Qsd9HEMieW1UktPjJki4UuIoZRsZSqY9fUlH0hipB4Lvk8KbEc0h0VHG3C8N5v4i8/NOCj/k34t7/4FBZUZEErlgWVRhRZ4m9+9Z89glBIxEMRp2LxUCxncpZQSMRMMa7RXH0B+muR8TEqllf5ONWErzVePD7L147KVxExUisedN/8EsiikIjSzGTXB0RTLqwRBaAugHKtCrkiedCI7EGr10Or04okd6IiTSYYGuj1Buh1OjF/POGRiU789uQKQkklE2lRVGq08leaiV5rIjKp0kIn3p8u9rj7Jduhe08sK2LZVYvlRyuWO5ksT3rxkVm1TOZFki+XWbnsxnZVVmtiv1BzOZyeoqoogjo/7LowKkRhZpTxUSwDOhkjNddafkQhptXBYDCIeeRGMxkzVSJm6cSyMvmCUJIbHzQ6ESOv+VrjxeOzfH2dWE518oylXDSJiFIWi0JKGfqSZzHr0b/DH/zxV/DJT8zn2TuJiBLUpmKYF/4PPPfLv4dvf+txVBTaePZOIiK6Y5hzU8rQWwqRW7IQi+fPQGmBjQsnEVGCWmOEObsaM2dXYVF1ISxG3aT3hCAiIroR5t2UMuQuTWaTCXaLESY9t4ETESnk8YBGoxEZZiNsJj13EyYiojuKRSEREREREVEaY1FIRERERESUxlgUEhERERERpTEWhURERERERGmMRSEREREREVEaY1FIRERERESUxlgUEhERERERpTEWhURERERERGmMRSEREREREVEaY1FIRERERESUxlgUEhERERERpTEWhURERERERGmMRSEREREREVEaY1FIRERERESUxlgUEhERERERpTEWhURERERERGmMRSEREREREVEaY1FIRERERESUxlgUEhERERERpTEWhURERERERGmMRSEREREREVEaY1FIRERERESUxlgUEhERERERpTEWhURERERERGmMRSEREREREVEaY1FIRERERESUxlgUEhERERERpTEWhURERERERGmMRSEREREREVEaY1FIRERERESUxlgU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"}}},{"cell_type":"markdown","source":"The majority of GO information is focused on ten model organisms: human, mouse, rat, zebrafish, drosophila, C. elegans, D. discoideum, S. cerevisiae, S. pombe, A. thalia and E. coli. \n\nGO also contains annotations that link specific gene products to GO terms, allowing organizm-specific information to be inferred. Genes are often associated with multiple terms simultaneously, and due to the hierarchical structure of GO, these annotations propagate upward to broader, higher-level terms. This propagation results in the formation of gene sets associated with higher-level nodes within the hierarchy.","metadata":{}},{"cell_type":"markdown","source":"# Top-level GO-terms visualisation","metadata":{}},{"cell_type":"markdown","source":"Function for the preparation of the data for the visNetwork graph:","metadata":{}},{"cell_type":"code","source":"# some GO terms might not exist in the loaded version of the Gene Ontology\n# to avoid errors use this:\nsafe_getGOTerm <- function(term) {\n  tryCatch({\n    getGOTerm(term)\n  }, error = function(e) {\n    cat(\"Error retrieving GO term:\", term, \"\\n\")\n    return(NA)\n  })\n}\n\nprep_to_graph <- function(goterm0, terms_subset) {\n    \n    # define domain-specific functions to use \n    ontology <- GOTERM[[goterm0]]@Ontology\n    domain_mapping <- list(\n        BP = list(children = GOBPCHILDREN, level = GOTermBPOnLevel),\n        MF = list(children = GOMFCHILDREN, level = GOTermMFOnLevel),\n        CC = list(children = GOCCCHILDREN, level = GOTermCCOnLevel)\n    )\n    get_children <- domain_mapping[[ontology]]$children\n    get_level <- domain_mapping[[ontology]]$level\n\n    # make edges from the first term to its children\n    # with relation stored in the title column (tooltips)\n    edges <- data.table(\n        from = goterm0 ,\n        to = get_children[[goterm0]],\n        title = names(get_children[[goterm0]])\n    )\n\n    # filter only GO terms for the selected organism\n    edges <- edges[to %chin% terms_subset]\n\n    # add color codes\n    edges[, color := fifelse(title == \"isa\", \"#1C588C\",\n                  fifelse(title == \"positively regulates\", \"#2D735F\",\n                  fifelse(title == \"negatively regulates\", \"#BF5841\",\n                  fifelse(title == \"regulates\", \"#BF9039\",\n                  fifelse(title == \"part of\", \"black\",\n                  fifelse(title == \"has part\", \"gray\", NA_character_))))))\n    ]\n\n    # make legend for colors\n    leg_edges <- unique(edges[, .(title, color)])\n    leg_edges[, label := title]\n\n    # create nodes and add labels, levels, shapes, and colors\n    node_ids <- unique(c(edges$from, edges$to))\n    nodes <- data.table(id = node_ids)\n    \n    nodes[, label := str_wrap(\n        paste0(id, \"\\n\", unlist(safe_getGOTerm(id))), width = 10\n    )]\n    nodes[, level := get_level(id)$Level]\n    nodes[, shape := \"box\"]\n    nodes[, `:=`(\n        color.background = \"white\",\n        color.border = \"black\",\n        font.color = \"black\",\n        title = label # tooltips\n    )]\n\n    # return result as a named list\n    return(list(nodes = nodes, edges = edges, leg_edges = leg_edges))\n}","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2025-12-19T18:31:55.719584Z","iopub.execute_input":"2025-12-19T18:31:55.721249Z","iopub.status.idle":"2025-12-19T18:31:55.739099Z","shell.execute_reply":"2025-12-19T18:31:55.737328Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Function that retrieves the DAG for the specified organism and ontology and then displays its 2 top levels as an interactive graph:","metadata":{}},{"cell_type":"code","source":"create_visNetwork_plot <- function(nodes, edges, title, legend_edges, width_prop = \"100%\") {\n  visNetwork(nodes, edges, width = width_prop, main = title) %>%\n    visOptions(\n      highlightNearest = list(enabled = TRUE, algorithm = \"hierarchical\"),\n      selectedBy = \"label\"\n    ) %>%\n    visHierarchicalLayout(direction = \"UD\") %>%\n    visLegend(addEdges = legend_edges) %>%\n    visInteraction(tooltipDelay = 200, navigationButtons = TRUE)\n}\n\nplot_GO_DAG_top <- function(organism, domain) {\n    \n    # Get all terms of the specific ontology for the organism\n    terms_subset <- data.table(GetDAG(organism = organism, domain = domain))[\n        , melt(.SD, measure.vars = 1:2, value.name = \"GO_id\")\n    ][, unique(GO_id)]\n    \n    # Print the number of GO terms for the organism and domain\n    cat(paste(\"Number of GO terms in\", organism, domain, \"ontology:\", length(terms_subset), \"\\n\"))\n    \n    # Get the first term for which to draw the DAG (graph with all children)\n    if (domain == \"BP\") {\n        goterm0 <- Level2GOTermBP(level = 0, organism = organism)\n    } else if (domain == \"MF\") {\n        goterm0 <- Level2GOTermMF(level = 0, organism = organism)\n    } else if (domain == \"CC\") {\n        goterm0 <- Level2GOTermCC(level = 0, organism = organism)\n    } else {\n        stop(\"Invalid domain! Use 'BP', 'MF', or 'CC'.\")\n    }\n  \n    # Prepare the DAG graph\n    dom_graph <- prep_to_graph(goterm0, terms_subset)\n\n    # Plot the DAG\n    title = paste(\"The top GO Terms in the\", domain, \"Domain for\", organism)\n    create_visNetwork_plot(dom_graph$nodes, dom_graph$edges, title, dom_graph$leg_edges)\n}","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:31:59.78881Z","iopub.execute_input":"2025-12-19T18:31:59.790415Z","iopub.status.idle":"2025-12-19T18:31:59.808446Z","shell.execute_reply":"2025-12-19T18:31:59.806598Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# - Biological process (BP)","metadata":{}},{"cell_type":"markdown","source":"Some stats on BP DAG:","metadata":{}},{"cell_type":"code","source":"# get all terms of the specific ontology\ndomen_DAG <- data.table(GetDAG(organism = \"BP\", domain = \"BP\"))[, \n  melt(.SD, measure.vars = 1:2, value.name = \"GO_id\")\n][, .(GO_id)][, unique(.SD)]\n\ntic()\n# Pre-fetch all parents and children\nall_parents <- GOBPPARENTS[domen_DAG$GO_id]\nall_parents <- lapply(all_parents, function(parents) parents[parents != \"all\"])\n\nall_children <- GOBPCHILDREN[domen_DAG$GO_id]\n\n# Use vapply for faster and more efficient computation\ndomen_DAG[, n_PARENTs := vapply(all_parents, length, integer(1))]\ndomen_DAG[, n_CHILDREN := vapply(all_children, function(x) sum(!is.na(x)), integer(1))]\ntoc()\n                                 \ndomen_DAG[, n_edges := n_PARENTs + n_CHILDREN]\n\ncat(\"\\nDistribution of the number of parents per GO term of BP DAG:\")\nsummary(domen_DAG$n_PARENTs)\n\ncat(\"\\nDistribution of the number of children per GO term of BP DAG:\")\nsummary(domen_DAG$n_CHILDREN)\n\ncat(\"\\nDistribution of the total number of edges per GO term of BP DAG:\")\nsummary(domen_DAG$n_edges)","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:32:03.451748Z","iopub.execute_input":"2025-12-19T18:32:03.453676Z","iopub.status.idle":"2025-12-19T18:32:04.679849Z","shell.execute_reply":"2025-12-19T18:32:04.678041Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Plot the histogram for the number of edges:","metadata":{}},{"cell_type":"code","source":"fig(25, 7)\nggplot(domen_DAG, aes(x = n_edges)) +\n  geom_histogram(binwidth = 0.1, color = \"black\", fill = \"steelblue\") +\n  scale_x_log10(breaks = c(0, median(domen_DAG$n_edges), 10, 100, max(domen_DAG$n_edges))) +\n  geom_vline(xintercept = median(domen_DAG$n_edges), linetype = \"dashed\", color = \"red\") +\n  labs(x = \"Number of edges per term (log10 scale)\", y = \"Count\",\n       title = \"Distribution of the total number of edges per GO term of BP DAG\") +\n  theme_bw(base_size = 20) +\n  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:32:10.151119Z","iopub.execute_input":"2025-12-19T18:32:10.152869Z","iopub.status.idle":"2025-12-19T18:32:11.009723Z","shell.execute_reply":"2025-12-19T18:32:11.00649Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Plot top 2 levels for the human:","metadata":{}},{"cell_type":"code","source":"plot_GO_DAG_top(organism = \"Human\", domain = \"BP\")","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:32:15.060954Z","iopub.execute_input":"2025-12-19T18:32:15.062647Z","iopub.status.idle":"2025-12-19T18:32:16.130452Z","shell.execute_reply":"2025-12-19T18:32:16.128506Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# - Molecular function (MF)","metadata":{}},{"cell_type":"markdown","source":"Some stats on MF DAG:","metadata":{}},{"cell_type":"code","source":"# get all terms of the specific ontology\ndomen_DAG <- data.table(GetDAG(organism = \"MF\", domain = \"MF\"))[, \n  melt(.SD, measure.vars = 1:2, value.name = \"GO_id\")\n][, .(GO_id)][, unique(.SD)]\n\ntic()\n# Pre-fetch all parents and children\nall_parents <- GOMFPARENTS[domen_DAG$GO_id]\nall_parents <- lapply(all_parents, function(parents) parents[parents != \"all\"])\n\nall_children <- GOMFCHILDREN[domen_DAG$GO_id]\n\n# Use vapply for faster and more efficient computation\ndomen_DAG[, n_PARENTs := vapply(all_parents, length, integer(1))]\ndomen_DAG[, n_CHILDREN := vapply(all_children, function(x) sum(!is.na(x)), integer(1))]\ntoc()\n                                 \ndomen_DAG[, n_edges := n_PARENTs + n_CHILDREN]\n\ncat(\"\\nDistribution of the number of parents per GO term of BP DAG:\")\nsummary(domen_DAG$n_PARENTs)\n\ncat(\"\\nDistribution of the number of children per GO term of BP DAG:\")\nsummary(domen_DAG$n_CHILDREN)\n\ncat(\"\\nDistribution of the total number of edges per GO term of BP DAG:\")\nsummary(domen_DAG$n_edges)","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:32:22.627622Z","iopub.execute_input":"2025-12-19T18:32:22.629204Z","iopub.status.idle":"2025-12-19T18:32:23.039144Z","shell.execute_reply":"2025-12-19T18:32:23.037174Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Plot the histogram for the number of edges:","metadata":{}},{"cell_type":"code","source":"fig(25, 7)\nggplot(domen_DAG, aes(x = n_edges)) +\n  geom_histogram(binwidth = 0.1, color = \"black\", fill = \"steelblue\") +\n  scale_x_log10(breaks = c(0, median(domen_DAG$n_edges), 10, 100, max(domen_DAG$n_edges))) +\n  geom_vline(xintercept = median(domen_DAG$n_edges), linetype = \"dashed\", color = \"red\") +\n  labs(x = \"Number of edges per term (log10 scale)\", y = \"Count\",\n       title = \"Distribution of the total number of edges per GO term of MF DAG\") +\n  theme_bw(base_size = 20) +\n  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())\n","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2025-12-19T18:32:25.600435Z","iopub.execute_input":"2025-12-19T18:32:25.602014Z","iopub.status.idle":"2025-12-19T18:32:26.150264Z","shell.execute_reply":"2025-12-19T18:32:26.147279Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Plot top 2 levels for the human:","metadata":{}},{"cell_type":"code","source":"plot_GO_DAG_top(organism = \"Human\", domain = \"MF\")","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:32:28.431738Z","iopub.execute_input":"2025-12-19T18:32:28.433451Z","iopub.status.idle":"2025-12-19T18:32:28.789676Z","shell.execute_reply":"2025-12-19T18:32:28.787814Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# - Cellular component (CC)","metadata":{}},{"cell_type":"markdown","source":"Some stats on CC DAG:","metadata":{}},{"cell_type":"code","source":"# get all terms of the specific ontology\ndomen_DAG <- data.table(GetDAG(organism = \"CC\", domain = \"CC\"))[, \n  melt(.SD, measure.vars = 1:2, value.name = \"GO_id\")\n][, .(GO_id)][, unique(.SD)]\n\ntic()\n# Pre-fetch all parents and children\nall_parents <- GOCCPARENTS[domen_DAG$GO_id]\nall_parents <- lapply(all_parents, function(parents) parents[parents != \"all\"])\n\nall_children <- GOCCCHILDREN[domen_DAG$GO_id]\n\n# Use vapply for faster and more efficient computation\ndomen_DAG[, n_PARENTs := vapply(all_parents, length, integer(1))]\ndomen_DAG[, n_CHILDREN := vapply(all_children, function(x) sum(!is.na(x)), integer(1))]\ntoc()\n                                 \ndomen_DAG[, n_edges := n_PARENTs + n_CHILDREN]\n\ncat(\"\\nDistribution of the number of parents per GO term of BP DAG:\")\nsummary(domen_DAG$n_PARENTs)\n\ncat(\"\\nDistribution of the number of children per GO term of BP DAG:\")\nsummary(domen_DAG$n_CHILDREN)\n\ncat(\"\\nDistribution of the total number of edges per GO term of BP DAG:\")\nsummary(domen_DAG$n_edges)","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:32:30.546166Z","iopub.execute_input":"2025-12-19T18:32:30.548028Z","iopub.status.idle":"2025-12-19T18:32:30.773477Z","shell.execute_reply":"2025-12-19T18:32:30.771562Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Plot the histogram for the number of edges:","metadata":{}},{"cell_type":"code","source":"fig(25, 7)\nggplot(domen_DAG, aes(x = n_edges)) +\n  geom_histogram(binwidth = 0.1, color = \"black\", fill = \"steelblue\") +\n  scale_x_log10(breaks = c(0, median(domen_DAG$n_edges), 10, 100, max(domen_DAG$n_edges))) +\n  geom_vline(xintercept = median(domen_DAG$n_edges), linetype = \"dashed\", color = \"red\") +\n  labs(x = \"Number of edges per term (log10 scale)\", y = \"Count\",\n       title = \"Distribution of the total number of edges per GO term of CC DAG\") +\n  theme_bw(base_size = 20) +\n  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2025-12-19T18:32:34.383484Z","iopub.execute_input":"2025-12-19T18:32:34.385079Z","iopub.status.idle":"2025-12-19T18:32:34.816986Z","shell.execute_reply":"2025-12-19T18:32:34.81503Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Plot top 2 levels for the human:","metadata":{}},{"cell_type":"code","source":"plot_GO_DAG_top(organism = \"Human\", domain = \"CC\")","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:32:40.993482Z","iopub.execute_input":"2025-12-19T18:32:40.99509Z","iopub.status.idle":"2025-12-19T18:32:41.300719Z","shell.execute_reply":"2025-12-19T18:32:41.297703Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# GO Changes Over Time","metadata":{}},{"cell_type":"markdown","source":"Check the loaded GO version:","metadata":{}},{"cell_type":"code","source":"GO.db","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:32:49.766012Z","iopub.execute_input":"2025-12-19T18:32:49.76775Z","iopub.status.idle":"2025-12-19T18:32:49.790947Z","shell.execute_reply":"2025-12-19T18:32:49.789014Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Here I compare the loaded GO.db (out of date) and the latest GO data at 2024.","metadata":{}},{"cell_type":"code","source":"terms_2020 <- keys(GO.db, keytype = \"GOID\")\n\ngo_2024 <- get_ontology(\"/kaggle/input/cafa5-supp-pre-calcs-for-ml/go-basic_17062024.obo\")\nterms_2024 <- names(go_2024$id)\n\ncat(\"Number of terms in the 2020 version:\", length(terms_2020), \"\\n\")\ncat(\"Number of terms in the 2024 version:\", length(terms_2024), \"\\n\")","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:32:55.043928Z","iopub.execute_input":"2025-12-19T18:32:55.045922Z","iopub.status.idle":"2025-12-19T18:33:10.438536Z","shell.execute_reply":"2025-12-19T18:33:10.4367Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"added_terms <- setdiff(terms_2024, terms_2020)\nremoved_terms <- setdiff(terms_2020, terms_2024)\n\ncat(\"Number of terms added in the latest version:\", length(added_terms), \"\\n\")\ncat(\"Number of terms removed in the latest version:\", length(removed_terms), \"\\n\")","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:33:16.366436Z","iopub.execute_input":"2025-12-19T18:33:16.368148Z","iopub.status.idle":"2025-12-19T18:33:16.401121Z","shell.execute_reply":"2025-12-19T18:33:16.399267Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"obsolete_2020 <- ls(GOOBSOLETE)\nobsolete_2024 <- go_2024$id[go_2024$obsolete]\n\n# Compare obsolete terms\nnew_obsoletes <- setdiff(obsolete_2024, obsolete_2020)\ncat(\"Number of newly obsolete terms:\", length(new_obsoletes), \"\\n\")","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:33:19.862022Z","iopub.execute_input":"2025-12-19T18:33:19.863802Z","iopub.status.idle":"2025-12-19T18:33:19.893828Z","shell.execute_reply":"2025-12-19T18:33:19.891978Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Compare definitions","metadata":{}},{"cell_type":"code","source":"defs_2020 <- select(GO.db, keys = terms_2020, columns = \"DEFINITION\", keytype = \"GOID\")\nsetDT(defs_2020)\ndefs_2024 <- data.table(GOID = names(go_2024$id), DEFINITION = go_2024$name)\n\ndefs <- merge(defs_2020, defs_2024, by = \"GOID\", suffixes = c(\"_2020\", \"_2024\"), all = TRUE)\n\ncat(\"Number of terms with changed definitions:\", defs[DEFINITION_2020 != DEFINITION_2024, .N], \"\\n\")\nhead(defs, 10)","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:33:23.137888Z","iopub.execute_input":"2025-12-19T18:33:23.139548Z","iopub.status.idle":"2025-12-19T18:33:23.839854Z","shell.execute_reply":"2025-12-19T18:33:23.837974Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"defs[GOID %chin% new_obsoletes, change_type := \"Obsolete term\"]\ndefs[GOID %chin% added_terms, change_type := \"Added term\"]\ndefs[GOID %chin% removed_terms, change_type := \"Removed term\"]\n\n# For terms with definitions in both versions\ndefs[is.na(change_type) & !is.na(DEFINITION_2020) & !is.na(DEFINITION_2024), \n     change_type := ifelse(\n       DEFINITION_2020 == DEFINITION_2024, \"Unchanged definition\",\n       ifelse(\n         nchar(DEFINITION_2020) > nchar(DEFINITION_2024),\n           \"Simplified definition\", \"Extended definition\"\n       )\n     )]\n\n# For terms with missing definitions\ndefs[is.na(change_type) & is.na(DEFINITION_2020) & !is.na(DEFINITION_2024),\n     change_type := \"Added definition\"]\ndefs[is.na(change_type) & !is.na(DEFINITION_2020) & is.na(DEFINITION_2024),\n     change_type := \"Removed definition\"]\ndefs[is.na(change_type) & is.na(DEFINITION_2020) & is.na(DEFINITION_2024),\n     change_type := \"Missing definition\"]\n\ndefs[, .N, by = change_type]","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:33:33.19838Z","iopub.execute_input":"2025-12-19T18:33:33.200091Z","iopub.status.idle":"2025-12-19T18:33:33.356111Z","shell.execute_reply":"2025-12-19T18:33:33.353928Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"length(intersect(added_terms, new_obsoletes))","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:33:36.418431Z","iopub.execute_input":"2025-12-19T18:33:36.420086Z","iopub.status.idle":"2025-12-19T18:33:36.441959Z","shell.execute_reply":"2025-12-19T18:33:36.439559Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"ggplot(defs[, .N, by = change_type], aes(x = reorder(change_type, -N), y = N)) +\n  geom_bar(stat = \"identity\", fill = \"steelblue\") +\n  geom_text(aes(label = N), vjust = -0.5, size = 6) +\n  labs(\n    title = \"Summary of GO Term Changes (2020 vs. 2024)\",\n    x = \"\",\n    y = \"Number of Terms\"\n  ) +\n  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +\n  theme_minimal(base_size = 26) +\n  theme(plot.title = element_text(hjust = 0.5))","metadata":{"execution":{"iopub.status.busy":"2025-12-19T18:33:42.594011Z","iopub.execute_input":"2025-12-19T18:33:42.595761Z","iopub.status.idle":"2025-12-19T18:33:43.032641Z","shell.execute_reply":"2025-12-19T18:33:43.030368Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<div style=\"line-height:24px; font-size:16px;border-left: 5px solid silver; padding-left: 26px;\"> \n    💡 Note (changes over 4 years): \n    <ul style=\"list-style:circle\">\n        <li>Number of terms added in the latest version: 4,093 (39 were added as obsolete)</li>\n        <li>Number of terms removed in the latest version: 504</li>\n        <li>Number of newly obsolete terms: 2,798</li>\n        <li>Number of terms with changed definitions: 33,418, of which:</li>\n            <ul style=\"list-style:disc; margin-left: 20px;\">\n                <li>Simplified definitions: 33,384</li>\n                <li>Extended definitions: 34</li>\n            </ul>\n        <li>Newly added definitions: 7,592</li>\n    </ul>\n</div>","metadata":{}},{"cell_type":"markdown","source":"# Reduced GO-DAG","metadata":{}},{"cell_type":"markdown","source":"The reduced GO DAG captures simplified but essential information about the connections between GO terms. The reduced GO DAG is a simplified representation of a GO DAG with a maximum of three nodes at each GO level and the connections between them. For example, the BP GO DAG for human with 29,699 (at the time of package article release) GO terms is reduced to a simplified DAG with 39 nodes while retaining all 19 hierarchy levels.","metadata":{}},{"cell_type":"markdown","source":"**Node (GO terms) categories:** \n- RN - Regular Node: all child GO terms are on the next level\n- JN - Jump Node: GO terms with children, at least one of which is not on the next level.\n- LN - Leaf Node: GO terms without any children","metadata":{}},{"cell_type":"markdown","source":"**The plot of the reduced DAG for the Human**","metadata":{}},{"cell_type":"markdown","source":"The reduced GO DAG has the same number of hierarchy levels as the original GO DAG. The total number of GO terms in each node is represented by the node label.\n\nThe labels \"J\", \"R\", and \"L\" on the right side of each figure indicate the number of links between the regular node (RN) at that level and the nodes immediately below it.\n\nFor example, on L1, the labels J = 2, R = 3, and L = 0 mean that the RNs at this level have 2 of its child nodes as jump nodes (JN) on L2, 3 of it's descendants are regular nodes (RN), and 0 of it's child GO terms on L2 are leaf nodes (LN).","metadata":{}},{"cell_type":"code","source":"fig(15, 10)\nvisRDAGBP(organism = \"Human\")[[\"plot\"]] +\n    theme_void(base_size = 22) +\n    labs(title = \"Reduced DAG of biological process (BP) GO terms for human\") +\n    theme(legend.position = \"none\",\n          axis.text.x = element_text(size = 20),\n         plot.title = element_text(size = 20))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:33:59.047541Z","iopub.execute_input":"2025-12-19T18:33:59.049301Z","iopub.status.idle":"2025-12-19T18:34:02.017909Z","shell.execute_reply":"2025-12-19T18:34:02.01563Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"fig(15, 10)\nvisRDAGMF(organism = \"Human\")[[\"plot\"]] +\n    theme_void(base_size = 22) +\n    labs(title = \"Reduced DAG of molecular function (MF) GO terms for human\") +\n    theme(legend.position = \"none\",\n          axis.text.x = element_text(size = 20),\n         plot.title = element_text(size = 20))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:02.020759Z","iopub.execute_input":"2025-12-19T18:34:02.022327Z","iopub.status.idle":"2025-12-19T18:34:02.862723Z","shell.execute_reply":"2025-12-19T18:34:02.860414Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"fig(15, 10)\nvisRDAGCC(organism = \"Human\")[[\"plot\"]] +\n    theme_void(base_size = 22) +\n    labs(title = \"Reduced DAG of cellular component (CC) GO terms for human\") +\n    theme(legend.position = \"none\",\n          axis.text.x = element_text(size = 20),\n         plot.title = element_text(size = 20))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:02.865799Z","iopub.execute_input":"2025-12-19T18:34:02.867526Z","iopub.status.idle":"2025-12-19T18:34:03.712818Z","shell.execute_reply":"2025-12-19T18:34:03.710541Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Groups of terms in the GO DAG","metadata":{}},{"cell_type":"markdown","source":"Function that searches for specific patterns in GO terms and generate the corresponding table with information on ancestors, parents, children, and offsprings:","metadata":{}},{"cell_type":"code","source":"make_go_term_table <- function(pattern, goterms) {\n    \n    # search for specific words in GO term\n    matching_terms <- grep(pattern, goterms)\n  \n    # create data table\n    go_table <- data.table(\n        GO_id = names(goterms[matching_terms]),\n        GO_term = goterms[matching_terms]\n    )\n    \n    all_ancestors <- GOBPANCESTOR[go_table$GO_id]\n    all_parents <- GOBPPARENTS[go_table$GO_id]\n    all_parents <- lapply(all_parents, function(parents) parents[parents != \"all\"])\n\n    all_children <- GOBPCHILDREN[go_table$GO_id]\n    all_offsprings <- GOBPOFFSPRING[go_table$GO_id]\n\n\n    # add information about the level in the DAG and numbers of ancestors, parents, children, and offsprings\n    go_table[, `:=`(\n        level_in_DAG = vapply(GO_id, function(x) as.integer(GOTermBPOnLevel(x)$Level), integer(1)),\n        n_ANCESTORS = vapply(all_ancestors, length, integer(1)),\n        n_PARENTS = vapply(all_parents, length, integer(1)),\n        n_CHILDREN = vapply(all_children, function(x) sum(!is.na(x)), integer(1)),\n        n_OFFSPRINGS = vapply(all_offsprings, length, integer(1))\n      )]\n    # sort by level in DAG\n    go_table <- go_table[order(level_in_DAG)]\n\n    # return the final sorted data table\n    return(go_table)\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:05.623009Z","iopub.execute_input":"2025-12-19T18:34:05.624758Z","iopub.status.idle":"2025-12-19T18:34:05.639179Z","shell.execute_reply":"2025-12-19T18:34:05.63717Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Function to prepare data for the visNetwork graph of BP ontology with parents of selected terms:","metadata":{}},{"cell_type":"code","source":"prep_parents_graph <- function(dt) {\n    \n    # add n_PARENTs column if not present\n    if (!\"n_PARENTS\" %in% colnames(dt)) {\n        dt[, n_PARENTS := sapply(GO_id, function(x) length(unique(GOBPPARENTS[[x]])))]\n    }\n\n    # duplicate rows according to the number of parents\n    dt_expanded <- dt[, .SD[rep(1:.N, n_PARENTS)], by = GO_id]\n\n    # precompute parents and relations\n    all_edges <- rbindlist(lapply(unique(dt_expanded$GO_id), function(id) {\n        parents <- GOBPPARENTS[[id]]\n        if (!is.null(parents) && length(parents[parents != \"all\"]) > 0) {\n            data.table(\n                from = id,\n                to = parents[parents != \"all\"],\n                title = names(parents[parents != \"all\"])\n            )\n        } else {\n            NULL\n        }\n    }), use.names = TRUE, fill = TRUE)\n\n    # add color codes to the edges\n    all_edges[, color := fifelse(title == \"isa\", \"#1C588C\",\n                         fifelse(title == \"positively regulates\", \"#2D735F\",\n                         fifelse(title == \"negatively regulates\", \"#BF5841\",\n                         fifelse(title == \"regulates\", \"#BF9039\",\n                         fifelse(title == \"part of\", \"black\",\n                         fifelse(title == \"has part\", \"gray\", NA_character_))))))]\n\n    # remove any rows with missing parent nodes\n    all_edges <- all_edges[!is.na(to)]\n\n    # create nodes\n    unique_nodes <- unique(c(all_edges$from, all_edges$to))\n    nodes <- data.table(id = unique_nodes)[id != \"all\"]  # Remove \"all\" as a parent\n    nodes[, `:=`(\n        level = sapply(id, function(x) GOTermBPOnLevel(x)$Level),\n        label = str_wrap(paste0(id, \"\\n\", unlist(safe_getGOTerm(id))), width = 10),\n        shape = \"box\",\n        color.background = ifelse(id %in% dt$GO_id, \"white\", \"beige\"),\n        color.border = \"black\",\n        font.color = \"black\",\n        title = str_wrap(unlist(safe_getGOTerm(id)), width = 10)\n    )]\n\n    # create legend for edges\n    leg_edges <- unique(all_edges[, .(title, color)])\n    leg_edges[, label := title]\n\n    # return as a named list\n    return(list(nodes = nodes, edges = all_edges, leg_edges = leg_edges))\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:09.064799Z","iopub.execute_input":"2025-12-19T18:34:09.06671Z","iopub.status.idle":"2025-12-19T18:34:09.083115Z","shell.execute_reply":"2025-12-19T18:34:09.080967Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Extract all GO terms for the selected organism (optional) and domain**","metadata":{}},{"cell_type":"markdown","source":"Here I use the GO DAG of biological process (BP) for human. To search for other domains, you can use a set of hash tables ([vignette](http://bioconductor.org/packages/devel/bioc/vignettes/annotate/inst/doc/GOusage.pdf)) containing the information about parents and children (GOXXPARENTS, GOXXANCESTOR, GOXXCHILDREN, GOXXOFFSPRING), where the XX in the names should be replaced by one of BP, MF, or CC. In GetDAG(organism = \"Human\", domain = \"BP\"), you can also set organism = \"BP\" to get all BP terms.","metadata":{}},{"cell_type":"markdown","source":"Get organism and domain-specific GO IDs:","metadata":{}},{"cell_type":"code","source":"org_domen <- data.table(GetDAG(organism = \"Human\", domain = \"BP\"))[\n        , melt(.SD, measure.vars = 1:2, value.name = \"GO_id\")\n    ][, unique(GO_id)]\n\ncat(\"There are\", length(org_domen), \"BP GO terms for human\")\n\ngoterms = unlist(Term(GOTERM))\ngoterms <- goterms[names(goterms) %in% org_domen]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:14.653234Z","iopub.execute_input":"2025-12-19T18:34:14.655001Z","iopub.status.idle":"2025-12-19T18:34:14.851447Z","shell.execute_reply":"2025-12-19T18:34:14.849425Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# - Splicing","metadata":{}},{"cell_type":"markdown","source":"Let's find all terms related to splicing.","metadata":{}},{"cell_type":"code","source":"go_term_table <- make_go_term_table(\"splicing\", goterms)\ngo_term_table","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:17.007358Z","iopub.execute_input":"2025-12-19T18:34:17.009115Z","iopub.status.idle":"2025-12-19T18:34:17.318381Z","shell.execute_reply":"2025-12-19T18:34:17.316136Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dom_graph <- prep_parents_graph(go_term_table)\ntitle = \"Splicing-related Terms in the Biological Process (BP) Domain for Human\"\nplot <- create_visNetwork_plot(\n    nodes = dom_graph$nodes, edges = dom_graph$edges,\n    legend_edges = dom_graph$leg_edges,\n    title = title, width_prop = \"120%\"\n)\nplot\nvisSave(plot, \"splicing_terms_vith_parents.html\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:19.003197Z","iopub.execute_input":"2025-12-19T18:34:19.0049Z","iopub.status.idle":"2025-12-19T18:34:21.224043Z","shell.execute_reply":"2025-12-19T18:34:21.221242Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<div style=\"line-height:24px; font-size:16px;border-left: 5px solid silver; padding-left: 26px;\"> \n    💡 Note: \n    <ul style=\"list-style:circle\">\n<li>I have drawn only the parents of the selected GO terms, not all of their ancestors\n<li>The nodes (the boxes containing the GO terms) are arranged vertically in a hierarchical order. The levels in the DAG are shown in the table above (level_in_DAG column)\n<li>The added parent terms are shown in colored boxes\n    </ul>\n</div>","metadata":{}},{"cell_type":"markdown","source":"# - Post-transcription regulation","metadata":{}},{"cell_type":"markdown","source":"Now I examine all terms related to posttranscription regulation.","metadata":{}},{"cell_type":"code","source":"go_term_table <- make_go_term_table(\"posttranscript|post-transcript\", goterms)\ngo_term_table","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:22.693992Z","iopub.execute_input":"2025-12-19T18:34:22.695759Z","iopub.status.idle":"2025-12-19T18:34:22.959985Z","shell.execute_reply":"2025-12-19T18:34:22.957963Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dom_graph <- prep_parents_graph(go_term_table)\ntitle = \"Post-transcription regulation-related Terms in the Biological Process (BP) Domain for Human\"\nplot <- create_visNetwork_plot(\n    nodes = dom_graph$nodes, edges = dom_graph$edges,\n    legend_edges = dom_graph$leg_edges,\n    title = title, width_prop = \"120%\"\n)\nplot\nvisSave(plot, \"posttranscription_terms_vith_parents.html\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:24.444706Z","iopub.execute_input":"2025-12-19T18:34:24.446456Z","iopub.status.idle":"2025-12-19T18:34:25.202944Z","shell.execute_reply":"2025-12-19T18:34:25.200915Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<div style=\"line-height:24px; font-size:16px;border-left: 5px solid silver; padding-left: 26px;\"> \n    💡 Note: \n    <ul style=\"list-style:circle\">\n<li>I have drawn only the parents of the selected GO terms, not all of their ancestors\n<li>The nodes (the boxes containing the GO terms) are arranged vertically in a hierarchical order. The levels in the DAG are shown in the table above (level_in_DAG column)\n<li>The added parent terms are shown in colored boxes\n    </ul>\n</div>","metadata":{}},{"cell_type":"markdown","source":"# - Post-translation regulation","metadata":{}},{"cell_type":"code","source":"go_term_table <- make_go_term_table(\"posttranslation|post-translation\", goterms)\ngo_term_table","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:27.510597Z","iopub.execute_input":"2025-12-19T18:34:27.51224Z","iopub.status.idle":"2025-12-19T18:34:27.759426Z","shell.execute_reply":"2025-12-19T18:34:27.756859Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dom_graph <- prep_parents_graph(go_term_table)\ntitle = \"Post-translation regulation-related Terms in the Biological Process (BP) Domain for Human\"\nplot <- create_visNetwork_plot(\n    nodes = dom_graph$nodes, edges = dom_graph$edges,\n    legend_edges = dom_graph$leg_edges,\n    title = title, width_prop = \"120%\"\n)\nplot\nvisSave(plot, \"posttranslation_terms_vith_parents.html\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:29.914844Z","iopub.execute_input":"2025-12-19T18:34:29.916903Z","iopub.status.idle":"2025-12-19T18:34:30.64842Z","shell.execute_reply":"2025-12-19T18:34:30.646481Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<div style=\"line-height:24px; font-size:16px;border-left: 5px solid silver; padding-left: 26px;\"> \n    💡 Note: \n    <ul style=\"list-style:circle\">\n<li>I have drawn only the parents of the selected GO terms, not all of their ancestors\n<li>The nodes (the boxes containing the GO terms) are arranged vertically in a hierarchical order. The levels in the DAG are shown in the table above (level_in_DAG column)\n<li>The added parent terms are shown in colored boxes\n    </ul>\n</div>","metadata":{}},{"cell_type":"markdown","source":"# GO terms in CAFA5 training set","metadata":{}},{"cell_type":"markdown","source":"**Load CAFA5 training set**","metadata":{}},{"cell_type":"markdown","source":"This set contains all proteins with annotated terms that have been validated by experimental or high-throughput evidence, traceable author statement (evidence code TAS), or inferred by the curator (IC).","metadata":{}},{"cell_type":"code","source":"train_set <- fread(\n    '/kaggle/input/cafa-5-protein-function-prediction/Train/train_terms.tsv'\n)\ncat(\"The head of the data set with\", train_set[, .N], \"rows\")\nhead(train_set)\n\ncat(\"\\nUnique proteins:\", train_set[, uniqueN(EntryID)],\n   \"\\nUnique GO terms:\", train_set[, uniqueN(term)])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:32.852469Z","iopub.execute_input":"2025-12-19T18:34:32.854126Z","iopub.status.idle":"2025-12-19T18:34:36.13288Z","shell.execute_reply":"2025-12-19T18:34:36.130494Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dstats <- train_set[, .(n = uniqueN(term)), by = EntryID]\n\ncat(\"Number of GO terms per protein:\")\ncat(\"\\nrange:\", min(dstats$n), \"to\", max(dstats$n))\ncat(\"\\nmean:\", mean(dstats$n))\ncat(\"\\nmedian:\", median(dstats$n))\ncat(\"\\nNumber of proteins with 10 or lesser GO terms:\", nrow(dstats[n <= 10]))\n\n# Calculate the number of distinct proteins per GO term\ndstats <- train_set[, .(n = uniqueN(EntryID)), by = term]\ncat(\"\\nNumber of GO terms assigned to only one protein:\", nrow(dstats[n == 1]))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:43.108885Z","iopub.execute_input":"2025-12-19T18:34:43.110512Z","iopub.status.idle":"2025-12-19T18:34:54.337783Z","shell.execute_reply":"2025-12-19T18:34:54.33589Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cat(\"\\nNumber of unique proteins and GO terms by ontology\")\ntrain_set[, .(n_Proteins = uniqueN(EntryID), n_GOterms = uniqueN(term)), by = aspect]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:54.340435Z","iopub.execute_input":"2025-12-19T18:34:54.341935Z","iopub.status.idle":"2025-12-19T18:34:55.503838Z","shell.execute_reply":"2025-12-19T18:34:55.502001Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"When working with old datasets, some GO terms may no longer exist in the loaded version of the Gene Ontology. So here is a function to safely get the level of a BP GO term:","metadata":{}},{"cell_type":"code","source":"safe_get_BP_level <- function(term) {\n  tryCatch({\n    suppressWarnings({\n      level_info <- GOTermBPOnLevel(term)\n      if (!is.null(level_info)) {\n        return(level_info$Level)\n      } else {\n        return(NA)  # Return NA if not a valid BP GO term\n      }\n    })\n  }, error = function(e) {\n    return(NA)  # Return NA if there's an error\n  })\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:55.506575Z","iopub.execute_input":"2025-12-19T18:34:55.508101Z","iopub.status.idle":"2025-12-19T18:34:55.52093Z","shell.execute_reply":"2025-12-19T18:34:55.519095Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# - Most frequent","metadata":{}},{"cell_type":"markdown","source":"Here I select 10 most common GO terms in CAFA5 training set from biological processes (BP) ontology.","metadata":{}},{"cell_type":"code","source":"train_subset <- train_set[aspect == \"BPO\"]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:55.523703Z","iopub.execute_input":"2025-12-19T18:34:55.525139Z","iopub.status.idle":"2025-12-19T18:34:55.773307Z","shell.execute_reply":"2025-12-19T18:34:55.771376Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# make a dataframe with selected terms\ncat(\"Ten most frequent GO terms of BP in the CAFA5 dataset:\")\ncat(\"\\n\\nANCESTORs - the parents, and all their parents and so on\nOFFSPRINGs - the children, their children and so on out to the leaves of the GO graph\nn_proteins - number of proteins annotated with each GO term\")\nset_GO <- train_subset[, .(n_proteins = .N), by = term][order(-n_proteins)][1:10]\nset_GO[, GO_id := term][, term := NULL]\nset_GO[, GO_term := str_wrap(unlist(safe_getGOTerm(GO_id)), width = 10)]\n\n# add info about the level of each term in the DAG and numbers of ancestors and offsprings\nset_GO[, `:=`(\n  level_in_DAG = sapply(GO_id, function(x) safe_get_BP_level(x)),\n  n_ANCESTORS = sapply(GO_id, function(x) uniqueN(GOBPANCESTOR[[x]])),\n  n_PARENTS = sapply(GO_id, function(x) uniqueN(GOBPPARENTS[[x]])),\n  n_CHILDREN = sapply(GO_id, function(x) uniqueN(GOBPCHILDREN[[x]])),\n  n_OFFSPRINGS = sapply(GO_id, function(x) uniqueN(GOBPOFFSPRING[[x]]))\n)]\n\nset_GO","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:34:58.958002Z","iopub.execute_input":"2025-12-19T18:34:58.959762Z","iopub.status.idle":"2025-12-19T18:35:00.947091Z","shell.execute_reply":"2025-12-19T18:35:00.945245Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"As expected, given the level in the DAG, and also the number of ancestors and descendants, the most frequent GO terms are close to the root of the DAG.  \nAll proteins in the training set, which were annotated with at least one GO term form BP (n = 92210) have the root term GO:0008150 (biological_process).","metadata":{}},{"cell_type":"code","source":"dom_graph <- prep_parents_graph(set_GO)\ntitle = \"Top 10 Frequent GO Terms from CAFA5 Training Set in BP GO DAG\"\nplot <- create_visNetwork_plot(\n    nodes = dom_graph$nodes, edges = dom_graph$edges,\n    legend_edges = dom_graph$leg_edges,\n    title = title, width_prop = \"100%\"\n)\nplot\nvisSave(plot, \"top10CAFA_terms_vith_parents.html\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:35:03.130733Z","iopub.execute_input":"2025-12-19T18:35:03.132308Z","iopub.status.idle":"2025-12-19T18:35:03.911089Z","shell.execute_reply":"2025-12-19T18:35:03.909075Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<div style=\"line-height:24px; font-size:16px;border-left: 5px solid silver; padding-left: 26px;\"> \n    💡 Note: \n    <ul style=\"list-style:circle\">\n<li>The nodes (the boxes containing the GO terms) are arranged vertically in a hierarchical order. The levels in the DAG are shown in the table above (level_in_DAG column)\n<li>The added parent terms are shown in colored boxes (absent here)\n    </ul>\n</div>","metadata":{}},{"cell_type":"markdown","source":"# - Least frequent","metadata":{}},{"cell_type":"markdown","source":"Here I select 10 least common GO terms in CAFA5 training set from biological processes (BP) ontology.","metadata":{}},{"cell_type":"code","source":"# make a dataframe with selected terms\ncat(\"Ten most frequent GO terms of BP in the CAFA5 dataset:\")\ncat(\"\\n\\nANCESTORs - the parents, and all their parents and so on\nOFFSPRINGs - the children, their children and so on out to the leaves of the GO graph\nn_proteins - number of proteins annotated with each GO term\")\nset_GO <- tail(train_subset[, .(n_proteins = .N), by = term][order(-n_proteins)], 10)\nset_GO[, GO_id := term][, term := NULL]\nset_GO[, GO_term := sapply(GO_id, function(id) {\n  term <- safe_getGOTerm(id)\n  str_wrap(unlist(term), width = 10)\n})]\n# add info about the level of each term in the DAG and numbers of ancestors and offsprings\nset_GO[, `:=`(\n  level_in_DAG = sapply(GO_id, function(x) safe_get_BP_level(x)),\n  n_ANCESTORS = sapply(GO_id, function(x) uniqueN(GOBPANCESTOR[[x]])),\n  n_PARENTS = sapply(GO_id, function(x) uniqueN(GOBPPARENTS[[x]])),\n  n_CHILDREN = sapply(GO_id, function(x) uniqueN(GOBPCHILDREN[[x]])),\n  n_OFFSPRINGS = sapply(GO_id, function(x) uniqueN(GOBPOFFSPRING[[x]]))\n)]\n\nset_GO","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:54:31.124469Z","iopub.execute_input":"2025-12-19T18:54:31.126664Z","iopub.status.idle":"2025-12-19T18:54:32.732741Z","shell.execute_reply":"2025-12-19T18:54:32.730842Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dom_graph <- prep_parents_graph(set_GO)\ntitle = \"Bottom 10 Frequent GO Terms from CAFA5 Training Set in BP GO DAG\"\nplot <- create_visNetwork_plot(\n    nodes = dom_graph$nodes, edges = dom_graph$edges,\n    legend_edges = dom_graph$leg_edges,\n    title = title, width_prop = \"100%\"\n)\nplot\nvisSave(plot, \"bottom10CAFA_terms_vith_parents.html\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:54:38.240624Z","iopub.execute_input":"2025-12-19T18:54:38.242303Z","iopub.status.idle":"2025-12-19T18:54:39.023Z","shell.execute_reply":"2025-12-19T18:54:39.020672Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<div style=\"line-height:24px; font-size:16px;border-left: 5px solid silver; padding-left: 26px;\"> \n    💡 Note: \n    <ul style=\"list-style:circle\">\n<li>I have drawn only the parents of the selected GO terms, not all of their ancestors\n<li>The nodes (the boxes containing the GO terms) are arranged vertically in a hierarchical order. The levels in the DAG are shown in the table above (level_in_DAG column)\n<li>The added parent terms are shown in colored boxes\n    </ul>\n</div>","metadata":{}},{"cell_type":"markdown","source":"**Examine individual GO terms**","metadata":{}},{"cell_type":"code","source":"my_term <- \"GO:0000769\"\nGOTERM[[my_term]]\n\ncat(\"\\n\\nProtein having this GO term in its annotation\")\ntrain_set[term == my_term]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:54:47.999891Z","iopub.execute_input":"2025-12-19T18:54:48.001512Z","iopub.status.idle":"2025-12-19T18:54:48.139899Z","shell.execute_reply":"2025-12-19T18:54:48.137912Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# GO term tracking in GO GAD","metadata":{}},{"cell_type":"markdown","source":"Now let's track one term of interest in the DAG up to its root.","metadata":{}},{"cell_type":"code","source":"GO_id = \"GO:0099049\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:56:33.245186Z","iopub.execute_input":"2025-12-19T18:56:33.247816Z","iopub.status.idle":"2025-12-19T18:56:33.266596Z","shell.execute_reply":"2025-12-19T18:56:33.263657Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"term_anc <- data.table(GO_id = GOBPANCESTOR[[GO_id]])\nterm_anc <- term_anc[GO_id != \"all\"]\n\ndom_graph <- prep_parents_graph(term_anc)\ntitle = \"The location of individual GO term in BP GO DAG\"\nplot <- create_visNetwork_plot(\n    nodes = dom_graph$nodes, edges = dom_graph$edges,\n    legend_edges = dom_graph$leg_edges,\n    title = title, width_prop = \"100%\"\n)\nplot\nvisSave(plot, \"bottom10CAFA_terms_vith_parents.html\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-19T18:56:37.049325Z","iopub.execute_input":"2025-12-19T18:56:37.052553Z","iopub.status.idle":"2025-12-19T18:56:39.219148Z","shell.execute_reply":"2025-12-19T18:56:39.217006Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<div style=\"line-height:24px; font-size:16px;border-left: 5px solid silver; padding-left: 26px;\"> \n    💡 Note: \n    <ul style=\"list-style:circle\">\n<li>Here I use the same function prep_parents_graph that was used as above\n<li>However, I pass a data table containing the GO term of interest and all its ancestors as input. As a result, the visualization shows the GO term along with all of its ancestors in the BP GO DAG\n<li>The nodes (the boxes containing the GO terms) are arranged vertically in a hierarchical order. The levels in the DAG are shown in the table above (level_in_DAG column)\n    </ul>\n</div>","metadata":{}}]}