Gene Set Enrichment Analysis of RNAseq Ovarian Cancer Data of Two Cell Lines Using EnrichR Technology

Contents:

1. Background 2. Materials and Methods 3. Results 4. Discussion 5. References

1. Background:

Ovarian cancer, after cervical and uterine cancers, ranks as the third most common gynelogical tumor, it has the highest mortality rate out of the three owing to its asymptomatic nature and the lack of adequate screening for it (Momenimovahed et al., 2019). Genomic studies on ovarian cancer aid in the understanding of its pathogenesis and the developement of new targeted therapies. Of the genotypes associated with high risk of developing OCs are BRCA1 and BRCA2 germline mutations (Prat et al., 2005). Pax8 have also been reported to play a role in ovarian cancer pathogenesis through several pathways: epithelial-mesenchymal transition, WNT signaling, apoptosis and p53 (de Cristofaro et al., 2016). This analysis shows a gene set enrichment of differentially expressed genes following Pax8 silencing in two cancer cell lines: SKOV3 and FT194 using Enrichr package. EnrichR comes as a CRAN package as well as a web-based tool for gene set enrichment analysis. Its input is a list of differentially expressed human or mouse genes which are then enriched against a gene set library to determine different ontology, pathways, trascription factors and more. This analysis is going to look into three Enrichr databases: Transcription Factor PPIs, Reactome, and Gene Ontology Biological Process.

2. Materials and Methods:

The data used is differentially expressed human genes following PAX8 silencing in two cell lines: SKOV3 and FT194.

Main Package: The main package that will be used for enrichment is Enrichr, a CRAN package.

Supplementary Packages: Other supplementary packages will be used for visualization such as venn diagram.

2.1 Loading Data and Installing Packages

SKOV3 <- read.csv('GSE79572_WT_vs_PAX8-KO_SKOV3_cuffdiff_genes.csv')
FT194 <- read.csv('GSE79572_WT_vs_PAX8-KO_FT194_cuffdiff_genes.csv')

install.packages("enrichR", repos = "http://cran.us.r-project.org")
## Installing package into 'C:/Users/Omar Alhilaly/AppData/Local/R/win-library/4.2'
## (as 'lib' is unspecified)
## package 'enrichR' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\Omar Alhilaly\AppData\Local\Temp\RtmpuK2jyh\downloaded_packages
install.packages("VennDiagram", repos = "http://cran.us.r-project.org")
## Installing package into 'C:/Users/Omar Alhilaly/AppData/Local/R/win-library/4.2'
## (as 'lib' is unspecified)
## package 'VennDiagram' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\Omar Alhilaly\AppData\Local\Temp\RtmpuK2jyh\downloaded_packages
library(enrichR)
## Welcome to enrichR
## Checking connection ...
## Enrichr ... Connection is Live!
## FlyEnrichr ... Connection is available!
## WormEnrichr ... Connection is available!
## YeastEnrichr ... Connection is available!
## FishEnrichr ... Connection is available!
## OxEnrichr ... Connection is available!

2.2 Filtering the Data by Significance and Direction of Regulation

SKOV3_down <- SKOV3[SKOV3$log2 > 0 & SKOV3$significant == 'yes', 'gene']
length(SKOV3_down)
## [1] 214
SKOV3_up <- SKOV3[SKOV3$log2 < 0 & SKOV3$significant == 'yes', 'gene']
length(SKOV3_up)
## [1] 87
FT194_down <- FT194[FT194$log2 > 0 & FT194$significant == 'yes', 'gene']
length(FT194_down)
## [1] 119
FT194_up <- FT194[FT194$log2 < 0 & FT194$significant == 'yes', 'gene']
length(FT194_up)
## [1] 47

2.3 Before we begin enrichment analysis, we’ll take a look at the common upregulated and down regulated genes across the two cell lines:

library(VennDiagram)
## Loading required package: grid
## Loading required package: futile.logger
library(RColorBrewer)
myCol <- brewer.pal(4, "Pastel2")

