Contents

Abstract

In order to make light of cancer development, it is crucial to understand which genes play a role in the mechanisms linked to this disease and moreover which role that is. Commonly biological processes such as proliferation and apoptosis have been linked to cancer progression. We have developed the Moonlight framework that allows for prediction of cancer driver genes through multi-omics data integration. Based on expression data we perform functional enrichment analysis, infer gene regulatory networks and upstream regulator analysis to score the importance of well-known biological processes with respect to the studied cancer. We then use these scores to predict oncogenic mediators with two specific roles: genes that potentially act as tumor suppressor genes (TSGs) and genes that potentially act as oncogenes (OCGs). This constitutes Moonlight’s primary layer. As gene expression data alone does not explain the cancer phenotypes, a second layer of evidence is needed. We have automated the integration of a secondary mutational layer that predicts driver mutations in the oncogenic mediators and thereby allows for the prediction of cancer driver genes using the driver mutation prediction tool CScape-somatic. These new functionalities are provided in the updated version of Moonlight, namely Moonlight2. Overall, this methodology not only allows us to identify genes with dual role (TSG in one cancer type and OCG in another) but also to elucidate the underlying biological processes.

Introduction

Cancer development is influenced by mutations in two distinctly different categories of genes, known as tumor suppressor genes (TSG) and oncogenes (OCG). The occurrence of mutations in genes of the first category leads to faster cell proliferation while mutations in genes of second category increases or changes their function. In 2020, we developed the Moonlight framework that allows for prediction of cancer driver genes (Colaprico, Antonio and Olsen, Catharina and Bailey, Matthew H. and Odom, Gabriel J. and Terkelsen, Thilde and Silva, Tiago C. and Olsen, André V. and Cantini, Laura and Zinovyev, Andrei and Barillot, Emmanuel and Noushmehr, Houtan and Bertoli, Gloria and Castiglioni, Isabella and Cava, Claudia and Bontempi, Gianluca and Chen, Xi Steven and Papaleo, Elena 2020). Here, gene expression data are integrated together with biological processes and gene regulatory networks to score the importance of well-known biological processes with respect to the studied cancer. These scores are used to predict oncogenic mediators: putative TSGs and putative OCGs. As gene expression data alone is not enough to explain the deregulation of the genes, a second layer of evidence is needed. For this reason, we automated the integration of a secondary mutational layer which predicts driver mutations and passenger mutations in the oncogenic mediators. These new functionalities are released in the updated version of Moonlight to produce Moonlight2R. The prediction of the driver mutations are carried out using the CScape-somatic driver mutation prediction tool. Moreover, the new functionalities estimate the potential effect of a mutation on the transcriptional, translational, or protein structure/function level. Those oncogenic mediators with at least one driver mutation are retained as the final set of driver genes (Nourbakhsh, Mona and Saksager, Astrid and Tom, Nikola and Chen, Xi Steven and Colaprico, Antonio and Olsen, Catharina and Tiberti, Matteo and Papaleo, Elena 2023).

Moonlight’s pipeline

Moonlight’s pipeline is shown below:

Moonlight’s proposed workflow

The proposed pipeline consists of following eight steps:

  1. The input to Moonlight is a set of differentially expressed genes between two biological conditions such as cancer and healthy samples or two cancer subtyoes. Besides differentially expressed genes, gene expression and mutation data are also needed.
  2. FEA Functional Enrichment Analysis, using Fisher’s test, to identify gene sets (with biological functions linked to cancer) significantly enriched by regulated genes (RG).
  3. GRN Gene Regulatory Network inferred between each single DEG (sDEG) and all genes by means of mutual information, obtaining for each DEG a list of RG.
  4. URA Upstream Regulator Analysis for DEGs in each enriched gene set, we applied z-score being the ratio between the sum of all predicted effects for all the gene involved in the specific function and the square-root of the number of all genes.
  5. PRA Pattern Recognition Analysis identifies putative TSGs (down) and OCGs (up). We either use user defined biological processes or random forests.
  6. DMA Driver Mutation Analysis identifies driver mutations in the putative TSGs and OCGs through the driver mutation prediction tool, CScape-somatic.
  7. We applied the above procedure to multiple cancer types to obtain cancer-specific lists of TSGs and OCGs. We compared the lists for each cancer: if a sDEG was TSG in a cancer and OCG in another we defined it as dual-role TSG-OCG. Otherwise if we found a sDEG defined as OCG or TSG only in one tissue we defined it as tissue specific biomarker.
  8. We use the COSMIC database to define a list of gold standard TSG and OCGs to assess the accuracy of the proposed method.

Installation

To install Moonlight2R use the code below.

Installation from BioConductor

if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("Moonlight2R")

Installation from GitHub

First, install devtools or if you already have it installed, load it.

install.packages("devtools")
library(devtools)

Install Moonlight2R from GitHub:

devtools::install_github(repo = "ELELAB/Moonlight2R")

Installation from GitHub with accompanying vignette

First, install the BiocStyle Bioconductor package.

if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("BiocStyle")

Then install Moonlight2R with its accompanying vignette.

devtools::install_github(repo = "ELELAB/Moonlight2R", build_vignettes = TRUE)

You can view the vignette in the following way.

vignette( "Moonlight2R", package="Moonlight2R")

Load libraries

library(Moonlight2R)
## Loading required package: doParallel
## Loading required package: foreach
## Loading required package: iterators
## Loading required package: parallel
## 
## 
## Setting options('download.file.method.GEOquery'='auto')
## Setting options('GEOquery.inmemory.gpl'=FALSE)
library(magrittr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Obtain Input

The input to Moonlight is a set of differentially expressed genes and gene expression and mutation data are also needed. Gene expression data, mutation data and differentially expressed genes can for example be obtained from TCGA using the R package TCGAbiolinks. Help documents on how to use TCGAbiolinks are available here. To find other examples of usage of TCGAbiolinks on TCGA cancer types see our GitHub repository. Example data of the input (differentially expressed genes, gene expression data, and mutation data) are stored in the Moonlight2R package:

data(DEGsmatrix)
data(dataFilt)
data(dataMAF)
data(GEO_TCGAtab)
data(LOC_transcription)
data(LOC_translation)
data(LOC_protein)
data(Oncogenic_mediators_mutation_summary)
data(DEG_Mutations_Annotations)

Download: Get GEO data

You can search GEO data using the getDataGEO function.

GEO_TCGAtab: a 18x12 matrix that provides the GEO data set we matched to one of the 18 given TCGA cancer types

knitr::kable(GEO_TCGAtab, digits = 2,
       caption = "Table with GEO data set matched to one
       of the 18 given TCGA cancer types ",
       row.names = TRUE)
Table 1: Table with GEO data set matched to one
of the 18 given TCGA cancer types
Cancer TP NT DEG. Dataset TP.1 NT.1 Platform DEG.. Common GEO_Normal GEO_Tumor
1 BLCA 408 19 2937 GSE13507 165 10 GPL65000 2099 896 control cancer
2 BRCA 1097 114 3390 GSE39004 61 47 GPL6244 2449 1248 normal Tumor
3 CHOL 36 9 5015 GSE26566 104 59 GPL6104 3983 2587 Surrounding Tumor
4 COAD 286 41 3788 GSE41657 25 12 GPL6480 3523 1367 N A
5 ESCA 184 11 2525 GSE20347 17 17 GPL571 1316 406 normal carcinoma
6 GBM 156 5 4828 GSE50161 34 13 GPL570 4504 2660 normal GBM
7 HNSC 520 44 2973 GSE6631 22 22 GPL8300 142 129 normal cancer
8 KICH 66 25 4355 GSE15641 6 23 GPL96 1789 680 normal chromophobe
9 KIRC 533 72 3618 GSE15641 32 23 GPL96 2911 939 normal clear cell RCC
10 KIRP 290 32 3748 GSE15641 11 23 GPL96 2020 756 normal papillary RCC
11 LIHC 371 50 3043 GSE45267 46 41 GPL570 1583 860 normal liver HCC sample
12 LUAD 515 59 3498 GSE10072 58 49 GPL96 666 555 normal tumor
13 LUSC 503 51 4984 GSE33479 14 27 GPL6480 3729 1706 normal squamous cell carcinoma
14 PRAD 497 52 1860 GSE6919 81 90 GPL8300 246 149 normal prostate tumor samples
15 READ 94 10 3628 GSE20842 65 65 GPL4133 2172 1261 M T
16 STAD 415 35 2622 GSE2685 10 10 GPL80 487 164 N T
17 THCA 505 59 1994 GSE33630 60 45 GPL570 1451 781 N T
18 UCEC 176 24 4183 GSE17025 GPL570 tp lcm

getDataGEO: Search by cancer type and data type [Gene Expression]

The user can query and download the cancer types supported by GEO, using the function getDataGEO:

dataFilt_GEO <- getDataGEO(GEOobject = "GSE20347", platform = "GPL571")
dataFilt_GEO <- getDataGEO(TCGAtumor = "ESCA")

FEA: Functional Enrichment Analysis

The user can perform a functional enrichment analysis using the function FEA. For each DEG in the gene set a z-score is calculated. This score indicates how the genes act in the gene set.

data(DEGsmatrix)
data(DiseaseList)
data(EAGenes)
dataFEA <- FEA(DEGsmatrix = DEGsmatrix)

The output can be visualized with a FEA plot.

FEAplot: Functional Enrichment Analysis Plot

The user can plot the result of a functional enrichment analysis using the function plotFEA. A negative z-score indicates that the process’ activity is decreased. A positive z-score indicates that the process’ activity is increased.

plotFEA(dataFEA = dataFEA, additionalFilename = "_exampleVignette", height = 10, width = 20)

The figure generated by the above code is shown below:

GRN: Gene Regulatory Network

The user can perform a gene regulatory network analysis using the function GRN which infers the network using the parmigene package. For illustrative purposes and to decrease runtime, we have set nGenesPerm = 5 and nBoot = 5 in the example below, however, we recommend setting these parameters to nGenesPerm = 2000 and nBoot = 400 to achieve optimal results, as they are set by default in the function arguments.

data(DEGsmatrix)
data(dataFilt)
dataGRN <- GRN(DEGsmatrix = DEGsmatrix, TFs = sample(rownames(DEGsmatrix), 100), normCounts = dataFilt,
                   nGenesPerm = 5, kNearest = 3, nBoot = 5, DiffGenes = TRUE)

URA: Upstream Regulator Analysis

The user can perform upstream regulator analysis using the function URA. This function is applied to each DEG in the enriched gene set and its neighbors in the GRN.

data(dataGRN)
data(DEGsmatrix)
data(DiseaseList)
data(EAGenes)

dataFEA <- FEA(DEGsmatrix = DEGsmatrix)

BPselected <- dataFEA$Diseases.or.Functions.Annotation[1:5]
dataURA <- URA(dataGRN = dataGRN,
               DEGsmatrix = DEGsmatrix,
               BPname = BPselected, 
               nCores=1)

PRA: Pattern Regognition Analysis

The user can retrieve TSG/OCG candidates using either selected biological processes or a random forest classifier trained on known COSMIC OCGs/TSGs.

data(dataURA)
data(tabGrowBlock)
data(knownDriverGenes)
dataPRA <- PRA(dataURA = dataURA,
               BPname = c("apoptosis","proliferation of cells"),
               thres.role = 0)

DMA: Driver Mutation Analysis

The user can identify driver mutations with DMA in the oncogenic mediators established by PRA. The passenger or driver status is estimated with CScape-somatic.
This function will further generate three files: DEG_Mutations_Annotations.rda, Oncogenic_mediators_mutation_summary.rda and cscape_somatic_output.rda. These will be placed in the specified results-folder. The user needs to download two CScape-somatic files in order to run DMA named css_coding.vcf.gz and css_noncoding.vcf.gz, respectively. These two files can be downloaded at http://cscape-somatic.biocompute.org.uk/#download. The corresponding .tbi files (css_coding.vcf.gz.tbi and css_noncoding.vcf.gz.tbi) must also be downloaded and be placed in the same folder.

data(dataPRA)
data(dataMAF)
data(DEGsmatrix)
data(LOC_transcription)
data(LOC_translation)
data(LOC_protein)
data(NCG)
data(EncodePromoters)
dataDMA <- DMA(dataMAF = dataMAF,
               dataDEGs = DEGsmatrix, 
               dataPRA = dataPRA,
               results_folder = "DMAresults",
               coding_file = "css_coding.vcf.gz",
               noncoding_file = "css_noncoding.vcf.gz")

Level of consequence: Effect of mutations on three different levels

The user can investigate the predicted effect of different mutation types on the transcriptional level through the table LOC_transcription:

knitr::kable(LOC_transcription)
Variant_Classification SNP INS DEL DNP TNP ONP
5’Flank 1 1 1 1 1 1
5’UTR 1 1 1 1 1 1
Translation_Start_Site 0 0 0 0 0 0
Missense_Mutation 0 NA NA 0 0 0
Nonsense_Mutation 1 1 1 1 1 1
Nonstop_Mutation 0 0 0 0 0 0
Splice_Site 1 1 1 1 1 1
Splice_Region 1 1 1 1 1 1
Silent 0 NA NA 0 0 0
In_Frame_Del NA 0 0 NA NA NA
In_Frame_Ins NA 0 0 NA NA NA
Frame_Shift_Del NA 0 0 NA NA NA
Frame_Shift_Ins NA 0 0 NA NA NA
Intron 1 1 1 1 1 1
3’UTR 1 1 1 1 1 1
3’Flank 1 1 1 1 1 1
RNA 1 1 1 1 1 1
IGR 1 1 1 1 1 1

The user can investigate the predicted effect of different mutation types on the translational level through the table LOC_translation:

knitr::kable(LOC_translation)
Variant_Classification SNP INS DEL DNP TNP ONP
5’Flank 1 1 1 1 1 1
5’UTR 1 1 1 1 1 1
Translation_Start_Site 1 1 1 1 1 1
Missense_Mutation 0 NA NA 0 0 0
Nonsense_Mutation 1 1 1 1 1 1
Nonstop_Mutation 1 1 1 1 1 1
Splice_Site 1 1 1 1 1 1
Splice_Region 1 1 1 1 1 1
Silent 1 NA NA 1 1 1
In_Frame_Del NA 0 0 NA NA NA
In_Frame_Ins NA 0 0 NA NA NA
Frame_Shift_Del NA 0 0 NA NA NA
Frame_shift_Ins NA 0 0 NA NA NA
Intron 1 1 1 1 1 1
3’UTR 1 1 1 1 1 1
3’Flank 1 1 1 1 1 1
IGR 1 1 1 1 1 1
RNA 1 1 1 1 1 1

The user can investigate the predicted effect of different mutation types on the protein level through the table LOC_protein:

knitr::kable(LOC_protein)
Variant_Classification SNP INS DEL DNP TNP ONP
5’Flank 0 0 0 0 0 0
5’UTR 0 0 0 0 0 0
Translation_Start_Site 1 1 1 1 1 1
Missense_Mutation 1 NA NA 1 1 1
Nonsense_Mutation 1 1 1 1 1 1
Nonstop_Mutation 1 1 1 1 1 1
Splice_Site 1 1 1 1 1 1
Splice_Region 1 1 1 1 1 1
Silent 0 NA NA 0 0 0
In_Frame_Del NA 1 1 NA NA NA
In_Frame_Ins NA 1 1 NA NA NA
Frame_Shift_Del NA 1 1 NA NA NA
Frame_Shift_Ins NA 1 1 NA NA NA
Intron 1 1 1 1 1 1
3’UTR 0 0 0 0 0 0
3’Flank 0 0 0 0 0 0
RNA 0 0 0 0 0 0
IGR 0 0 0 0 0 0

plotNetworkHive: GRN hive visualization taking into account COSMIC cancer genes

In the following plot the nodes are separated into three groups: known tumor suppressor genes (yellow), known oncogenes (green) and the rest (gray).

data(knownDriverGenes)
data(dataGRN)
plotNetworkHive(dataGRN, knownDriverGenes, 0.55)

plotDMA: Heatmap of the driver/passenger status of mutations in TSGs/OCGs

In the following plot the driver genes with driver mutations are shown.

data(dataDMA)
data(DEG_Mutations_Annotations)
data(Oncogenic_mediators_mutation_summary)
plotDMA(DEG_Mutations_Annotations, 
        Oncogenic_mediators_mutation_summary, 
        type = 'complete', additionalFilename = "")

plotMoonlight: Heatmap of Moonlight gene z-score for the TSGs/OCGs

In the following plot the top 50 genes with the most driver mutations are visualised. The values are the moonlight gene z-score for the two biological processes

data(DEG_Mutations_Annotations)
data(Oncogenic_mediators_mutation_summary)
data(dataURA_plot)
plotMoonlight(DEG_Mutations_Annotations,
        Oncogenic_mediators_mutation_summary, 
        dataURA_plot, gene_type = "drivers", n = 50)