## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
library(CorNetto)

## ----workflow-flowchart, echo = FALSE, out.width = "100%", fig.cap = "The CorNetto workflow, from input data and prior knowledge through to rewiring validation and export."----
knitr::include_graphics("figures/flowchart.png")

## ----version-information------------------------------------------------------
c(
    R = R.version.string,
    Bioconductor = as.character(BiocManager::version()),
    CorNetto = as.character(utils::packageVersion("CorNetto"))
)

## ----install, eval = FALSE----------------------------------------------------
# if (!requireNamespace("BiocManager", quietly = TRUE)) {
#     install.packages("BiocManager")
# }
# BiocManager::install("CorNetto")

## ----load-data----------------------------------------------------------------
analysisData <- exampleAnalysisData()
knowledgeNetwork <- exampleKnowledgeNetwork()
seedNodes <- exampleSeedNodes()

analysisData
summarizeAnalysisData(analysisData, groupColumn = "clinicalGroup", quiet = TRUE)
head(knowledgeNetwork)
seedNodes

## ----measured-priors----------------------------------------------------------
measuredAssays <- c("protein", "transcript", "metabolite")
measuredKnowledgeNetwork <- knowledgeNetwork[
    knowledgeNetwork$fromAssayName %in% measuredAssays &
        knowledgeNetwork$toAssayName %in% measuredAssays,
    ,
    drop = FALSE
]

## ----dense-correlations-------------------------------------------------------
recoveredProteinNetwork <- createCorrelationNetwork(
    analysisData = analysisData,
    assayName = "protein",
    groupColumn = "clinicalGroup",
    groupLevel = "Recovered",
    correlationMethod = "pearson",
    minimumAbsoluteCorrelation = 0,
    adjustedPValueThreshold = 1,
    pAdjustMethod = "fdr",
    storeResult = FALSE
)

head(recoveredProteinNetwork)

## ----prior-guided-differential------------------------------------------------
priorGuidedDifferentialResults <- testDifferentialCorrelation(
    analysisData = analysisData,
    candidateEdgeTable = measuredKnowledgeNetwork,
    groupColumn = "clinicalGroup",
    groupLevels = c("PASC", "Recovered"),
    minimumAbsoluteCorrelation = 0,
    adjustedPValueThreshold = 1,
    pAdjustMethod = "fdr",
    storeResult = FALSE
)

priorGuidedDifferentialNetwork <- createDifferentialCorrelationNetwork(
    differentialCorrelationTable = priorGuidedDifferentialResults,
    minimumAbsoluteCorrelation = 0
)

c(nrow(priorGuidedDifferentialResults), nrow(priorGuidedDifferentialNetwork))

## ----permutation-validation---------------------------------------------------
backend <- BiocParallel::SnowParam(workers = 2, type = "SOCK")

rewiringValidation <- permuteRewiringScores(
    analysisData = analysisData,
    candidateEdgeTable = measuredKnowledgeNetwork,
    groupColumn = "clinicalGroup",
    groupLevels = c("PASC", "Recovered"),
    minimumAbsoluteCorrelation = 0,
    adjustedPValueThreshold = NULL,
    pAdjustMethod = "fdr",
    nPermutations = 99,
    seed = 1,
    # Remove the three lines below to run serially:
    verbose = TRUE,
    progressEvery = 50,
    BPPARAM = backend
)

head(rewiringValidation$rewiringTable)
rewiringValidation$inferenceStatus

## ----differential-correlation-------------------------------------------------
differentialResults <- testDifferentialCorrelation(
    analysisData = analysisData,
    groupColumn = "clinicalGroup",
    groupLevels = c("PASC", "Recovered"),
    correlationMethod = "pearson",
    minimumAbsoluteCorrelation = 0,
    adjustedPValueThreshold = 1,
    pAdjustMethod = "fdr",
    storeResult = FALSE
)

differentialNetwork <- createDifferentialCorrelationNetwork(
    differentialCorrelationTable = differentialResults,
    minimumAbsoluteCorrelation = 0
)

rewiringScores <- calculateRewiringScores(
    differentialCorrelationNetwork = differentialNetwork,
    storeResult = FALSE
)

head(rewiringScores)

## ----integrated-network-------------------------------------------------------
integratedNetwork <- combineNetworks(
    knowledgeNetwork = knowledgeNetwork,
    correlationNetwork = recoveredProteinNetwork,
    differentialCorrelationNetwork = list(
        priorGuidedDifferentialNetwork,
        differentialNetwork
    ),
    includeReverseEdges = TRUE
)

focusedNetwork <- createFocusedNetwork(
    networkEdgeTable = integratedNetwork,
    seedNodes = seedNodes,
    neighborhoodOrder = 1
)

cytoscapeTables <- prepareCytoscapeTables(
    networkEdgeTable = focusedNetwork,
    rewiringTable = rewiringScores
)

names(cytoscapeTables)
nrow(cytoscapeTables$nodes)
nrow(cytoscapeTables$edges)

## ----graph-plot, fig.width = 8, fig.height = 6--------------------------------
displayGraph <- igraph::simplify(
    igraph::as_undirected(createNetworkGraph(focusedNetwork), mode = "collapse")
)

assayStyle <- data.frame(
    assay = c("protein", "transcript", "metabolite"),
    colour = c("#2B8CBE", "#31A354", "#E6842A"),
    shape = c("circle", "square", "csquare")
)
idx <- match(igraph::V(displayGraph)$assayName, assayStyle$assay)

set.seed(1)
plot(
    displayGraph,
    layout = igraph::layout_with_fr(displayGraph),
    vertex.color = assayStyle$colour[idx],
    vertex.shape = assayStyle$shape[idx],
    vertex.label = igraph::V(displayGraph)$nodeName,
    vertex.label.cex = 0.7,
    vertex.label.color = "black",
    vertex.label.family = "sans",
    vertex.frame.color = "white",
    vertex.size = 20,
    edge.color = "grey65",
    main = "Focused CorNetto network around the seed nodes"
)
legend(
    "bottomleft",
    legend = assayStyle$assay,
    pt.bg = assayStyle$colour,
    pch = c(21, 22, 23),
    pt.cex = 1.6,
    bty = "n",
    title = "Assay"
)

## ----graph-counts-------------------------------------------------------------
c(nodes = igraph::gorder(displayGraph),
  connections = igraph::gsize(displayGraph))

## ----export-------------------------------------------------------------------
writtenFiles <- writeNetworkTables(
    networkTables = cytoscapeTables,
    directoryPath = tempdir(),
    prefix = "cornettoExample",
    fileFormat = "tsv"
)

basename(writtenFiles)

## ----citation-----------------------------------------------------------------
citation("CorNetto")

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