plt <- venn.diagram(
  x = list(SKOV3_down, SKOV3_up, FT194_down, FT194_up),
  category.names = c("Downregulated SKOV3" , "Upregulated SKOV3", "Downregulated FT194", "Upregulated FT194"),
  filename = NULL,
  output=TRUE,
  lwd = 1.5,
  lty = 'blank',
  fill = myCol,
  cex = 1.5,
  cat.cex = 1,
  cat.fontface = "bold",
  cat.default.pos = "outer",
  cat.fontfamily = "sans")

grid.newpage()
pushViewport(viewport(width=unit(0.8, "npc"), height = unit(0.8, "npc")))
grid.draw(plt)

2.4 Creating a matrix of available Enrichr databases:

setEnrichrSite("Enrichr")
## Connection changed to https://maayanlab.cloud/Enrichr/
## Connection is Live!
dbs <- listEnrichrDbs()

3. Results:

3.1 Enrichment Plots of Upregulated SKOV3 Genes.

3.1.1 Plot of Enriched Upregulated SKOV3 Gene Ontology Terms:

SKOV3_up_enriched_GO <- enrichr(c(SKOV3_up), "GO_Biological_Process_2021")
## Uploading data to Enrichr... Done.
##   Querying GO_Biological_Process_2021... Done.
## Parsing results... Done.
plotEnrich(SKOV3_up_enriched_GO[["GO_Biological_Process_2021"]], y = "Count", orderBy = "P.value")

3.1.2 Plot of Enriched Upregulated SKOV3 Reactome Pathways:

SKOV3_up_enriched_R <- enrichr(c(SKOV3_up), "Reactome_2022")
## Uploading data to Enrichr... Done.
##   Querying Reactome_2022... Done.
## Parsing results... Done.
plotEnrich(SKOV3_up_enriched_R[["Reactome_2022"]], y = "Count", orderBy = "P.value")

3.1.3 Plot of Enriched Upregulated SKOV3 Transcription Factors:

SKOV3_up_enriched_T <- enrichr(c(SKOV3_up), "Transcription_Factor_PPIs")
## Uploading data to Enrichr... Done.
##   Querying Transcription_Factor_PPIs... Done.
## Parsing results... Done.
plotEnrich(SKOV3_up_enriched_T[["Transcription_Factor_PPIs"]], y = "Count", orderBy = "P.value")

3.2 Enrichment Plots of Downregulated SKOV3 Genes.

3.2.1 Plot of Enriched Downregulated SKOV3 Gene Ontology Terms:

SKOV3_down_enriched_GO <- enrichr(c(SKOV3_down), "GO_Biological_Process_2021")
## Uploading data to Enrichr... Done.
##   Querying GO_Biological_Process_2021... Done.
## Parsing results... Done.
plotEnrich(SKOV3_down_enriched_GO[["GO_Biological_Process_2021"]], y = "Count", orderBy = "P.value")

3.2.2 Plot of Enriched Downregulated SKOV3 Reactome Pathways:

SKOV3_down_enriched_R <- enrichr(c(SKOV3_down), "Reactome_2022")
## Uploading data to Enrichr... Done.
##   Querying Reactome_2022... Done.
## Parsing results... Done.
plotEnrich(SKOV3_down_enriched_R[["Reactome_2022"]], y = "Count", orderBy = "P.value")

3.2.3 Plot of Enriched Downregulated SKOV3 Transcription Factors:

SKOV3_down_enriched_T <- enrichr(c(SKOV3_down), "Transcription_Factor_PPIs")
## Uploading data to Enrichr... Done.
##   Querying Transcription_Factor_PPIs... Done.
## Parsing results... Done.
plotEnrich(SKOV3_down_enriched_T[["Transcription_Factor_PPIs"]], y = "Count", orderBy = "P.value")

3.3 Enrichment Plots of Upregulated FT194 Genes.

3.3.1 Plot of Enriched Upregulated FT194 Gene Ontology Terms:

FT194_up_enriched_GO <- enrichr(c(FT194_up), "GO_Biological_Process_2021")
## Uploading data to Enrichr... Done.
##   Querying GO_Biological_Process_2021... Done.
## Parsing results... Done.
plotEnrich(FT194_up_enriched_GO[["GO_Biological_Process_2021"]], y = "Count", orderBy = "P.value")

