# Install and load the latest version of miRsponge package
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("miRspongeR", version = "3.9")
library(miRspongeR)

# Load data source including matched miRNA and mRNA expression data, miRNA-target interactions, MREs information, ground truth, and survival data.
ExpData <- read.csv("DEA_miR_mR_BRCA.csv", header=FALSE, sep=",")
miRTarget <- read.csv("miRTarBase_SE_WR.csv", header=TRUE, sep=",")
mres <- read.csv("MREs.csv", header=TRUE, sep=",")
Groundtruthcsv <- system.file("extdata", "Groundtruth.csv", package="miRspongeR")
Groundtruth <- read.csv(Groundtruthcsv, header=TRUE, sep=",")
SurvData <- read.csv("SurvData.csv", header=TRUE, sep=",")

# Running 8 built-in methods for identifying BRCA-related miRNA sponge interactions
miRHomologyceRInt <- spongeMethod(miRTarget, padjustvaluecutoff = 0.05, method = "miRHomology")
pcceRInt <- spongeMethod(miRTarget, ExpData, padjustvaluecutoff = 0.05, method = "pc")
sppcceRInt <- spongeMethod(miRTarget, ExpData, padjustvaluecutoff = 0.05, senscorcutoff = 0.1, method = "sppc")
hermesceRInt <- spongeMethod(miRTarget, ExpData, num_perm = 100, padjustvaluecutoff = 0.05, method = "hermes")
ppcceRInt <- spongeMethod(miRTarget, ExpData, num_perm = 100, padjustvaluecutoff = 0.05, method = "ppc")
muTaMEceRInt <- spongeMethod(miRTarget, mres = mres, padjustvaluecutoff = 0.05, scorecutoff = 0.5, method = "muTaME")
cerniaceRInt <- spongeMethod(miRTarget, ExpData, mres, padjustvaluecutoff = 0.05, scorecutoff = 0.5, method = "cernia")
integrateceRInt <- integrateMethod(list(miRHomologyceRInt[, 1:2], pcceRInt[, 1:2], sppcceRInt[, 1:2], hermesceRInt[, 1:2], ppcceRInt[, 1:2], muTaMEceRInt[, 1:2], cerniaceRInt[, 1:2]), Intersect_num = 3)

# Validation of BRCA-related miRNA sponge interactions identified by 8 built-in methods
miRHomologyceRInt_validation <- spongeValidate(miRHomologyceRInt[, 1:2], directed = FALSE, Groundtruth)
pcceRInt_validation <- spongeValidate(pcceRInt[, 1:2], directed = FALSE, Groundtruth)
sppcceRInt_validation <- spongeValidate(sppcceRInt[, 1:2], directed = FALSE, Groundtruth)
hermesceRInt_validation <- spongeValidate(hermesceRInt[, 1:2], directed = FALSE, Groundtruth)
ppcceRInt_validation <- spongeValidate(ppcceRInt[, 1:2], directed = FALSE, Groundtruth)
muTaMEceRInt_validation <- spongeValidate(muTaMEceRInt[, 1:2], directed = FALSE, Groundtruth)
cerniaceRInt_validation <- spongeValidate(cerniaceRInt[, 1:2], directed = FALSE, Groundtruth)
integrateceRInt_validation <- spongeValidate(integrateceRInt[, 1:2], directed = FALSE, Groundtruth)

# Module identification from BRCA-related miRNA sponge interaction network identified by integrative method
spongenetwork_Cluster_FN <- netModule(integrateceRInt[, 1:2], method = "FN")
spongenetwork_Cluster_MCL <- netModule(integrateceRInt[, 1:2], method = "MCL")
spongenetwork_Cluster_LINKCOMM <- netModule(integrateceRInt[, 1:2], method = "LINKCOMM")
spongenetwork_Cluster_MCODE <- netModule(integrateceRInt[, 1:2], method = "MCODE")

# Disease and functional enrichment analysis of BRCA-related miRNA sponge modules 
sponge_Module_DEA_FN <- moduleDEA(spongenetwork_Cluster_FN)
sponge_Module_FEA_FN <- moduleFEA(spongenetwork_Cluster_FN)
sponge_Module_DEA_MCL <- moduleDEA(spongenetwork_Cluster_MCL)
sponge_Module_FEA_MCL <- moduleFEA(spongenetwork_Cluster_MCL)
sponge_Module_DEA_LINKCOMM <- moduleDEA(spongenetwork_Cluster_LINKCOMM)
sponge_Module_FEA_LINKCOMM <- moduleFEA(spongenetwork_Cluster_LINKCOMM)
sponge_Module_DEA_MCODE <- moduleDEA(spongenetwork_Cluster_MCODE)
sponge_Module_FEA_MCODE <- moduleFEA(spongenetwork_Cluster_MCODE)

# Survival analysis of BRCA-related miRNA sponge modules
sponge_Module_Survival_FN <- moduleSurvival(spongenetwork_Cluster_FN, ExpData, SurvData, devidePercentage=.5)
sponge_Module_Survival_MCL <- moduleSurvival(spongenetwork_Cluster_MCL, ExpData, SurvData, devidePercentage=.5)
sponge_Module_Survival_LINKCOMM <- moduleSurvival(spongenetwork_Cluster_LINKCOMM, ExpData, SurvData, devidePercentage=.5)
sponge_Module_Survival_MCODE <- moduleSurvival(spongenetwork_Cluster_MCODE, ExpData, SurvData, devidePercentage=.5)

# Creat UpSet figure for identifying BRCA-related miRNA sponge interactions from 7 built-in methods
library(UpSetR)
ceRInt_list <- fromList(list(miRHomology=miRHomologyceRInt[, 1:2], pc=pcceRInt[, 1:2], sppc=sppcceRInt[, 1:2], hermes=hermesceRInt[, 1:2], ppc=ppcceRInt[, 1:2], muTaME=muTaMEceRInt[, 1:2], cernia=cerniaceRInt[, 1:2]))

upset(ceRInt_list, sets = c("miRHomology", "pc","sppc", "hermes", "ppc", "muTaME", "cernia"), keep.order = "TRUE", order.by = "degree", decreasing = TRUE)


