Functional Genomics
Synthesis Track • Chapter 9
Estimated Study Time: 18 minutes
Learning Objectives
- Understand Over-Representation Analysis (ORA) based on the hypergeometric distribution and Fisher's exact test.
- Execute Gene Set Enrichment Analysis (GSEA) on pre-ranked fold-change lists without arbitrary cutoffs.
- Navigate Gene Ontology (GO) acyclic graphs: Biological Process, Molecular Function, and Cellular Component.
- Construct and cluster protein-protein interaction networks using STRING and Cytoscape.
1. Translating Gene Lists into Biological Mechanistic Insight
A high-throughput experiment (such as an RNA-seq or GWAS screen) typically outputs a list of hundreds or thousands of statistically significant genes or variants. Interpreting these raw identifiers requires pathway enrichment mining to determine whether specific biological functions or metabolic cascades are coordinated:
- Over-Representation Analysis (ORA): Uses Fisher's exact test or the hypergeometric test to determine if the overlap between a user's list of significant genes and a predefined pathway is greater than expected by chance. Limitation: Requires an arbitrary p-value/fold-change threshold and treats all significant genes equally.
- Gene Set Enrichment Analysis (GSEA): Bypasses arbitrary significance cutoffs. All detected genes are ranked from most upregulated to most downregulated. GSEA steps through the ranked list, calculating a Running Enrichment Score (ES) via a weighted Kolmogorov-Smirnov statistic whenever a pathway gene is encountered.
2. clusterProfiler ORA & GSEA Implementation in R
# Functional enrichment workflow in R
library(clusterProfiler)
library(org.Hs.eg.db)
library(enrichplot)
# 1. Over-Representation Analysis (ORA) on significant genes
ego <- enrichGO(gene = sig_entrez_ids,
OrgDb = org.Hs.eg.db,
ont = "BP", # Biological Process
pAdjustMethod = "BH",
pvalueCutoff = 0.01,
qvalueCutoff = 0.05,
readable = TRUE)
dotplot(ego, showCategory = 15, title = "Top Enriched GO Biological Processes")
# 2. Gene Set Enrichment Analysis (GSEA) on ranked fold changes
# ranked_genes: vector of log2FC named with Entrez IDs, sorted decreasing
gse_kegg <- gseKEGG(geneList = ranked_genes,
organism = 'hsa',
pvalueCutoff = 0.05,
verbose = FALSE)
gseaplot2(gse_kegg, geneSetID = 1, title = gse_kegg$Description[1])