3.3.2 Plot of Enriched Upregulated FT194 Reactome Pathways:

FT194_up_enriched_R <- enrichr(c(FT194_up), "Reactome_2022")
## Uploading data to Enrichr... Done.
##   Querying Reactome_2022... Done.
## Parsing results... Done.
plotEnrich(FT194_up_enriched_R[["Reactome_2022"]], y = "Count", orderBy = "P.value")

3.3.3 Plot of Enriched Upregulated FT194 Transcription Factors:

FT194_up_enriched_T <- enrichr(c(FT194_up), "Transcription_Factor_PPIs")
## Uploading data to Enrichr... Done.
##   Querying Transcription_Factor_PPIs... Done.
## Parsing results... Done.
plotEnrich(FT194_up_enriched_T[["Transcription_Factor_PPIs"]], y = "Count", orderBy = "P.value")

3.4 Enrichment Plots of Downregulated FT194 Genes.

3.4.1 Plot of Enriched Downregulated FT194 Gene Ontology Terms:

FT194_down_enriched_GO <- enrichr(c(FT194_down), "GO_Biological_Process_2021")
## Uploading data to Enrichr... Done.
##   Querying GO_Biological_Process_2021... Done.
## Parsing results... Done.
plotEnrich(FT194_down_enriched_GO[["GO_Biological_Process_2021"]], y = "Count", orderBy = "P.value")

3.4.2 Plot of Enriched Downregulated FT194 Reactome Pathways:

FT194_down_enriched_R <- enrichr(c(FT194_down), "Reactome_2022")
## Uploading data to Enrichr... Done.
##   Querying Reactome_2022... Done.
## Parsing results... Done.
plotEnrich(FT194_down_enriched_R[["Reactome_2022"]], y = "Count", orderBy = "P.value")

3.4.3 Plot of Enriched Downregulated FT194 Transcription Factors:

FT194_down_enriched_T <- enrichr(c(FT194_down), "Transcription_Factor_PPIs")
## Uploading data to Enrichr... Done.
##   Querying Transcription_Factor_PPIs... Done.
## Parsing results... Done.
plotEnrich(FT194_down_enriched_T[["Transcription_Factor_PPIs"]], y = "Count", orderBy = "P.value")

3.5 Extracting Enriched Terms into Dataframes:

SKOV3_down_GO_df = data.frame(SKOV3_down_enriched_GO)
SKOV3_down_GO_df <- SKOV3_down_GO_df$GO_Biological_Process_2021.Term

SKOV3_down_R_df = data.frame(SKOV3_down_enriched_R)
SKOV3_down_R_df <- SKOV3_down_R_df$Reactome_2022.Term

SKOV3_down_T_df = data.frame(SKOV3_down_enriched_T)
SKOV3_down_T_df <- SKOV3_down_T_df$Transcription_Factor_PPIs.Term

SKOV3_up_GO_df = data.frame(SKOV3_up_enriched_GO)
SKOV3_up_GO_df <- SKOV3_up_GO_df$GO_Biological_Process_2021.Term

SKOV3_up_R_df = data.frame(SKOV3_up_enriched_R)
SKOV3_up_R_df <- SKOV3_up_R_df$Reactome_2022.Term

SKOV3_up_T_df = data.frame(SKOV3_up_enriched_T)
SKOV3_up_T_df <- SKOV3_up_T_df$Transcription_Factor_PPIs.Term

FT194_down_GO_df = data.frame(FT194_down_enriched_GO)
FT194_down_GO_df <- FT194_down_GO_df$GO_Biological_Process_2021.Term

FT194_down_R_df = data.frame(FT194_down_enriched_R)
FT194_down_R_df <- FT194_down_R_df$Reactome_2022.Term

FT194_down_T_df = data.frame(FT194_down_enriched_T)
FT194_down_T_df <- FT194_down_T_df$Transcription_Factor_PPIs.Term

FT194_up_GO_df = data.frame(FT194_up_enriched_GO)
FT194_up_GO_df <- FT194_up_GO_df$GO_Biological_Process_2021.Term

FT194_up_R_df = data.frame(FT194_up_enriched_R)
FT194_up_R_df <- FT194_up_R_df$Reactome_2022.Term

FT194_up_T_df = data.frame(FT194_up_enriched_T)
FT194_up_T_df <- FT194_up_T_df$Transcription_Factor_PPIs.Term

3.6 Finding Common Enriched Terms Between The Different Cells Lines and Directions of Regulation across the three databases:

### Common Gene Ontology Terms

x1 <- intersect(SKOV3_down_GO_df, FT194_down_GO_df)
x2 <- intersect(SKOV3_up_GO_df, FT194_up_GO_df)
x3 <- intersect(SKOV3_down_GO_df, FT194_up_GO_df)
x4 <- intersect(FT194_down_GO_df, SKOV3_up_GO_df)

Common Gene Ontology Terms Between Downregulated Genes in SKOV3 and FT194

head(x1)
## [1] "apical protein localization (GO:0045176)"                 
## [2] "sulfur compound biosynthetic process (GO:0044272)"        
## [3] "platelet degranulation (GO:0002576)"                      
## [4] "regulated exocytosis (GO:0045055)"                        
## [5] "negative regulation of stress fiber assembly (GO:0051497)"
## [6] "response to insulin (GO:0032868)"

Common Gene Ontology Terms Between Upregulated Genes in SKOV3 and FT194

head(x2)
## [1] "sarcomere organization (GO:0045214)"                                
## [2] "actomyosin structure organization (GO:0031032)"                     
## [3] "regulation of ossification (GO:0030278)"                            
## [4] "ventricular trabecula myocardium morphogenesis (GO:0003222)"        
## [5] "myofibril assembly (GO:0030239)"                                    
## [6] "positive regulation of macromolecule metabolic process (GO:0010604)"

Common Reactome Pathways

x5 <- intersect(SKOV3_down_R_df, FT194_down_R_df)
x6 <- intersect(SKOV3_up_R_df, FT194_up_R_df)
x7 <- intersect(SKOV3_down_R_df, FT194_up_R_df)
x8 <- intersect(FT194_down_R_df, SKOV3_up_R_df)

Common Reactome Pathways Between Downregulated Genes in SKOV3 and FT194

head(x5)
## [1] "RHOB GTPase Cycle R-HSA-9013026"                         
## [2] "RHOC GTPase Cycle R-HSA-9013106"                         
## [3] "Platelet Degranulation R-HSA-114608"                     
## [4] "RHOD GTPase Cycle R-HSA-9013405"                         
## [5] "Signaling By Receptor Tyrosine Kinases R-HSA-9006934"    
## [6] "Response To Elevated Platelet Cytosolic Ca2+ R-HSA-76005"

Common Reactome Pathways Between Upregulated Genes in SKOV3 and FT194

head(x6)
## [1] "Platelet Activation, Signaling And Aggregation R-HSA-76002"
## [2] "Platelet Degranulation R-HSA-114608"                       
## [3] "Response To Elevated Platelet Cytosolic Ca2+ R-HSA-76005"  
## [4] "Hemostasis R-HSA-109582"                                   
## [5] "PINK1-PRKN Mediated Mitophagy R-HSA-5205685"               
## [6] "Signaling By Receptor Tyrosine Kinases R-HSA-9006934"

Common Transcription Factors

x9 <- intersect(SKOV3_down_T_df, FT194_down_T_df)
x10 <- intersect(SKOV3_up_T_df, FT194_up_T_df)
x11 <- intersect(SKOV3_down_T_df, FT194_up_T_df)
x12 <- intersect(FT194_down_T_df, SKOV3_up_T_df)

Common Transcription Factors Between Downregulated Genes in SKOV3 and FT194

head(x9)
## [1] "BRCA1"  "HNF1A"  "CCND1"  "STAT6"  "CTNNB1" "HTT"

Common Transcription Factors Between Upregulated Genes in SKOV3 and FT194

head(x10)
## [1] "STAT5A" "NANOG"  "STAT5B" "PHF8"   "ATF2"   "CBX3"

3.7 Using the Venn Diagram Package to Plot Charts of Common Enriched Terms Across the Three Databases.

