{ "cells": [ { "cell_type": "markdown", "id": "d3716dad", "metadata": {}, "source": [ "# Enrichment Analysis\n", "\n", "Enrichment analysis (EA) is a technique used to derive biological insight from lists of significantly altered genes. The list of genes can be obtained from Differential Expression (DE) analysis or users' interest. The EA methods rely on the knowledge databases (e.g. KEGG and GO) to identify biological pathways or terms that are enriched in a gene list more than would be expected by chance. The outcome of the EA would be the in-depth and contextualized findings to help understand the mechanisms of disease, genes and proteins associated with the etiology of a specific disease or drug target.\n", "\n", "Over more than a decade, there are over 50 methods have been developed for EA. In this module, we will focus on pathway analysis using three popular methods including Over Representation Analysis (ORA), Fast Gene Set Enrichment Analysis (FGSEA), and Gene Set Analysis (GSA).\n", "\n", "## Learning Objectives:\n", "1. Data preparation\n", "2. Perform enrichment analysis using ORA, FGSEA and GSA\n", "3. Visualize and interpret the outputs" ] }, { "cell_type": "code", "execution_count": 1, "id": "c403f179", "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": "" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "IRdisplay::display_html('')" ] }, { "cell_type": "markdown", "id": "4731471e", "metadata": {}, "source": [ "## Gene mapping\n", "In this module, we will use the DE genes with statistic generated in the [**submodule 02** ](./Module02-DE_Analysis.ipynb) using `limma` R package. We can use the following command to load DE analysis result." ] }, { "cell_type": "code", "execution_count": 2, "id": "5c0da12c", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A data.frame: 6 × 7
PROBEIDlogFCAveExprtP.Valueadj.P.ValB
<chr><dbl><dbl><dbl><dbl><dbl><dbl>
222178_s_at222178_s_at-0.44737800.3653633-73.011064.019112e-552.197450e-5081.05538
224687_at224687_at -4.14316312.2572347-48.920365.489424e-461.500671e-4174.18354
207488_at207488_at -0.40175300.6243144-39.299334.735684e-418.630785e-3768.83493
239226_at239226_at 0.44833021.3245501 28.364997.626558e-341.042455e-2958.84908
234109_x_at234109_x_at-0.22897260.7508256-27.670102.635337e-332.881741e-2958.00438
212833_at212833_at -2.59765921.7308944-24.011722.914912e-302.656213e-2652.99567
\n", "text/markdown": "\nA data.frame: 6 × 7\n\n| | PROBEID <chr> | logFC <dbl> | AveExpr <dbl> | t <dbl> | P.Value <dbl> | adj.P.Val <dbl> | B <dbl> |\n|---|---|---|---|---|---|---|---|\n| 222178_s_at | 222178_s_at | -0.4473780 | 0.3653633 | -73.01106 | 4.019112e-55 | 2.197450e-50 | 81.05538 |\n| 224687_at | 224687_at | -4.1431631 | 2.2572347 | -48.92036 | 5.489424e-46 | 1.500671e-41 | 74.18354 |\n| 207488_at | 207488_at | -0.4017530 | 0.6243144 | -39.29933 | 4.735684e-41 | 8.630785e-37 | 68.83493 |\n| 239226_at | 239226_at | 0.4483302 | 1.3245501 | 28.36499 | 7.626558e-34 | 1.042455e-29 | 58.84908 |\n| 234109_x_at | 234109_x_at | -0.2289726 | 0.7508256 | -27.67010 | 2.635337e-33 | 2.881741e-29 | 58.00438 |\n| 212833_at | 212833_at | -2.5976592 | 1.7308944 | -24.01172 | 2.914912e-30 | 2.656213e-26 | 52.99567 |\n\n", "text/latex": "A data.frame: 6 × 7\n\\begin{tabular}{r|lllllll}\n & PROBEID & logFC & AveExpr & t & P.Value & adj.P.Val & B\\\\\n & & & & & & & \\\\\n\\hline\n\t222178\\_s\\_at & 222178\\_s\\_at & -0.4473780 & 0.3653633 & -73.01106 & 4.019112e-55 & 2.197450e-50 & 81.05538\\\\\n\t224687\\_at & 224687\\_at & -4.1431631 & 2.2572347 & -48.92036 & 5.489424e-46 & 1.500671e-41 & 74.18354\\\\\n\t207488\\_at & 207488\\_at & -0.4017530 & 0.6243144 & -39.29933 & 4.735684e-41 & 8.630785e-37 & 68.83493\\\\\n\t239226\\_at & 239226\\_at & 0.4483302 & 1.3245501 & 28.36499 & 7.626558e-34 & 1.042455e-29 & 58.84908\\\\\n\t234109\\_x\\_at & 234109\\_x\\_at & -0.2289726 & 0.7508256 & -27.67010 & 2.635337e-33 & 2.881741e-29 & 58.00438\\\\\n\t212833\\_at & 212833\\_at & -2.5976592 & 1.7308944 & -24.01172 & 2.914912e-30 & 2.656213e-26 & 52.99567\\\\\n\\end{tabular}\n", "text/plain": " PROBEID logFC AveExpr t P.Value \n222178_s_at 222178_s_at -0.4473780 0.3653633 -73.01106 4.019112e-55\n224687_at 224687_at -4.1431631 2.2572347 -48.92036 5.489424e-46\n207488_at 207488_at -0.4017530 0.6243144 -39.29933 4.735684e-41\n239226_at 239226_at 0.4483302 1.3245501 28.36499 7.626558e-34\n234109_x_at 234109_x_at -0.2289726 0.7508256 -27.67010 2.635337e-33\n212833_at 212833_at -2.5976592 1.7308944 -24.01172 2.914912e-30\n adj.P.Val B \n222178_s_at 2.197450e-50 81.05538\n224687_at 1.500671e-41 74.18354\n207488_at 8.630785e-37 68.83493\n239226_at 1.042455e-29 58.84908\n234109_x_at 2.881741e-29 58.00438\n212833_at 2.656213e-26 52.99567" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "DE.df <- readRDS(\"./data/DE_genes.rds\")\n", "rownames(DE.df) <- DE.df$PROBEID\n", "head(DE.df)" ] }, { "cell_type": "markdown", "id": "722ce8e2", "metadata": {}, "source": [ "We can see that the genes are saved with probe IDs, we need to convert them into gene symbols so that they can be analyzed using enrichment analysis method later in this module. We will use the same approach presented in the [**submodule 01** ](./Module01-GEO_Data_Processing.ipynb) with `hgu133plus2.db` and `AnnotationDbi` databases." ] }, { "cell_type": "code", "execution_count": 3, "id": "84f28dcf", "metadata": {}, "outputs": [], "source": [ "# Load the databases\n", "suppressMessages({\n", " library(hgu133plus2.db)\n", " library(AnnotationDbi)\n", "})" ] }, { "cell_type": "markdown", "id": "f51c9e14", "metadata": {}, "source": [ "Then, we can retrieve vector of probe IDs to perform gene symbol mapping using the following command:" ] }, { "cell_type": "code", "execution_count": 4, "id": "f04cf4fe", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A data.frame: 6 × 3
PROBEIDGENENAMESYMBOL
<chr><chr><chr>
1222178_s_atNA NA
2224687_at ankyrin repeat and IBR domain containing 1ANKIB1
3207488_at NA NA
4239226_at NA NA
5234109_x_atone cut homeobox 3 ONECUT3
6212833_at solute carrier family 25 member 46 SLC25A46
\n", "text/markdown": "\nA data.frame: 6 × 3\n\n| | PROBEID <chr> | GENENAME <chr> | SYMBOL <chr> |\n|---|---|---|---|\n| 1 | 222178_s_at | NA | NA |\n| 2 | 224687_at | ankyrin repeat and IBR domain containing 1 | ANKIB1 |\n| 3 | 207488_at | NA | NA |\n| 4 | 239226_at | NA | NA |\n| 5 | 234109_x_at | one cut homeobox 3 | ONECUT3 |\n| 6 | 212833_at | solute carrier family 25 member 46 | SLC25A46 |\n\n", "text/latex": "A data.frame: 6 × 3\n\\begin{tabular}{r|lll}\n & PROBEID & GENENAME & SYMBOL\\\\\n & & & \\\\\n\\hline\n\t1 & 222178\\_s\\_at & NA & NA \\\\\n\t2 & 224687\\_at & ankyrin repeat and IBR domain containing 1 & ANKIB1 \\\\\n\t3 & 207488\\_at & NA & NA \\\\\n\t4 & 239226\\_at & NA & NA \\\\\n\t5 & 234109\\_x\\_at & one cut homeobox 3 & ONECUT3 \\\\\n\t6 & 212833\\_at & solute carrier family 25 member 46 & SLC25A46\\\\\n\\end{tabular}\n", "text/plain": " PROBEID GENENAME SYMBOL \n1 222178_s_at NA NA \n2 224687_at ankyrin repeat and IBR domain containing 1 ANKIB1 \n3 207488_at NA NA \n4 239226_at NA NA \n5 234109_x_at one cut homeobox 3 ONECUT3 \n6 212833_at solute carrier family 25 member 46 SLC25A46" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "probeIDs = DE.df$PROBEID\n", "suppressMessages({\n", "annotLookup <- AnnotationDbi::select(hgu133plus2.db, keys = probeIDs, columns = c('PROBEID','GENENAME','SYMBOL'))\n", "})\n", "# View the first few genes in the mapping table\n", "head(annotLookup)" ] }, { "cell_type": "markdown", "id": "8ed42b60", "metadata": {}, "source": [ "Now, we can merge DE data frame with annotation table by the `PROBEID` and remove NA gene symbols using the following command:" ] }, { "cell_type": "code", "execution_count": 5, "id": "5c5ac1b5", "metadata": {}, "outputs": [], "source": [ "DE.df = merge(annotLookup, DE.df, by=\"PROBEID\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "3bef4b3d", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A data.frame: 6 × 9
PROBEIDGENENAMESYMBOLlogFCAveExprtP.Valueadj.P.ValB
<chr><chr><chr><dbl><dbl><dbl><dbl><dbl><dbl>
11007_s_atdiscoidin domain receptor tyrosine kinase 1 DDR1 -0.238584651.0967772-2.082575850.042102110.2531265-4.284228
21053_at replication factor C subunit 2 RFC2 0.058303670.9657758 1.423113560.160527930.4674726-5.359907
3117_at heat shock protein family A (Hsp70) member 6HSPA6 -0.011384941.1501582-0.081008850.935738210.9861536-6.337785
4121_at paired box 8 PAX8 0.023010841.0581847 0.871666630.387298160.7236528-5.968512
51255_g_atguanylate cyclase activator 1A GUCA1A 0.369999501.4080351 1.786150220.079761230.3351480-4.812134
61294_at ubiquitin like modifier activating enzyme 7 UBA7 -0.112214341.0859983-1.615936700.112009950.3925252-5.082923
\n", "text/markdown": "\nA data.frame: 6 × 9\n\n| | PROBEID <chr> | GENENAME <chr> | SYMBOL <chr> | logFC <dbl> | AveExpr <dbl> | t <dbl> | P.Value <dbl> | adj.P.Val <dbl> | B <dbl> |\n|---|---|---|---|---|---|---|---|---|---|\n| 1 | 1007_s_at | discoidin domain receptor tyrosine kinase 1 | DDR1 | -0.23858465 | 1.0967772 | -2.08257585 | 0.04210211 | 0.2531265 | -4.284228 |\n| 2 | 1053_at | replication factor C subunit 2 | RFC2 | 0.05830367 | 0.9657758 | 1.42311356 | 0.16052793 | 0.4674726 | -5.359907 |\n| 3 | 117_at | heat shock protein family A (Hsp70) member 6 | HSPA6 | -0.01138494 | 1.1501582 | -0.08100885 | 0.93573821 | 0.9861536 | -6.337785 |\n| 4 | 121_at | paired box 8 | PAX8 | 0.02301084 | 1.0581847 | 0.87166663 | 0.38729816 | 0.7236528 | -5.968512 |\n| 5 | 1255_g_at | guanylate cyclase activator 1A | GUCA1A | 0.36999950 | 1.4080351 | 1.78615022 | 0.07976123 | 0.3351480 | -4.812134 |\n| 6 | 1294_at | ubiquitin like modifier activating enzyme 7 | UBA7 | -0.11221434 | 1.0859983 | -1.61593670 | 0.11200995 | 0.3925252 | -5.082923 |\n\n", "text/latex": "A data.frame: 6 × 9\n\\begin{tabular}{r|lllllllll}\n & PROBEID & GENENAME & SYMBOL & logFC & AveExpr & t & P.Value & adj.P.Val & B\\\\\n & & & & & & & & & \\\\\n\\hline\n\t1 & 1007\\_s\\_at & discoidin domain receptor tyrosine kinase 1 & DDR1 & -0.23858465 & 1.0967772 & -2.08257585 & 0.04210211 & 0.2531265 & -4.284228\\\\\n\t2 & 1053\\_at & replication factor C subunit 2 & RFC2 & 0.05830367 & 0.9657758 & 1.42311356 & 0.16052793 & 0.4674726 & -5.359907\\\\\n\t3 & 117\\_at & heat shock protein family A (Hsp70) member 6 & HSPA6 & -0.01138494 & 1.1501582 & -0.08100885 & 0.93573821 & 0.9861536 & -6.337785\\\\\n\t4 & 121\\_at & paired box 8 & PAX8 & 0.02301084 & 1.0581847 & 0.87166663 & 0.38729816 & 0.7236528 & -5.968512\\\\\n\t5 & 1255\\_g\\_at & guanylate cyclase activator 1A & GUCA1A & 0.36999950 & 1.4080351 & 1.78615022 & 0.07976123 & 0.3351480 & -4.812134\\\\\n\t6 & 1294\\_at & ubiquitin like modifier activating enzyme 7 & UBA7 & -0.11221434 & 1.0859983 & -1.61593670 & 0.11200995 & 0.3925252 & -5.082923\\\\\n\\end{tabular}\n", "text/plain": " PROBEID GENENAME SYMBOL logFC \n1 1007_s_at discoidin domain receptor tyrosine kinase 1 DDR1 -0.23858465\n2 1053_at replication factor C subunit 2 RFC2 0.05830367\n3 117_at heat shock protein family A (Hsp70) member 6 HSPA6 -0.01138494\n4 121_at paired box 8 PAX8 0.02301084\n5 1255_g_at guanylate cyclase activator 1A GUCA1A 0.36999950\n6 1294_at ubiquitin like modifier activating enzyme 7 UBA7 -0.11221434\n AveExpr t P.Value adj.P.Val B \n1 1.0967772 -2.08257585 0.04210211 0.2531265 -4.284228\n2 0.9657758 1.42311356 0.16052793 0.4674726 -5.359907\n3 1.1501582 -0.08100885 0.93573821 0.9861536 -6.337785\n4 1.0581847 0.87166663 0.38729816 0.7236528 -5.968512\n5 1.4080351 1.78615022 0.07976123 0.3351480 -4.812134\n6 1.0859983 -1.61593670 0.11200995 0.3925252 -5.082923" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Remove NA gene symbol\n", "DE.df = DE.df[!is.na(DE.df$SYMBOL),]\n", "# Remove duplicated genes\n", "DE.df = DE.df[!duplicated(DE.df$SYMBOL,fromLast=FALSE),]\n", "head(DE.df)" ] }, { "cell_type": "markdown", "id": "adf678d9", "metadata": {}, "source": [ "At the result, we obtain the new DE table with two more columns containing gene names and gene symbols. The use of this DE table can be varied based on the selected enrichment analysis tools." ] }, { "cell_type": "markdown", "id": "8538d33d", "metadata": {}, "source": [ "## Enrichment analysis using Over-representation Analysis\n", "Over-representation analysis (ORA) is a statistical method that determines whether genes from pre-defined gene set of a specific GO term or KEGG pathway are presented more than would be expected (over-represented) in a subset of your data. In our learning module, this subset refers to the list of DE gene generated from `limma` method. For each gene set, an enrichment *p-value* is calculated using the Binomial distribution, Hypergeometric distribution, the Fisher exact test, or the Chi-square test. Hypergeometric distribution is a popular approach used to calculate enrichment p-value. The formula can be presented as follows:" ] }, { "cell_type": "markdown", "id": "eca231f2", "metadata": {}, "source": [ "$$\n", " P(X\\geq x) = 1 - P(X \\leq x-1) = 1 - \\sum\\limits_{i=0}^{x-1}\\frac{\\hphantom{}{M \\choose i }{N - M \\choose n-i}}{N \\choose n}\n", "$$" ] }, { "cell_type": "markdown", "id": "1c18d887", "metadata": {}, "source": [ "where *N* is the number of background genes (all genes presented in the expression matrix), *n* is the number of “interesting” genes (DE genes), *M* is the number of genes that are annotated to a particular gene set *S* (list of genes in a specific KEGG pathway or GO term), and *x* is the number of “interesting” genes that are annotated to *S* (genes presented in DE genes list and a specific KEGG pathway or GO term)." ] }, { "cell_type": "markdown", "id": "ccade46c", "metadata": {}, "source": [ "For example, suppose we have an expression matrix with 20000 genes, of which 500 are differently expressed. Also suppose that 100 of the 20000 genes are annotated to a particular gene set S. Of these 100 genes, 20 are members of DE genes list. The probability that 20 or more (up to 100) genes annotated to S are in DE genes list by chance is given by" ] }, { "cell_type": "markdown", "id": "ed50cd53", "metadata": {}, "source": [ "$$\n", "P(X\\geq 20) = 1 - P(X \\leq 19) = 1-\\sum \\limits_{i=0}^{19}\\frac{\\hphantom{}{100 \\choose i}{20000 - 100 \\choose 500-i}}{20000 \\choose 500} = 5.26 \\times 10^{-13}\n", "$$" ] }, { "cell_type": "markdown", "id": "b2e2d72e", "metadata": {}, "source": [ "The *p-value* indicates it is very rare to observe 20 of the 100 genes from this set are in the DE genes list by chance." ] }, { "cell_type": "code", "execution_count": 7, "id": "16ad3c2a", "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": "" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "IRdisplay::display_html('')" ] }, { "cell_type": "markdown", "id": "e332d07b", "metadata": {}, "source": [ "### Data preparation\n", "To conduct enrichment analysis using ORA, there are several input data that we need to prepare. First, we need to select a set of genes that\n", "are significantly altered (*p-value < 0.05*) in the DE genes generated from `limma` method." ] }, { "cell_type": "code", "execution_count": 8, "id": "b1b28353", "metadata": {}, "outputs": [], "source": [ "# Selecting a list of significant DE genes\n", "DEGenes <- DE.df[DE.df$adj.P.Val <= 0.05,]\n", "# Select genes with symbol\n", "DEGenes <- DEGenes$SYMBOL" ] }, { "cell_type": "markdown", "id": "f0d9f75f", "metadata": {}, "source": [ "Next, we need to define a list of background genes. In this analysis, they are all the genes generated from the DE analysis." ] }, { "cell_type": "code", "execution_count": 9, "id": "303d3696", "metadata": {}, "outputs": [], "source": [ "#Defining background genes\n", "backgroundSet <- DE.df$SYMBOL" ] }, { "cell_type": "markdown", "id": "5f19e685", "metadata": {}, "source": [ "Then, we need to obtain a list of geneset from knowledge databases such as GO and KEGG. In this learning module, the geneset will be retrieved from\n", "the *.gmt* files that were processed from the [**submodule 03**](./Module03-Gene_Set_and_Pathway.ipynb). To load the geneset, we will use `gmt2geneset`\n", "below:" ] }, { "cell_type": "code", "execution_count": 11, "id": "d05545e7", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Loading required package: tidyverse\n", "\n", "── \u001B[1mAttaching core tidyverse packages\u001B[22m ──────────────────────── tidyverse 2.0.0 ──\n", "\u001B[32m✔\u001B[39m \u001B[34mdplyr \u001B[39m 1.1.0 \u001B[32m✔\u001B[39m \u001B[34mreadr \u001B[39m 2.1.4\n", "\u001B[32m✔\u001B[39m \u001B[34mforcats \u001B[39m 1.0.0 \u001B[32m✔\u001B[39m \u001B[34mstringr \u001B[39m 1.5.0\n", "\u001B[32m✔\u001B[39m \u001B[34mggplot2 \u001B[39m 3.4.1 \u001B[32m✔\u001B[39m \u001B[34mtibble \u001B[39m 3.1.8\n", "\u001B[32m✔\u001B[39m \u001B[34mlubridate\u001B[39m 1.9.2 \u001B[32m✔\u001B[39m \u001B[34mtidyr \u001B[39m 1.3.0\n", "\u001B[32m✔\u001B[39m \u001B[34mpurrr \u001B[39m 1.0.1 \n", "── \u001B[1mConflicts\u001B[22m ────────────────────────────────────────── tidyverse_conflicts() ──\n", "\u001B[31m✖\u001B[39m \u001B[34mlubridate\u001B[39m::\u001B[32m%within%()\u001B[39m masks \u001B[34mIRanges\u001B[39m::%within%()\n", "\u001B[31m✖\u001B[39m \u001B[34mdplyr\u001B[39m::\u001B[32mcollapse()\u001B[39m masks \u001B[34mIRanges\u001B[39m::collapse()\n", "\u001B[31m✖\u001B[39m \u001B[34mdplyr\u001B[39m::\u001B[32mcombine()\u001B[39m masks \u001B[34mBiobase\u001B[39m::combine(), \u001B[34mBiocGenerics\u001B[39m::combine()\n", "\u001B[31m✖\u001B[39m \u001B[34mdplyr\u001B[39m::\u001B[32mdesc()\u001B[39m masks \u001B[34mIRanges\u001B[39m::desc()\n", "\u001B[31m✖\u001B[39m \u001B[34mtidyr\u001B[39m::\u001B[32mexpand()\u001B[39m masks \u001B[34mS4Vectors\u001B[39m::expand()\n", "\u001B[31m✖\u001B[39m \u001B[34mdplyr\u001B[39m::\u001B[32mfilter()\u001B[39m masks \u001B[34mstats\u001B[39m::filter()\n", "\u001B[31m✖\u001B[39m \u001B[34mdplyr\u001B[39m::\u001B[32mfirst()\u001B[39m masks \u001B[34mS4Vectors\u001B[39m::first()\n", "\u001B[31m✖\u001B[39m \u001B[34mdplyr\u001B[39m::\u001B[32mlag()\u001B[39m masks \u001B[34mstats\u001B[39m::lag()\n", "\u001B[31m✖\u001B[39m \u001B[34mggplot2\u001B[39m::\u001B[32mPosition()\u001B[39m masks \u001B[34mBiocGenerics\u001B[39m::Position(), \u001B[34mbase\u001B[39m::Position()\n", "\u001B[31m✖\u001B[39m \u001B[34mpurrr\u001B[39m::\u001B[32mreduce()\u001B[39m masks \u001B[34mIRanges\u001B[39m::reduce()\n", "\u001B[31m✖\u001B[39m \u001B[34mdplyr\u001B[39m::\u001B[32mrename()\u001B[39m masks \u001B[34mS4Vectors\u001B[39m::rename()\n", "\u001B[31m✖\u001B[39m \u001B[34mlubridate\u001B[39m::\u001B[32msecond()\u001B[39m masks \u001B[34mS4Vectors\u001B[39m::second()\n", "\u001B[31m✖\u001B[39m \u001B[34mlubridate\u001B[39m::\u001B[32msecond<-()\u001B[39m masks \u001B[34mS4Vectors\u001B[39m::second<-()\n", "\u001B[31m✖\u001B[39m \u001B[34mdplyr\u001B[39m::\u001B[32mselect()\u001B[39m masks \u001B[34mAnnotationDbi\u001B[39m::select()\n", "\u001B[31m✖\u001B[39m \u001B[34mdplyr\u001B[39m::\u001B[32mslice()\u001B[39m masks \u001B[34mIRanges\u001B[39m::slice()\n", "\u001B[36mℹ\u001B[39m Use the conflicted package (\u001B[3m\u001B[34m\u001B[39m\u001B[23m) to force all conflicts to become errors\n" ] } ], "source": [ "# install tidyverse\n", "suppressWarnings(if (!require(\"tidyverse\")) install.packages(\"tidyverse\"))" ] }, { "cell_type": "code", "execution_count": 12, "id": "79cc3d74", "metadata": {}, "outputs": [], "source": [ "# Loading tidyverse library that provides a function to read the .gmt file\n", "suppressMessages({\n", " library(tidyverse)\n", "})" ] }, { "cell_type": "markdown", "id": "0042697a", "metadata": {}, "source": [ "Here, we also write a function to perform over representation analysis based on the hyper-geometric testing formula presented above. The `ORA` method will perform\n", "hyper-geometric testing for each geneset obtained from GO or KEGG using the function `phyper` available for `stats` R base package. The output of the `ORA` function is the table that\n", "contains a column of terms or pathway names and a column of *p-value*." ] }, { "cell_type": "code", "execution_count": 13, "id": "38686455", "metadata": {}, "outputs": [], "source": [ "# A customized function to prase a gmt file to a list of genesets\n", "gmt2geneset <- function(path){\n", " genesets <- read_tsv(path, col_names = F) %>% apply(MARGIN = 1, function(r){\n", " genes = unique(r[-(1:2)])\n", " list(\n", " id = r[1],\n", " description = r[2],\n", " genes = genes[!is.na(genes)]\n", " )\n", " })\n", "\n", " gs <- lapply(genesets, function(g) g$genes %>% as.character())\n", " names(gs) <- lapply(genesets, function(g) g$description)\n", " gs\n", "}" ] }, { "cell_type": "code", "execution_count": 14, "id": "d809f4b3", "metadata": {}, "outputs": [], "source": [ "ORA <- function(geneset,DEGenes,backgroundSet,DE.df){\n", " res <- sapply(geneset, function(gs){\n", " wBallDraw <- intersect(gs, DEGenes) %>% length() - 1\n", " if (wBallDraw < 0) return(1)\n", " wBall <- length(DEGenes)\n", " bBall <- nrow(DE.df) - length(DEGenes)\n", " ballDraw <- length(intersect(gs, backgroundSet))\n", " 1 - phyper(wBallDraw, wBall, bBall, ballDraw)\n", " })\n", " res\n", "}" ] }, { "cell_type": "markdown", "id": "dedfa2a3", "metadata": {}, "source": [ "### Enrichment analysis using ORA and GO terms\n", "In this section, we will perform ORA using genesets obtained from the GO database and the function `ORA` defined above. The detailed code is presented below:" ] }, { "cell_type": "code", "execution_count": 15, "id": "975e07c7", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A data.frame: 6 × 2
GOtermspvalue
<chr><dbl>
positive regulation of B cell activationpositive regulation of B cell activation 0.0005237933
inner dynein arm assemblyinner dynein arm assembly 0.0010578236
cell activation involved in immune responsecell activation involved in immune response 0.0062357297
leukocyte activation involved in immune responseleukocyte activation involved in immune response 0.0062357297
immunoglobulin production involved in immunoglobulin-mediated immune responseimmunoglobulin production involved in immunoglobulin-mediated immune response0.0062357297
positive regulation of leukocyte activationpositive regulation of leukocyte activation 0.0062357297
\n", "text/markdown": "\nA data.frame: 6 × 2\n\n| | GOterms <chr> | pvalue <dbl> |\n|---|---|---|\n| positive regulation of B cell activation | positive regulation of B cell activation | 0.0005237933 |\n| inner dynein arm assembly | inner dynein arm assembly | 0.0010578236 |\n| cell activation involved in immune response | cell activation involved in immune response | 0.0062357297 |\n| leukocyte activation involved in immune response | leukocyte activation involved in immune response | 0.0062357297 |\n| immunoglobulin production involved in immunoglobulin-mediated immune response | immunoglobulin production involved in immunoglobulin-mediated immune response | 0.0062357297 |\n| positive regulation of leukocyte activation | positive regulation of leukocyte activation | 0.0062357297 |\n\n", "text/latex": "A data.frame: 6 × 2\n\\begin{tabular}{r|ll}\n & GOterms & pvalue\\\\\n & & \\\\\n\\hline\n\tpositive regulation of B cell activation & positive regulation of B cell activation & 0.0005237933\\\\\n\tinner dynein arm assembly & inner dynein arm assembly & 0.0010578236\\\\\n\tcell activation involved in immune response & cell activation involved in immune response & 0.0062357297\\\\\n\tleukocyte activation involved in immune response & leukocyte activation involved in immune response & 0.0062357297\\\\\n\timmunoglobulin production involved in immunoglobulin-mediated immune response & immunoglobulin production involved in immunoglobulin-mediated immune response & 0.0062357297\\\\\n\tpositive regulation of leukocyte activation & positive regulation of leukocyte activation & 0.0062357297\\\\\n\\end{tabular}\n", "text/plain": " GOterms \npositive regulation of B cell activation positive regulation of B cell activation \ninner dynein arm assembly inner dynein arm assembly \ncell activation involved in immune response cell activation involved in immune response \nleukocyte activation involved in immune response leukocyte activation involved in immune response \nimmunoglobulin production involved in immunoglobulin-mediated immune response immunoglobulin production involved in immunoglobulin-mediated immune response\npositive regulation of leukocyte activation positive regulation of leukocyte activation \n pvalue \npositive regulation of B cell activation 0.0005237933\ninner dynein arm assembly 0.0010578236\ncell activation involved in immune response 0.0062357297\nleukocyte activation involved in immune response 0.0062357297\nimmunoglobulin production involved in immunoglobulin-mediated immune response 0.0062357297\npositive regulation of leukocyte activation 0.0062357297" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Loading geneset from GO database\n", "suppressWarnings({suppressMessages({geneset <- gmt2geneset(\"./data/GO_terms.gmt\")})})\n", "# Perform ORA\n", "res.ORA <- ORA(geneset,DEGenes,backgroundSet,DE.df)\n", "# Save the result to a table where the first column is GO term name and the second column is the p-value\n", "res.df <- data.frame(\n", " GOterms = names(res.ORA),\n", " pvalue = res.ORA\n", ")\n", "# Order the table based on the p-value\n", "res.df <- res.df[order(res.df$pvalue),]\n", "# View the most significant GO terms\n", "head(res.df)" ] }, { "cell_type": "markdown", "id": "ae0d8278", "metadata": {}, "source": [ "Fromt the result table we might conclude that the cause of the disease may be related to `positive regulation of B cell activation`." ] }, { "cell_type": "markdown", "id": "cfa3dbd7", "metadata": {}, "source": [ "### Enrichment analysis using ORA and KEGG pathways" ] }, { "cell_type": "code", "execution_count": 16, "id": "7c31dbde", "metadata": {}, "outputs": [], "source": [ "# Loading the KEGG pathways\n", "suppressWarnings({suppressMessages({geneset <- gmt2geneset(\"./data/KEGG_pathways.gmt\")})})" ] }, { "cell_type": "code", "execution_count": 21, "id": "ee2d6ff9", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A data.frame: 6 × 2
pathwayspvalue
<chr><dbl>
Purine metabolism - Homo sapiens (human)Purine metabolism - Homo sapiens (human) 0.03829845
AMPK signaling pathway - Homo sapiens (human)AMPK signaling pathway - Homo sapiens (human) 0.03979454
Complement and coagulation cascades - Homo sapiens (human)Complement and coagulation cascades - Homo sapiens (human)0.03979454
Primary immunodeficiency - Homo sapiens (human)Primary immunodeficiency - Homo sapiens (human) 0.06663166
Proteasome - Homo sapiens (human)Proteasome - Homo sapiens (human) 0.09342446
Virion - Herpesvirus - Homo sapiens (human)Virion - Herpesvirus - Homo sapiens (human) 0.09822352
\n", "text/markdown": "\nA data.frame: 6 × 2\n\n| | pathways <chr> | pvalue <dbl> |\n|---|---|---|\n| Purine metabolism - Homo sapiens (human) | Purine metabolism - Homo sapiens (human) | 0.03829845 |\n| AMPK signaling pathway - Homo sapiens (human) | AMPK signaling pathway - Homo sapiens (human) | 0.03979454 |\n| Complement and coagulation cascades - Homo sapiens (human) | Complement and coagulation cascades - Homo sapiens (human) | 0.03979454 |\n| Primary immunodeficiency - Homo sapiens (human) | Primary immunodeficiency - Homo sapiens (human) | 0.06663166 |\n| Proteasome - Homo sapiens (human) | Proteasome - Homo sapiens (human) | 0.09342446 |\n| Virion - Herpesvirus - Homo sapiens (human) | Virion - Herpesvirus - Homo sapiens (human) | 0.09822352 |\n\n", "text/latex": "A data.frame: 6 × 2\n\\begin{tabular}{r|ll}\n & pathways & pvalue\\\\\n & & \\\\\n\\hline\n\tPurine metabolism - Homo sapiens (human) & Purine metabolism - Homo sapiens (human) & 0.03829845\\\\\n\tAMPK signaling pathway - Homo sapiens (human) & AMPK signaling pathway - Homo sapiens (human) & 0.03979454\\\\\n\tComplement and coagulation cascades - Homo sapiens (human) & Complement and coagulation cascades - Homo sapiens (human) & 0.03979454\\\\\n\tPrimary immunodeficiency - Homo sapiens (human) & Primary immunodeficiency - Homo sapiens (human) & 0.06663166\\\\\n\tProteasome - Homo sapiens (human) & Proteasome - Homo sapiens (human) & 0.09342446\\\\\n\tVirion - Herpesvirus - Homo sapiens (human) & Virion - Herpesvirus - Homo sapiens (human) & 0.09822352\\\\\n\\end{tabular}\n", "text/plain": " pathways \nPurine metabolism - Homo sapiens (human) Purine metabolism - Homo sapiens (human) \nAMPK signaling pathway - Homo sapiens (human) AMPK signaling pathway - Homo sapiens (human) \nComplement and coagulation cascades - Homo sapiens (human) Complement and coagulation cascades - Homo sapiens (human)\nPrimary immunodeficiency - Homo sapiens (human) Primary immunodeficiency - Homo sapiens (human) \nProteasome - Homo sapiens (human) Proteasome - Homo sapiens (human) \nVirion - Herpesvirus - Homo sapiens (human) Virion - Herpesvirus - Homo sapiens (human) \n pvalue \nPurine metabolism - Homo sapiens (human) 0.03829845\nAMPK signaling pathway - Homo sapiens (human) 0.03979454\nComplement and coagulation cascades - Homo sapiens (human) 0.03979454\nPrimary immunodeficiency - Homo sapiens (human) 0.06663166\nProteasome - Homo sapiens (human) 0.09342446\nVirion - Herpesvirus - Homo sapiens (human) 0.09822352" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Perform Hyper-geometric testing\n", "res.ORA <- ORA(geneset,DEGenes,backgroundSet,DE.df)\n", "# Save the results to a data frame\n", "res.df <- data.frame(\n", " pathways = names(res.ORA ),\n", " pvalue = res.ORA\n", ")\n", "\n", "res.df <- res.df[order(res.df$pvalue),]\n", "head(res.df)" ] }, { "cell_type": "markdown", "id": "9aa0e1c7", "metadata": {}, "source": [ "## Enrichment Analysis using FGSEA" ] }, { "cell_type": "markdown", "id": "47b46d66", "metadata": {}, "source": [ "This submodule describes `FGSEA`, one of the methods for evaluating pathway enrichment in transcriptional data and it stands for Fast preranked Gene Set Enrichment Analysis (GSEA). `FGSEA` quickly calculates arbitrarily low GSEA P-values for a collection of gene sets and is based on an algorithm that allows it to make more permutations and get accurate *p-values*.\n", "It extends the GSEA algorithm which calculates the enrichment score (the degree to which a set S is over-represented at the top or bottom of the ranked list L), estimates the p-value of the Enrichment Score using a permutation test and adjusts the estimated significance level to account for multiple hypotheses in addition to calculating the q-values for FDR control. Typically, GSEA requires inputs of a list of gene sets (GO term or pathway with a set of genes), a vector DE genes with statistic. In addition, user can limit the number of terms or pathways of interest by adjusting `minSize` and `maxSize` parameters. The code to install and load FGSEA R package is shown below:" ] }, { "cell_type": "code", "execution_count": 18, "id": "b9702a89", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning message:\n", "\"package 'BiocManager' was built under R version 4.2.2\"\n" ] } ], "source": [ "# To perform enrichment analysis using FGSEA, we first install the fgsea package\n", "suppressMessages({if (!require(\"BiocManager\", quietly = TRUE))\n", " install.packages(\"BiocManager\")\n", " suppressWarnings(BiocManager::install(\"fgsea\", update = F))\n", "})\n", "\n", "# Loading the package\n", "suppressPackageStartupMessages({\n", " library(\"fgsea\")\n", "})" ] }, { "cell_type": "code", "execution_count": 19, "id": "dbae3297", "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": "" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Run the following command to take the quiz\n", "IRdisplay::display_html('')" ] }, { "cell_type": "markdown", "id": "fb6f9407", "metadata": {}, "source": [ "Next, we need to prepare a vector of DE genes with its statistic." ] }, { "cell_type": "code", "execution_count": 20, "id": "38d25313", "metadata": {}, "outputs": [ { "data": { "text/html": "
DDR1
0.25312654919025
RFC2
0.467472580609517
HSPA6
0.986153555292704
PAX8
0.723652752171903
GUCA1A
0.335147977832318
UBA7
0.392525231374342
\n", "text/markdown": "DDR1\n: 0.25312654919025RFC2\n: 0.467472580609517HSPA6\n: 0.986153555292704PAX8\n: 0.723652752171903GUCA1A\n: 0.335147977832318UBA7\n: 0.392525231374342\n\n", "text/latex": "\\begin{description*}\n\\item[DDR1] 0.25312654919025\n\\item[RFC2] 0.467472580609517\n\\item[HSPA6] 0.986153555292704\n\\item[PAX8] 0.723652752171903\n\\item[GUCA1A] 0.335147977832318\n\\item[UBA7] 0.392525231374342\n\\end{description*}\n", "text/plain": " DDR1 RFC2 HSPA6 PAX8 GUCA1A UBA7 \n0.2531265 0.4674726 0.9861536 0.7236528 0.3351480 0.3925252 " }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Get the gene list and their statistic from DE results\n", "stats = DE.df$adj.P.Val\n", "names(stats) = DE.df$SYMBOL\n", "head(stats)" ] }, { "cell_type": "markdown", "id": "9950a6f6", "metadata": {}, "source": [ "### Enrichment analysis using FGSEA and GO terms" ] }, { "cell_type": "markdown", "id": "c5093c0c", "metadata": {}, "source": [ "The package `fgsea` has its own function named `gmtPathways` to load the genesets from the `gmt` file. It is recommended to use this function for compatibility. We can load\n", "GO terms geneset and view the first five GO terms with associated genes using the following command:" ] }, { "cell_type": "code", "execution_count": 85, "id": "b2d3d20a", "metadata": {}, "outputs": [ { "data": { "text/html": "
\n\t
$`GO:0000002`
\n\t\t
\n
  1. 'AKT3'
  2. 'DNA2'
  3. 'DNAJA3'
  4. 'ENDOG'
  5. 'FLCN'
  6. 'LIG3'
\n
\n\t
$`GO:0000003`
\n\t\t
\n
  1. 'A1CF'
  2. 'A2M'
  3. 'AAAS'
  4. 'ABAT'
  5. 'ABCC8'
  6. 'ABHD2'
\n
\n\t
$`GO:0000012`
\n\t\t
\n
  1. 'APLF'
  2. 'APTX'
  3. 'ERCC6'
  4. 'ERCC8'
  5. 'LIG4'
  6. 'PARP1'
\n
\n\t
$`GO:0000018`
\n\t\t
\n
  1. 'ACTB'
  2. 'ACTL6A'
  3. 'ACTR2'
  4. 'ALYREF'
  5. 'ANKLE1'
  6. 'APLF'
\n
\n\t
$`GO:0000027`
\n\t\t
\n
  1. 'BOP1'
  2. 'BRIX1'
  3. 'DDX28'
  4. 'DHX30'
  5. 'FASTKD2'
  6. 'MDN1'
\n
\n
\n", "text/markdown": "$`GO:0000002`\n: 1. 'AKT3'\n2. 'DNA2'\n3. 'DNAJA3'\n4. 'ENDOG'\n5. 'FLCN'\n6. 'LIG3'\n\n\n\n$`GO:0000003`\n: 1. 'A1CF'\n2. 'A2M'\n3. 'AAAS'\n4. 'ABAT'\n5. 'ABCC8'\n6. 'ABHD2'\n\n\n\n$`GO:0000012`\n: 1. 'APLF'\n2. 'APTX'\n3. 'ERCC6'\n4. 'ERCC8'\n5. 'LIG4'\n6. 'PARP1'\n\n\n\n$`GO:0000018`\n: 1. 'ACTB'\n2. 'ACTL6A'\n3. 'ACTR2'\n4. 'ALYREF'\n5. 'ANKLE1'\n6. 'APLF'\n\n\n\n$`GO:0000027`\n: 1. 'BOP1'\n2. 'BRIX1'\n3. 'DDX28'\n4. 'DHX30'\n5. 'FASTKD2'\n6. 'MDN1'\n\n\n\n\n\n", "text/latex": "\\begin{description}\n\\item[\\$`GO:0000002`] \\begin{enumerate*}\n\\item 'AKT3'\n\\item 'DNA2'\n\\item 'DNAJA3'\n\\item 'ENDOG'\n\\item 'FLCN'\n\\item 'LIG3'\n\\end{enumerate*}\n\n\\item[\\$`GO:0000003`] \\begin{enumerate*}\n\\item 'A1CF'\n\\item 'A2M'\n\\item 'AAAS'\n\\item 'ABAT'\n\\item 'ABCC8'\n\\item 'ABHD2'\n\\end{enumerate*}\n\n\\item[\\$`GO:0000012`] \\begin{enumerate*}\n\\item 'APLF'\n\\item 'APTX'\n\\item 'ERCC6'\n\\item 'ERCC8'\n\\item 'LIG4'\n\\item 'PARP1'\n\\end{enumerate*}\n\n\\item[\\$`GO:0000018`] \\begin{enumerate*}\n\\item 'ACTB'\n\\item 'ACTL6A'\n\\item 'ACTR2'\n\\item 'ALYREF'\n\\item 'ANKLE1'\n\\item 'APLF'\n\\end{enumerate*}\n\n\\item[\\$`GO:0000027`] \\begin{enumerate*}\n\\item 'BOP1'\n\\item 'BRIX1'\n\\item 'DDX28'\n\\item 'DHX30'\n\\item 'FASTKD2'\n\\item 'MDN1'\n\\end{enumerate*}\n\n\\end{description}\n", "text/plain": "$`GO:0000002`\n[1] \"AKT3\" \"DNA2\" \"DNAJA3\" \"ENDOG\" \"FLCN\" \"LIG3\" \n\n$`GO:0000003`\n[1] \"A1CF\" \"A2M\" \"AAAS\" \"ABAT\" \"ABCC8\" \"ABHD2\"\n\n$`GO:0000012`\n[1] \"APLF\" \"APTX\" \"ERCC6\" \"ERCC8\" \"LIG4\" \"PARP1\"\n\n$`GO:0000018`\n[1] \"ACTB\" \"ACTL6A\" \"ACTR2\" \"ALYREF\" \"ANKLE1\" \"APLF\" \n\n$`GO:0000027`\n[1] \"BOP1\" \"BRIX1\" \"DDX28\" \"DHX30\" \"FASTKD2\" \"MDN1\" \n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Load the pathways into a named list\n", "GO_term_hallmark <- gmtPathways(\"./data/GO_terms.gmt\")\n", "# Show the first few GO terms, and within those, show only the first few genes.\n", "tmp = lapply(GO_term_hallmark,head)\n", "tmp[1:5]" ] }, { "cell_type": "markdown", "id": "d06027d9", "metadata": {}, "source": [ "Running the FGSEA can be done by calling the `fgsea` with two required inputs." ] }, { "cell_type": "code", "execution_count": 86, "id": "6efd9f83", "metadata": {}, "outputs": [], "source": [ "# Set seed for reproducibility\n", "set.seed(1)\n", "# Running fgsea\n", "suppressWarnings(fgseaRes <- fgsea(pathways = GO_term_hallmark,\n", " stats = stats\n", " ))" ] }, { "cell_type": "markdown", "id": "ad26fa54", "metadata": {}, "source": [ "The output of the FGSEA method is a table where row are GO terms IDs or pathway IDs. The columns are *p-values*, *adjusted p-values*, *Enrichment Score*, etc." ] }, { "cell_type": "code", "execution_count": 87, "id": "f90ac106", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A data.table: 6 × 7
pathwaypvalpadjlog2errESNESsize
<chr><dbl><dbl><dbl><dbl><dbl><int>
GO:00509071.160144e-050.079609110.59332550.37864061.577494132
GO:00509115.922388e-050.150945990.55733220.39260741.597791 94
GO:00095936.599213e-050.150945990.53843410.35267331.488034167
GO:00308501.133702e-040.194486540.53843410.45852051.746790 51
GO:00509061.643773e-040.215580620.51884810.32742741.399464202
GO:00069592.051876e-040.215580620.51884810.31600591.370283271
\n", "text/markdown": "\nA data.table: 6 × 7\n\n| pathway <chr> | pval <dbl> | padj <dbl> | log2err <dbl> | ES <dbl> | NES <dbl> | size <int> |\n|---|---|---|---|---|---|---|\n| GO:0050907 | 1.160144e-05 | 0.07960911 | 0.5933255 | 0.3786406 | 1.577494 | 132 |\n| GO:0050911 | 5.922388e-05 | 0.15094599 | 0.5573322 | 0.3926074 | 1.597791 | 94 |\n| GO:0009593 | 6.599213e-05 | 0.15094599 | 0.5384341 | 0.3526733 | 1.488034 | 167 |\n| GO:0030850 | 1.133702e-04 | 0.19448654 | 0.5384341 | 0.4585205 | 1.746790 | 51 |\n| GO:0050906 | 1.643773e-04 | 0.21558062 | 0.5188481 | 0.3274274 | 1.399464 | 202 |\n| GO:0006959 | 2.051876e-04 | 0.21558062 | 0.5188481 | 0.3160059 | 1.370283 | 271 |\n\n", "text/latex": "A data.table: 6 × 7\n\\begin{tabular}{lllllll}\n pathway & pval & padj & log2err & ES & NES & size\\\\\n & & & & & & \\\\\n\\hline\n\t GO:0050907 & 1.160144e-05 & 0.07960911 & 0.5933255 & 0.3786406 & 1.577494 & 132\\\\\n\t GO:0050911 & 5.922388e-05 & 0.15094599 & 0.5573322 & 0.3926074 & 1.597791 & 94\\\\\n\t GO:0009593 & 6.599213e-05 & 0.15094599 & 0.5384341 & 0.3526733 & 1.488034 & 167\\\\\n\t GO:0030850 & 1.133702e-04 & 0.19448654 & 0.5384341 & 0.4585205 & 1.746790 & 51\\\\\n\t GO:0050906 & 1.643773e-04 & 0.21558062 & 0.5188481 & 0.3274274 & 1.399464 & 202\\\\\n\t GO:0006959 & 2.051876e-04 & 0.21558062 & 0.5188481 & 0.3160059 & 1.370283 & 271\\\\\n\\end{tabular}\n", "text/plain": " pathway pval padj log2err ES NES size\n1 GO:0050907 1.160144e-05 0.07960911 0.5933255 0.3786406 1.577494 132 \n2 GO:0050911 5.922388e-05 0.15094599 0.5573322 0.3926074 1.597791 94 \n3 GO:0009593 6.599213e-05 0.15094599 0.5384341 0.3526733 1.488034 167 \n4 GO:0030850 1.133702e-04 0.19448654 0.5384341 0.4585205 1.746790 51 \n5 GO:0050906 1.643773e-04 0.21558062 0.5188481 0.3274274 1.399464 202 \n6 GO:0006959 2.051876e-04 0.21558062 0.5188481 0.3160059 1.370283 271 " }, "metadata": {}, "output_type": "display_data" } ], "source": [ "head(fgseaRes[order(pval), ][,-8])" ] }, { "cell_type": "markdown", "id": "c7866448", "metadata": {}, "source": [ "From the result table, we can select top five up regulated GO terms and top five down regulated GO terms. Then we can plot them using the built-in function `plotGseaTable`" ] }, { "cell_type": "code", "execution_count": 88, "id": "f1b4ed14", "metadata": {}, "outputs": [ { "data": { "text/plain": "plot without title", "image/png": "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\nEr5aDAveFNQAAAAASUVORK5CYII=" }, "metadata": { "image/png": { "width": 420, "height": 420 } }, "output_type": "display_data" } ], "source": [ "topGOUp <- fgseaRes[ES > 0][head(order(pval), n=5), pathway]\n", "topGODown <- fgseaRes[ES < 0][head(order(pval), n=5), pathway]\n", "topGO <- c(topGOUp, rev(topGODown))\n", "plotGseaTable(GO_term_hallmark[topGO], stats, fgseaRes,\n", " gseaParam=0.5)" ] }, { "cell_type": "markdown", "id": "1ef50627", "metadata": {}, "source": [ "### Enrichment analysis using FGSEA and KEGG pathways\n", "We can perform enrichment analysis using FGSEA with KEGG pathway using the same procedure mentioned above. The only thing we need to change is the\n", "list of geneset that available in KEGG database." ] }, { "cell_type": "code", "execution_count": 89, "id": "93b11008", "metadata": {}, "outputs": [ { "data": { "text/html": "
\n\t
$hsa00010
\n\t\t
\n
  1. 'HK3'
  2. 'HK1'
  3. 'HK2'
  4. 'HKDC1'
  5. 'GCK'
  6. 'GPI'
\n
\n\t
$hsa00020
\n\t\t
\n
  1. 'CS'
  2. 'ACLY'
  3. 'ACO2'
  4. 'ACO1'
  5. 'IDH1'
  6. 'IDH2'
\n
\n\t
$hsa00030
\n\t\t
\n
  1. 'GPI'
  2. 'G6PD'
  3. 'PGLS'
  4. 'H6PD'
  5. 'PGD'
  6. 'RPE'
\n
\n\t
$hsa00040
\n\t\t
\n
  1. 'GUSB'
  2. 'KL'
  3. 'UGT2A1'
  4. 'UGT2A3'
  5. 'UGT2B17'
  6. 'UGT2B11'
\n
\n\t
$hsa00051
\n\t\t
\n
  1. 'MPI'
  2. 'PMM2'
  3. 'PMM1'
  4. 'GMPPB'
  5. 'GMPPA'
  6. 'GMDS'
\n
\n
\n", "text/markdown": "$hsa00010\n: 1. 'HK3'\n2. 'HK1'\n3. 'HK2'\n4. 'HKDC1'\n5. 'GCK'\n6. 'GPI'\n\n\n\n$hsa00020\n: 1. 'CS'\n2. 'ACLY'\n3. 'ACO2'\n4. 'ACO1'\n5. 'IDH1'\n6. 'IDH2'\n\n\n\n$hsa00030\n: 1. 'GPI'\n2. 'G6PD'\n3. 'PGLS'\n4. 'H6PD'\n5. 'PGD'\n6. 'RPE'\n\n\n\n$hsa00040\n: 1. 'GUSB'\n2. 'KL'\n3. 'UGT2A1'\n4. 'UGT2A3'\n5. 'UGT2B17'\n6. 'UGT2B11'\n\n\n\n$hsa00051\n: 1. 'MPI'\n2. 'PMM2'\n3. 'PMM1'\n4. 'GMPPB'\n5. 'GMPPA'\n6. 'GMDS'\n\n\n\n\n\n", "text/latex": "\\begin{description}\n\\item[\\$hsa00010] \\begin{enumerate*}\n\\item 'HK3'\n\\item 'HK1'\n\\item 'HK2'\n\\item 'HKDC1'\n\\item 'GCK'\n\\item 'GPI'\n\\end{enumerate*}\n\n\\item[\\$hsa00020] \\begin{enumerate*}\n\\item 'CS'\n\\item 'ACLY'\n\\item 'ACO2'\n\\item 'ACO1'\n\\item 'IDH1'\n\\item 'IDH2'\n\\end{enumerate*}\n\n\\item[\\$hsa00030] \\begin{enumerate*}\n\\item 'GPI'\n\\item 'G6PD'\n\\item 'PGLS'\n\\item 'H6PD'\n\\item 'PGD'\n\\item 'RPE'\n\\end{enumerate*}\n\n\\item[\\$hsa00040] \\begin{enumerate*}\n\\item 'GUSB'\n\\item 'KL'\n\\item 'UGT2A1'\n\\item 'UGT2A3'\n\\item 'UGT2B17'\n\\item 'UGT2B11'\n\\end{enumerate*}\n\n\\item[\\$hsa00051] \\begin{enumerate*}\n\\item 'MPI'\n\\item 'PMM2'\n\\item 'PMM1'\n\\item 'GMPPB'\n\\item 'GMPPA'\n\\item 'GMDS'\n\\end{enumerate*}\n\n\\end{description}\n", "text/plain": "$hsa00010\n[1] \"HK3\" \"HK1\" \"HK2\" \"HKDC1\" \"GCK\" \"GPI\" \n\n$hsa00020\n[1] \"CS\" \"ACLY\" \"ACO2\" \"ACO1\" \"IDH1\" \"IDH2\"\n\n$hsa00030\n[1] \"GPI\" \"G6PD\" \"PGLS\" \"H6PD\" \"PGD\" \"RPE\" \n\n$hsa00040\n[1] \"GUSB\" \"KL\" \"UGT2A1\" \"UGT2A3\" \"UGT2B17\" \"UGT2B11\"\n\n$hsa00051\n[1] \"MPI\" \"PMM2\" \"PMM1\" \"GMPPB\" \"GMPPA\" \"GMDS\" \n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Load the pathways into a named list\n", "KEGG_hallmark <- gmtPathways(\"./data/KEGG_pathways.gmt\")\n", "# Show the first few GO terms, and within those, show only the first few genes.\n", "tmp = lapply(KEGG_hallmark,head)\n", "tmp[1:5]" ] }, { "cell_type": "code", "execution_count": 90, "id": "9eb1ede2", "metadata": {}, "outputs": [], "source": [ "# Set seed for reproducibility\n", "set.seed(1)\n", "# Running fgsea\n", "suppressWarnings(fgseaRes <- fgsea(pathways = KEGG_hallmark,\n", " stats = stats))" ] }, { "cell_type": "code", "execution_count": 91, "id": "cbe55bb6", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A data.table: 6 × 7
pathwaypvalpadjlog2errESNESsize
<chr><dbl><dbl><dbl><dbl><dbl><int>
hsa040602.356019e-060.00079162240.62725670.33849511.455766291
hsa047402.349394e-030.32114438690.43170770.34058581.396453132
hsa040612.867361e-030.32114438690.43170770.35256431.408411 98
hsa005006.600792e-030.55446651870.40701790.41816091.499026 36
hsa040809.789528e-030.65785630200.38073040.27753661.206519358
hsa043501.607110e-020.89998175430.35248790.32903701.312952 97
\n", "text/markdown": "\nA data.table: 6 × 7\n\n| pathway <chr> | pval <dbl> | padj <dbl> | log2err <dbl> | ES <dbl> | NES <dbl> | size <int> |\n|---|---|---|---|---|---|---|\n| hsa04060 | 2.356019e-06 | 0.0007916224 | 0.6272567 | 0.3384951 | 1.455766 | 291 |\n| hsa04740 | 2.349394e-03 | 0.3211443869 | 0.4317077 | 0.3405858 | 1.396453 | 132 |\n| hsa04061 | 2.867361e-03 | 0.3211443869 | 0.4317077 | 0.3525643 | 1.408411 | 98 |\n| hsa00500 | 6.600792e-03 | 0.5544665187 | 0.4070179 | 0.4181609 | 1.499026 | 36 |\n| hsa04080 | 9.789528e-03 | 0.6578563020 | 0.3807304 | 0.2775366 | 1.206519 | 358 |\n| hsa04350 | 1.607110e-02 | 0.8999817543 | 0.3524879 | 0.3290370 | 1.312952 | 97 |\n\n", "text/latex": "A data.table: 6 × 7\n\\begin{tabular}{lllllll}\n pathway & pval & padj & log2err & ES & NES & size\\\\\n & & & & & & \\\\\n\\hline\n\t hsa04060 & 2.356019e-06 & 0.0007916224 & 0.6272567 & 0.3384951 & 1.455766 & 291\\\\\n\t hsa04740 & 2.349394e-03 & 0.3211443869 & 0.4317077 & 0.3405858 & 1.396453 & 132\\\\\n\t hsa04061 & 2.867361e-03 & 0.3211443869 & 0.4317077 & 0.3525643 & 1.408411 & 98\\\\\n\t hsa00500 & 6.600792e-03 & 0.5544665187 & 0.4070179 & 0.4181609 & 1.499026 & 36\\\\\n\t hsa04080 & 9.789528e-03 & 0.6578563020 & 0.3807304 & 0.2775366 & 1.206519 & 358\\\\\n\t hsa04350 & 1.607110e-02 & 0.8999817543 & 0.3524879 & 0.3290370 & 1.312952 & 97\\\\\n\\end{tabular}\n", "text/plain": " pathway pval padj log2err ES NES size\n1 hsa04060 2.356019e-06 0.0007916224 0.6272567 0.3384951 1.455766 291 \n2 hsa04740 2.349394e-03 0.3211443869 0.4317077 0.3405858 1.396453 132 \n3 hsa04061 2.867361e-03 0.3211443869 0.4317077 0.3525643 1.408411 98 \n4 hsa00500 6.600792e-03 0.5544665187 0.4070179 0.4181609 1.499026 36 \n5 hsa04080 9.789528e-03 0.6578563020 0.3807304 0.2775366 1.206519 358 \n6 hsa04350 1.607110e-02 0.8999817543 0.3524879 0.3290370 1.312952 97 " }, "metadata": {}, "output_type": "display_data" } ], "source": [ "head(fgseaRes[order(pval), ][,-8])" ] }, { "cell_type": "code", "execution_count": 92, "id": "a63408eb", "metadata": {}, "outputs": [ { "data": { "text/plain": "plot without title", "image/png": "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\nIvA/nqQ05ArHWicAAAAASUVORK5CYII=" }, "metadata": { "image/png": { "width": 420, "height": 420 } }, "output_type": "display_data" } ], "source": [ "topPathwaysUp <- fgseaRes[ES > 0][head(order(pval), n=5), pathway]\n", "topPathwaysDown <- fgseaRes[ES < 0][head(order(pval), n=5), pathway]\n", "topPathways <- c(topPathwaysUp, rev(topPathwaysDown))\n", "#Viewing the 5 most significantly up-regulated and down-regulated pathways each with the FGSEA internal plot function\n", "plotGseaTable(KEGG_hallmark[topPathways], stats, fgseaRes,\n", " gseaParam=0.5)" ] }, { "cell_type": "markdown", "id": "181989b1", "metadata": {}, "source": [ "## Gene Set Enrichment Analysis using GSA" ] }, { "cell_type": "markdown", "id": "c2f471b1", "metadata": {}, "source": [ "Gene Set Analysis (GSA), an Enrichment Analysis, is a method that is commonly used to summarize high-dimensional gene expression data sets into sets according to its biological relevance. GSA takes the ranked gene lists from the initial stage of a gene expression analysis and aggregates the genes into sets based on shared biological or functional properties as specified by a reference knowledge base. Such databases often contain phenotype associations, molecular interactions and regulation and are referenced in the analysis of the resultant gene sets to find the relevance of the gene properties to the phenotype of interest." ] }, { "cell_type": "code", "execution_count": 34, "id": "0ab1469e", "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": "\r\n\r\n\r\n\r\n\r\nQuiz_Submodule4-4\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Run the following command to take the quiz\n", "IRdisplay::display_html('')" ] }, { "cell_type": "markdown", "id": "0f0c9233", "metadata": {}, "source": [ "### Data preparation\n", "The GSA method is freely available as standalone package in CRAN repository. We can use the following code to install the package." ] }, { "cell_type": "code", "execution_count": 35, "id": "c3efb930", "metadata": {}, "outputs": [], "source": [ "# Install GSA from CRAN\n", "suppressMessages({if (!require(\"GSA\"))\n", " suppressWarnings(install.packages(\"GSA\"))\n", "})\n", "suppressMessages({\n", " library(GSA)\n", "})" ] }, { "cell_type": "markdown", "id": "e4a2ed98", "metadata": {}, "source": [ "The GSA method require an expression matrix, a numeric vector containing class of each sample and a vector of genes the inputs. We can easily get those inputs by load the data that we processed in the [**Module 01** ](./Module01-GEO_Data_Processing.ipynb)." ] }, { "cell_type": "code", "execution_count": 36, "id": "3982c128", "metadata": {}, "outputs": [], "source": [ "# Loading expression data with groups\n", "data <- readRDS(\"./data/GSE48350.rds\")\n", "expression_data <- data$expression_data\n", "norm_expression_data <- data$norm_expression_data\n", "groups <- data$groups" ] }, { "cell_type": "markdown", "id": "ad173974", "metadata": {}, "source": [ "We can also use the sample approach available in the [**Module 01** ](./Module01-GEO_Data_Processing.ipynb) to map the probe IDs to gene symbols. The step-by-step coding instruction is shown below:" ] }, { "cell_type": "code", "execution_count": 37, "id": "e0d1acf4", "metadata": {}, "outputs": [], "source": [ "# Get the probe IDs\n", "expression_data$PROBEID <- rownames(expression_data)\n", "probeIDs <- rownames(expression_data)\n", "# Perform gene mapping\n", "suppressMessages({\n", " annotLookup <- AnnotationDbi::select(hgu133plus2.db, keys = probeIDs, columns = c('PROBEID', 'GENENAME', 'SYMBOL'))\n", "})\n", "# Merge DE result data frame with annotation table\n", "new_expression_data = merge(annotLookup, expression_data, by=\"PROBEID\")\n", "# Remove NA value\n", "new_expression_data <- new_expression_data[!is.na(new_expression_data$SYMBOL),]\n", "# Remove duplicated genes symbol\n", "new_expression_data <- new_expression_data[!duplicated(new_expression_data$SYMBOL,fromLast=FALSE),]\n", "rownames(new_expression_data) <- new_expression_data$SYMBOL\n", "# Drop PROBEID, GENENAME, and SYMBOL columns\n", "new_expression_data <- new_expression_data[,-c(1:3)]\n", "genenames= rownames(new_expression_data)" ] }, { "cell_type": "markdown", "id": "f8acf4f4", "metadata": {}, "source": [ "### GSA Enrichment analysis using GO terms\n", "Using data obtaiend from the previous step, we can run the GSA method by callinf the function `GSA`. We can reuse `GO_term_hallmark` and `KEGG_hallmark` loaded in FGSEA to perform analysis. The code details are shown below:" ] }, { "cell_type": "code", "execution_count": 53, "id": "e026aa03", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "perm= 10 / 200 \n", "perm= 20 / 200 \n", "perm= 30 / 200 \n", "perm= 40 / 200 \n", "perm= 50 / 200 \n", "perm= 60 / 200 \n", "perm= 70 / 200 \n", "perm= 80 / 200 \n", "perm= 90 / 200 \n", "perm= 100 / 200 \n", "perm= 110 / 200 \n", "perm= 120 / 200 \n", "perm= 130 / 200 \n", "perm= 140 / 200 \n", "perm= 150 / 200 \n", "perm= 160 / 200 \n", "perm= 170 / 200 \n", "perm= 180 / 200 \n", "perm= 190 / 200 \n", "perm= 200 / 200 \n" ] } ], "source": [ "# Getting\n", "genesets = GO_term_hallmark\n", "GSA.obj<-GSA(as.matrix(new_expression_data),as.numeric(groups$groups), genenames=genenames, genesets=genesets, resp.type=\"Two class unpaired\",nperms=100,random.seed=1)" ] }, { "cell_type": "code", "execution_count": 54, "id": "ebba9b67", "metadata": {}, "outputs": [], "source": [ "# List the results from a GSA analysis\n", "res <- GSA.listsets(GSA.obj, geneset.names=names(genesets),FDRcut=.5)" ] }, { "cell_type": "markdown", "id": "df55e53c", "metadata": {}, "source": [ "A table of the negative gene sets. “Negative” means that lower expression of most genes in the gene set correlates with higher values of the phenotype y. Eg for two classes coded 1,2, lower expression correlates with class 2.\n", "\n" ] }, { "cell_type": "markdown", "source": [ "
\n", " Please note that the output generated from GSA would be varied depending on R environment and software version. Especially, when the users run the scripts using\n", " User-managed Notebooks instances which have a preinstalled suite of packages.\n", "
" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 66, "id": "ae97649e", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A matrix: 6 × 5 of type chr
Gene_setGene_set_nameScorep-valueFDR
9 GO:0000045-0.374500
55 GO:0000422-0.543600
620GO:0006091-0.474300
631GO:0006120-1.193600
729GO:0006457-0.454600
785GO:0006605-0.450400
\n", "text/markdown": "\nA matrix: 6 × 5 of type chr\n\n| Gene_set | Gene_set_name | Score | p-value | FDR |\n|---|---|---|---|---|\n| 9 | GO:0000045 | -0.3745 | 0 | 0 |\n| 55 | GO:0000422 | -0.5436 | 0 | 0 |\n| 620 | GO:0006091 | -0.4743 | 0 | 0 |\n| 631 | GO:0006120 | -1.1936 | 0 | 0 |\n| 729 | GO:0006457 | -0.4546 | 0 | 0 |\n| 785 | GO:0006605 | -0.4504 | 0 | 0 |\n\n", "text/latex": "A matrix: 6 × 5 of type chr\n\\begin{tabular}{lllll}\n Gene\\_set & Gene\\_set\\_name & Score & p-value & FDR\\\\\n\\hline\n\t 9 & GO:0000045 & -0.3745 & 0 & 0\\\\\n\t 55 & GO:0000422 & -0.5436 & 0 & 0\\\\\n\t 620 & GO:0006091 & -0.4743 & 0 & 0\\\\\n\t 631 & GO:0006120 & -1.1936 & 0 & 0\\\\\n\t 729 & GO:0006457 & -0.4546 & 0 & 0\\\\\n\t 785 & GO:0006605 & -0.4504 & 0 & 0\\\\\n\\end{tabular}\n", "text/plain": " Gene_set Gene_set_name Score p-value FDR\n[1,] 9 GO:0000045 -0.3745 0 0 \n[2,] 55 GO:0000422 -0.5436 0 0 \n[3,] 620 GO:0006091 -0.4743 0 0 \n[4,] 631 GO:0006120 -1.1936 0 0 \n[5,] 729 GO:0006457 -0.4546 0 0 \n[6,] 785 GO:0006605 -0.4504 0 0 " }, "metadata": {}, "output_type": "display_data" } ], "source": [ "neg.table <-res$negative\n", "head(neg.table)" ] }, { "cell_type": "markdown", "id": "c237dea8", "metadata": {}, "source": [ "A table of the positive gene sets. \"Positive\" means that higher expression of most genes in the gene set correlates with higher values of the phenotype y." ] }, { "cell_type": "code", "execution_count": 41, "id": "e640ff47", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A matrix: 6 × 5 of type chr
Gene_setGene_set_nameScorep-valueFDR
1115GO:00074220.361 00
1215GO:00083600.362800
1688GO:00140370.688700
1689GO:00140440.95 00
1885GO:00171450.595500
2100GO:00220111.010300
\n", "text/markdown": "\nA matrix: 6 × 5 of type chr\n\n| Gene_set | Gene_set_name | Score | p-value | FDR |\n|---|---|---|---|---|\n| 1115 | GO:0007422 | 0.361 | 0 | 0 |\n| 1215 | GO:0008360 | 0.3628 | 0 | 0 |\n| 1688 | GO:0014037 | 0.6887 | 0 | 0 |\n| 1689 | GO:0014044 | 0.95 | 0 | 0 |\n| 1885 | GO:0017145 | 0.5955 | 0 | 0 |\n| 2100 | GO:0022011 | 1.0103 | 0 | 0 |\n\n", "text/latex": "A matrix: 6 × 5 of type chr\n\\begin{tabular}{lllll}\n Gene\\_set & Gene\\_set\\_name & Score & p-value & FDR\\\\\n\\hline\n\t 1115 & GO:0007422 & 0.361 & 0 & 0\\\\\n\t 1215 & GO:0008360 & 0.3628 & 0 & 0\\\\\n\t 1688 & GO:0014037 & 0.6887 & 0 & 0\\\\\n\t 1689 & GO:0014044 & 0.95 & 0 & 0\\\\\n\t 1885 & GO:0017145 & 0.5955 & 0 & 0\\\\\n\t 2100 & GO:0022011 & 1.0103 & 0 & 0\\\\\n\\end{tabular}\n", "text/plain": " Gene_set Gene_set_name Score p-value FDR\n[1,] 1115 GO:0007422 0.361 0 0 \n[2,] 1215 GO:0008360 0.3628 0 0 \n[3,] 1688 GO:0014037 0.6887 0 0 \n[4,] 1689 GO:0014044 0.95 0 0 \n[5,] 1885 GO:0017145 0.5955 0 0 \n[6,] 2100 GO:0022011 1.0103 0 0 " }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pos.table <-res$positive\n", "head(pos.table)" ] }, { "cell_type": "code", "execution_count": 42, "id": "79687f5d", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A matrix: 12 × 2 of type chr
GeneScore
CEBPA 1.553
NAGS 0.686
OTC 0.396
ORC1 0.2
CPS1 -0.097
ARG1 -0.632
SLC25A2 -0.782
ORC2 -0.872
ASL -0.893
ASS1 -1.177
SLC25A15-1.925
ARG2 -2.268
\n", "text/markdown": "\nA matrix: 12 × 2 of type chr\n\n| Gene | Score |\n|---|---|\n| CEBPA | 1.553 |\n| NAGS | 0.686 |\n| OTC | 0.396 |\n| ORC1 | 0.2 |\n| CPS1 | -0.097 |\n| ARG1 | -0.632 |\n| SLC25A2 | -0.782 |\n| ORC2 | -0.872 |\n| ASL | -0.893 |\n| ASS1 | -1.177 |\n| SLC25A15 | -1.925 |\n| ARG2 | -2.268 |\n\n", "text/latex": "A matrix: 12 × 2 of type chr\n\\begin{tabular}{ll}\n Gene & Score\\\\\n\\hline\n\t CEBPA & 1.553 \\\\\n\t NAGS & 0.686 \\\\\n\t OTC & 0.396 \\\\\n\t ORC1 & 0.2 \\\\\n\t CPS1 & -0.097\\\\\n\t ARG1 & -0.632\\\\\n\t SLC25A2 & -0.782\\\\\n\t ORC2 & -0.872\\\\\n\t ASL & -0.893\\\\\n\t ASS1 & -1.177\\\\\n\t SLC25A15 & -1.925\\\\\n\t ARG2 & -2.268\\\\\n\\end{tabular}\n", "text/plain": " Gene Score \n [1,] CEBPA 1.553 \n [2,] NAGS 0.686 \n [3,] OTC 0.396 \n [4,] ORC1 0.2 \n [5,] CPS1 -0.097\n [6,] ARG1 -0.632\n [7,] SLC25A2 -0.782\n [8,] ORC2 -0.872\n [9,] ASL -0.893\n[10,] ASS1 -1.177\n[11,] SLC25A15 -1.925\n[12,] ARG2 -2.268" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Individual gene scores from a gene set analysis\n", "# look at 10th gene set\n", "GSA.genescores(10, genesets, GSA.obj, genenames)" ] }, { "cell_type": "code", "execution_count": 43, "id": "1cfde1f8", "metadata": {}, "outputs": [ { "data": { "text/plain": "plot without title", "image/png": "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" }, "metadata": { "image/png": { "width": 420, "height": 420 } }, "output_type": "display_data" } ], "source": [ "# Plot the result, this function makes a plot of the significant gene sets, based on a call to the GSA (Gene set analysis) function.\n", "suppressWarnings(GSA.plot(GSA.obj, fac=1, FDRcut = 0.5))" ] }, { "cell_type": "markdown", "id": "7107ef92", "metadata": {}, "source": [ "### GSA Enrichment analysis using KEGG pathways\n", "We can use the same procedure to per enrichment analyis with KEGG pathway. All the codes are similar but `genesets` are assigned from `KEGG_hallmark`. The code is shown below." ] }, { "cell_type": "code", "execution_count": 44, "id": "361aff0b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "perm= 10 / 100 \n", "perm= 20 / 100 \n", "perm= 30 / 100 \n", "perm= 40 / 100 \n", "perm= 50 / 100 \n", "perm= 60 / 100 \n", "perm= 70 / 100 \n", "perm= 80 / 100 \n", "perm= 90 / 100 \n", "perm= 100 / 100 \n" ] } ], "source": [ "genesets = KEGG_hallmark\n", "GSA.obj<-GSA(as.matrix(new_expression_data),as.numeric(groups$groups), genenames=genenames, genesets=genesets, resp.type=\"Two class unpaired\", nperms=100, random.seed=1)" ] }, { "cell_type": "code", "execution_count": 45, "id": "00afb710", "metadata": {}, "outputs": [], "source": [ "# List the results from a GSA analysis\n", "res <- GSA.listsets(GSA.obj, geneset.names=names(genesets),FDRcut=.5)" ] }, { "cell_type": "markdown", "id": "e15cdae3", "metadata": {}, "source": [ "A table of the negative gene sets. \"Negative\" means that lower expression of most genes in the gene set correlates with higher values of the phenotype y. Eg for two classes coded 1,2, lower expression correlates with class 2." ] }, { "cell_type": "code", "execution_count": 46, "id": "c9e7aad4", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A matrix: 6 × 5 of type chr
Gene_setGene_set_nameScorep-valueFDR
218hsa04260-0.67380 0
328hsa05022-0.51870 0
256hsa04714-0.52350.010.4543
323hsa05012-0.738 0.010.4543
325hsa05016-0.71770.010.4543
327hsa05020-0.68950.010.4543
\n", "text/markdown": "\nA matrix: 6 × 5 of type chr\n\n| Gene_set | Gene_set_name | Score | p-value | FDR |\n|---|---|---|---|---|\n| 218 | hsa04260 | -0.6738 | 0 | 0 |\n| 328 | hsa05022 | -0.5187 | 0 | 0 |\n| 256 | hsa04714 | -0.5235 | 0.01 | 0.4543 |\n| 323 | hsa05012 | -0.738 | 0.01 | 0.4543 |\n| 325 | hsa05016 | -0.7177 | 0.01 | 0.4543 |\n| 327 | hsa05020 | -0.6895 | 0.01 | 0.4543 |\n\n", "text/latex": "A matrix: 6 × 5 of type chr\n\\begin{tabular}{lllll}\n Gene\\_set & Gene\\_set\\_name & Score & p-value & FDR\\\\\n\\hline\n\t 218 & hsa04260 & -0.6738 & 0 & 0 \\\\\n\t 328 & hsa05022 & -0.5187 & 0 & 0 \\\\\n\t 256 & hsa04714 & -0.5235 & 0.01 & 0.4543\\\\\n\t 323 & hsa05012 & -0.738 & 0.01 & 0.4543\\\\\n\t 325 & hsa05016 & -0.7177 & 0.01 & 0.4543\\\\\n\t 327 & hsa05020 & -0.6895 & 0.01 & 0.4543\\\\\n\\end{tabular}\n", "text/plain": " Gene_set Gene_set_name Score p-value FDR \n[1,] 218 hsa04260 -0.6738 0 0 \n[2,] 328 hsa05022 -0.5187 0 0 \n[3,] 256 hsa04714 -0.5235 0.01 0.4543\n[4,] 323 hsa05012 -0.738 0.01 0.4543\n[5,] 325 hsa05016 -0.7177 0.01 0.4543\n[6,] 327 hsa05020 -0.6895 0.01 0.4543" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "neg.table <-res$negative\n", "head(neg.table)" ] }, { "cell_type": "markdown", "id": "e226ae92", "metadata": {}, "source": [ "A table of the positive gene sets. \"Positive\" means that higher expression of most genes in the gene set correlates with higher values of the phenotype y. See \"negative\" above for more info." ] }, { "cell_type": "code", "execution_count": 47, "id": "bcd7ff3e", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\n\n\t\n\t\n\n
A matrix: 2 × 5 of type chr
Gene_setGene_set_nameScorep-valueFDR
169hsa045200.503200
173hsa048100.217300
\n", "text/markdown": "\nA matrix: 2 × 5 of type chr\n\n| Gene_set | Gene_set_name | Score | p-value | FDR |\n|---|---|---|---|---|\n| 169 | hsa04520 | 0.5032 | 0 | 0 |\n| 173 | hsa04810 | 0.2173 | 0 | 0 |\n\n", "text/latex": "A matrix: 2 × 5 of type chr\n\\begin{tabular}{lllll}\n Gene\\_set & Gene\\_set\\_name & Score & p-value & FDR\\\\\n\\hline\n\t 169 & hsa04520 & 0.5032 & 0 & 0\\\\\n\t 173 & hsa04810 & 0.2173 & 0 & 0\\\\\n\\end{tabular}\n", "text/plain": " Gene_set Gene_set_name Score p-value FDR\n[1,] 169 hsa04520 0.5032 0 0 \n[2,] 173 hsa04810 0.2173 0 0 " }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pos.table <-res$positive\n", "head(pos.table)" ] }, { "cell_type": "code", "execution_count": 48, "id": "0d676c13", "metadata": {}, "outputs": [ { "data": { "text/html": "\n\n\n\t\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n
A matrix: 30 × 2 of type chr
GeneScore
OGDH 1.545
IDH2 1.427
SUCLG20.717
PCK1 -0.022
PCK2 -0.16
PC -0.213
DLST -0.235
PDHA2 -0.239
ACO1 -0.6
SDHC -0.676
IDH1 -0.851
IDH3B -1.241
PDHB -1.449
DLD -1.453
IDH3G -1.621
SDHB -1.751
SDHD -1.842
DLAT -1.904
MDH1 -2.045
SDHA -2.068
ACLY -2.094
SUCLG1-2.193
IDH3A -2.202
CS -2.314
OGDHL -2.378
FH -2.453
MDH2 -2.547
SUCLA2-2.584
PDHA1 -3.078
ACO2 -3.559
\n", "text/markdown": "\nA matrix: 30 × 2 of type chr\n\n| Gene | Score |\n|---|---|\n| OGDH | 1.545 |\n| IDH2 | 1.427 |\n| SUCLG2 | 0.717 |\n| PCK1 | -0.022 |\n| PCK2 | -0.16 |\n| PC | -0.213 |\n| DLST | -0.235 |\n| PDHA2 | -0.239 |\n| ACO1 | -0.6 |\n| SDHC | -0.676 |\n| IDH1 | -0.851 |\n| IDH3B | -1.241 |\n| PDHB | -1.449 |\n| DLD | -1.453 |\n| IDH3G | -1.621 |\n| SDHB | -1.751 |\n| SDHD | -1.842 |\n| DLAT | -1.904 |\n| MDH1 | -2.045 |\n| SDHA | -2.068 |\n| ACLY | -2.094 |\n| SUCLG1 | -2.193 |\n| IDH3A | -2.202 |\n| CS | -2.314 |\n| OGDHL | -2.378 |\n| FH | -2.453 |\n| MDH2 | -2.547 |\n| SUCLA2 | -2.584 |\n| PDHA1 | -3.078 |\n| ACO2 | -3.559 |\n\n", "text/latex": "A matrix: 30 × 2 of type chr\n\\begin{tabular}{ll}\n Gene & Score\\\\\n\\hline\n\t OGDH & 1.545 \\\\\n\t IDH2 & 1.427 \\\\\n\t SUCLG2 & 0.717 \\\\\n\t PCK1 & -0.022\\\\\n\t PCK2 & -0.16 \\\\\n\t PC & -0.213\\\\\n\t DLST & -0.235\\\\\n\t PDHA2 & -0.239\\\\\n\t ACO1 & -0.6 \\\\\n\t SDHC & -0.676\\\\\n\t IDH1 & -0.851\\\\\n\t IDH3B & -1.241\\\\\n\t PDHB & -1.449\\\\\n\t DLD & -1.453\\\\\n\t IDH3G & -1.621\\\\\n\t SDHB & -1.751\\\\\n\t SDHD & -1.842\\\\\n\t DLAT & -1.904\\\\\n\t MDH1 & -2.045\\\\\n\t SDHA & -2.068\\\\\n\t ACLY & -2.094\\\\\n\t SUCLG1 & -2.193\\\\\n\t IDH3A & -2.202\\\\\n\t CS & -2.314\\\\\n\t OGDHL & -2.378\\\\\n\t FH & -2.453\\\\\n\t MDH2 & -2.547\\\\\n\t SUCLA2 & -2.584\\\\\n\t PDHA1 & -3.078\\\\\n\t ACO2 & -3.559\\\\\n\\end{tabular}\n", "text/plain": " Gene Score \n [1,] OGDH 1.545 \n [2,] IDH2 1.427 \n [3,] SUCLG2 0.717 \n [4,] PCK1 -0.022\n [5,] PCK2 -0.16 \n [6,] PC -0.213\n [7,] DLST -0.235\n [8,] PDHA2 -0.239\n [9,] ACO1 -0.6 \n[10,] SDHC -0.676\n[11,] IDH1 -0.851\n[12,] IDH3B -1.241\n[13,] PDHB -1.449\n[14,] DLD -1.453\n[15,] IDH3G -1.621\n[16,] SDHB -1.751\n[17,] SDHD -1.842\n[18,] DLAT -1.904\n[19,] MDH1 -2.045\n[20,] SDHA -2.068\n[21,] ACLY -2.094\n[22,] SUCLG1 -2.193\n[23,] IDH3A -2.202\n[24,] CS -2.314\n[25,] OGDHL -2.378\n[26,] FH -2.453\n[27,] MDH2 -2.547\n[28,] SUCLA2 -2.584\n[29,] PDHA1 -3.078\n[30,] ACO2 -3.559" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Individual gene scores from a gene set analysis\n", "# look at 10th gene set\n", "GSA.genescores(10, genesets, GSA.obj, genenames)" ] }, { "cell_type": "code", "execution_count": 49, "id": "2284bc1f", "metadata": {}, "outputs": [ { "data": { "text/plain": "plot without title", "image/png": "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" }, "metadata": { "image/png": { "width": 420, "height": 420 } }, "output_type": "display_data" } ], "source": [ "# Plot the result, this function makes a plot of the significant gene sets, based on a call to the GSA (Gene set analysis) function.\n", "suppressWarnings(GSA.plot(GSA.obj, fac=1, FDRcut = 0.5))\n" ] }, { "cell_type": "code", "execution_count": 50, "id": "67951b37", "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": "\r\n\r\n\r\n\r\n\r\nQuiz_Submodule4\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "IRdisplay::display_html('')\n" ] } ], "metadata": { "celltoolbar": "Tags", "environment": { "kernel": "ir", "name": "r-cpu.4-1.m93", "type": "gcloud", "uri": "gcr.io/deeplearning-platform-release/r-cpu.4-1:m93" }, "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "4.2.2" }, "toc-showcode": true, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }