## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
library(CorNetto)
extdataDir <- system.file("extdata", package = "CorNetto")

## ----load-prior-data----------------------------------------------------------

# Set column mapping
priorColumnMap <- c(
    fromFeatureIdentifier = "from",
    toFeatureIdentifier = "to",
    fromFeatureName = "fromName",
    toFeatureName = "toName",
    fromAssayName = "fromOmic",
    toAssayName = "toOmic",
    edgeType = "edgeType",
    edgeDirection = "edgeDirection",
    evidenceScore = "edgeWeight"
)
# Import the three synthetic edge sets
withinAssayNetwork <- readKnowledgeNetwork(
    filePath = file.path(
        extdataDir, "priorNetworks", "synthetic_within_assay.csv"
    ),
    columnMapping = priorColumnMap,
    knowledgeSource = "CorNetto synthetic within-assay"
)

crossAssayNetwork <- readKnowledgeNetwork(
    filePath = file.path(
        extdataDir, "priorNetworks", "synthetic_cross_assay.csv"
    ),
    columnMapping = priorColumnMap,
    knowledgeSource = "CorNetto synthetic cross-assay"
)

decoyNetwork <- readKnowledgeNetwork(
    filePath = file.path(
        extdataDir, "priorNetworks", "synthetic_decoy_edges.csv"
    ),
    columnMapping = priorColumnMap,
    knowledgeSource = "CorNetto synthetic decoys"
)

# Combine networks
combinedPriorNetwork <- combineKnowledgeNetworks(
    withinAssayNetwork,
    crossAssayNetwork,
    decoyNetwork,
    removeDuplicates = TRUE
)

## ----load-experimental-data---------------------------------------------------
# Import patient data
patientInformation <- read.csv(file.path(extdataDir,
                                         "covidData",
                                         "patientInformation.csv"))
rownames(patientInformation) <- patientInformation$Visit_ID

# Import omics data
dataList <- list(RNA = read.csv(file.path(extdataDir,
                                          "covidData",
                                          "rnaMatrix.csv"),
                                row.names = 1),
                 Protein  = read.csv(file.path(extdataDir,
                                               "covidData",
                                               "proteinMatrix.csv"),
                                     row.names = 1),
                 Metabolite  = read.csv(file.path(extdataDir,
                                                  "covidData",
                                                  "metaboliteMatrix.csv"),
                                        row.names = 1))

# Create analysis data
analysisData <- createAnalysisData(assayList = dataList,
                                   sampleData = patientInformation)

# Filter data for only COVID-19 patients at visit 1
analysisCovid <- filterSamples(analysisData,
                               groupColumn = "Group",
                               groupLevels = c("COVID Severe",
                                               "COVID Moderate"))
analysisCovid <- filterSamples(analysisCovid,
                               groupColumn = "Visit",
                               groupLevels = "Visit 1")

## ----validateAnalysisData-----------------------------------------------------
# Check analysis data
analysisCovid <- validateAnalysisData(analysisCovid)
# Check knowledge networks
combinedPriorNetwork <- validateKnowledgeNetwork(combinedPriorNetwork)

## ----summarizeAnalysisData----------------------------------------------------
summarizeAnalysisData(analysisCovid,
                      groupColumn = "Group")

## ----filterFeatures-----------------------------------------------------------
analysisCovid <- filterFeatures(
    analysisCovid,
    removeZeroVariance = TRUE,
    minimumVariance = 0.01
)

summarizeAnalysisData(analysisCovid)

## ----restrict-prior-network---------------------------------------------------
measuredNodeKeys <- unlist(
    lapply(
        names(MultiAssayExperiment::experiments(analysisCovid)),
        function(assayName) {
            assayObject <- MultiAssayExperiment::experiments(analysisCovid)[[assayName]]
            paste(
                assayName,
                rownames(SummarizedExperiment::assay(assayObject)),
                sep = "::"
            )
        }
    ),
    use.names = FALSE
)