3.7.1 Venn Diagram of Common Gene Ontology Terms:

plt1 <- venn.diagram(
  x = list(x1, x2, x3, x4),
  category.names = c("SKOV3↓ FT194↓" , "SKOV3↑ FT194↑" , "SKOV3↓ FT194↑", "FT194↓ SKOV3↑"),
  filename = NULL,
  output=TRUE,
  lwd = 1.5,
  lty = 'blank',
  fill = myCol,
  cex = 1.5,
  cat.cex = 1,
  cat.fontface = "bold",
  cat.default.pos = "outer",
  cat.fontfamily = "sans")

grid.newpage()
pushViewport(viewport(width=unit(0.8, "npc"), height = unit(0.8, "npc")))
grid.draw(plt1)

3.7.2 Venn Diagram of Common Reactome Pathways:

plt2 <- venn.diagram(
  x = list(x5, x6, x7, x8),
  category.names = c("SKOV3↓ FT194↓" , "SKOV3↑ FT194↑" , "SKOV3↓ FT194↑", "FT194↓ SKOV3↑"),
  filename = NULL,
  output=TRUE,
  lwd = 1.5,
  lty = 'blank',
  fill = myCol,
  cex = 1.5,
  cat.cex = 1,
  cat.fontface = "bold",
  cat.default.pos = "outer",
  cat.fontfamily = "sans")

grid.newpage()
pushViewport(viewport(width=unit(0.8, "npc"), height = unit(0.8, "npc")))
grid.draw(plt2)

3.7.3 Venn Diagram of Common Transcription Factors:

plt3 <- venn.diagram(
  x = list(x9, x10, x11, x12),
  category.names = c("SKOV3↓ FT194↓" , "SKOV3↑ FT194↑" , "SKOV3↓ FT194↑", "FT194↓ SKOV3↑"),
  filename = NULL,
  output=TRUE,
  lwd = 1.5,
  lty = 'blank',
  fill = myCol,
  cex = 1.5,
  cat.cex = 1,
  cat.fontface = "bold",
  cat.default.pos = "outer",
  cat.fontfamily = "sans")

grid.newpage()
pushViewport(viewport(width=unit(0.8, "npc"), height = unit(0.8, "npc")))
grid.draw(plt3)

4. Discussion:

As shown in section 2.2, the number of significant upregulated and downregulated genes in SKOV3 cell line following PAX8 silencing is 87 and 214 respectively, while for FT194 cell line it was 47 and 119. In section 2.3, we looked at commonly regulated genes across the two cell lines. Genes that were upregulated in both cell lines were 15 and those that were downregulated were 47. The number of downregulated genes after PAX8 silencing seems to always be higher than upregulated ones, we could deduce that PAX8 has more of an activating role on downstream genes rather than an inhibiting one. In sections 3.1, 3.2, 3.3 and 3.4, we look at the enrichment plots for upregulation and downregulation of genes in both cell lines across three databases. In section 3.6, we further analyse to find out the common enriched terms ans use the head function to look at the most significant ones, all pathways, ontology terms and transcription factors play a role in cancer proliferation.

5. References:

Momenimovahed, Z. et al. (2019) “Ovarian Cancer in The World: Epidemiology and Risk Factors,” International Journal of Women’s Health, Volume 11, pp. 287–299. Available at: https://doi.org/10.2147/ijwh.s197604.

Tanha, K., Mottaghi, A., Nojomi, M. et al. Investigation on factors associated with ovarian cancer: an umbrella review of systematic review and meta-analyses. J Ovarian Res 14, 153 (2021). https://doi.org/10.1186/s13048-021-00911-z

Prat, J., Ribé, A. and Gallardo, A. (2005) “Hereditary ovarian cancer,” Human Pathology, 36(8), pp. 861–870. Available at: https://doi.org/10.1016/j.humpath.2005.06.006.

de Cristofaro, T. et al. (2016) “Candidate genes and pathways downstream of pax8 involved in ovarian high-grade serous carcinoma,” Oncotarget, 7(27), pp. 41929–41947. Available at: https://doi.org/10.18632/oncotarget.9740.