unfilteredPriorSummary <- summarizeKnowledgeNetwork(
    combinedPriorNetwork,
    analysisCovid,
    quiet = TRUE
)
unfilteredPriorSummary$overall

measuredPriorNetwork <- filterNetworkByNodes(
    combinedPriorNetwork,
    nodes = measuredNodeKeys,
    mode = "both",
    nodeIdType = "key"
)

measuredPriorSummary <- summarizeKnowledgeNetwork(
    measuredPriorNetwork,
    analysisCovid,
    quiet = TRUE
)
measuredPriorSummary$overall

## ----testDifferentialCorrelation----------------------------------------------
analysisCovid <- testDifferentialCorrelation(
    analysisData = analysisCovid,
    groupColumn = "Group",
    groupLevels = c("COVID Moderate", "COVID Severe"),
    candidateEdgeTable = measuredPriorNetwork,
    correlationMethod = "pearson",
    minimumAbsoluteCorrelation = 0.3,
    adjustedPValueThreshold = 0.05,
    pAdjustMethod = "fdr",
    resultName = "differentialSparseCorrelations"
)

differentialSparseCorrelations <-
    differentialCorrelationResults(analysisCovid)[["differentialSparseCorrelations"]]

as.data.frame(differentialSparseCorrelations)


## ----createDifferentialCorrelationNetwork-------------------------------------
analysisCovid <- createDifferentialCorrelationNetwork(
    differentialCorrelationTable = differentialSparseCorrelations,
    minimumAbsoluteCorrelation = 0,
    edgeWeightMethod = "signedZScore",
    analysisData = analysisCovid,
    resultName = "differentialSparseNetwork",
    storeResult = TRUE)

differentialSparseNetwork <-
    differentialCorrelationNetworks(analysisCovid)[["differentialSparseNetwork"]]

as.data.frame(differentialSparseNetwork)


## ----calculateRewiringScores--------------------------------------------------
analysisCovid <- calculateRewiringScores(
    differentialCorrelationNetwork = differentialSparseNetwork,
    analysisData = analysisCovid,
    resultName = "differentialSparseRewiring",
    storeResult = TRUE
)

rewiringScores <- rewiringResults(analysisCovid)[["differentialSparseRewiring"]]

rewiringScores <- rewiringScores[
    order(rewiringScores$rootMeanSquareRewiringScore, decreasing = TRUE),
]

head(rewiringScores, 20)

## ----permuteRewiringScores----------------------------------------------------
analysisCovid <- permuteRewiringScores(
    analysisData = analysisCovid,
    groupColumn = "Group",
    groupLevels = c("COVID Moderate", "COVID Severe"),
    candidateEdgeTable = measuredPriorNetwork,
    correlationMethod = "pearson",
    minimumAbsoluteCorrelation = 0.3,
    adjustedPValueThreshold = 0.05,
    pAdjustMethod = "fdr",
    edgeWeightMethod = "signedZScore",
    scoreColumn = "rawRewiringScore",
    nPermutations = 99,
    seed = 1,
    keepPermutationScores = TRUE,
    resultName = "differentialSparseRewiringPermutation",
    storeResult = TRUE)


rewiringPermutation <-
    validationResults(analysisCovid)[["differentialSparseRewiringPermutation"]]

rewiringPermutation$inferenceStatus

rankedRewiring <- rewiringPermutation$rewiringTable
rankedRewiring <- rankedRewiring[
    order(
        rankedRewiring$adjustedPermutationTailProbability,
        -rankedRewiring$rawRewiringScore,
        na.last = TRUE
    ),
]

head(rankedRewiring, 20)


## ----writeNetworkTables-------------------------------------------------------
cytoscapeTables <- prepareCytoscapeTables(networkEdgeTable = differentialSparseNetwork,
                                          rewiringTable = rankedRewiring)

writeNetworkTables(cytoscapeTables,
                   directoryPath = file.path(tempdir(),
                                             "cornettoCovidSeverityNetwork"),
                   prefix = "covidModerateVsSevere",
                   fileFormat = "csv")

## ----session-info-------------------------------------------------------------
sessionInfo()

