This vignette is an applied companion to
vignette("CorNetto"), which introduces the package,
motivates it against related Bioconductor software, and covers
installation and the full function reference. Read that one first.
Here the same workflow is run end to end on a small packaged subset
of proteomic, transcriptomic, and metabolomic data from moderate and
severe COVID-19 patients. The subset exists to demonstrate the workflow
during package checks; it is not sized for biological discovery, and its
provenance is documented in
inst/scripts/covid-example-data.md. The candidate edges
used below are entirely synthetic. They exercise network import,
filtering, differential correlation, and node scoring, but they do not
represent biological evidence.
Constraining the calculations to an explicit candidate network keeps this example fast and avoids dense all-pairs correlations.
CorNetto accepts prior-knowledge networks from external resources when their columns can be mapped to the package schema. For this runnable example, the package instead supplies three deterministic synthetic networks. This avoids redistributing third-party interaction data and keeps the example independent of database versions and licenses.
The within-assay and cross-assay files contain invented edges between measured features. The decoy file contains invented edges with one or two unmeasured endpoints, so the filtering step below has observable work to do. Edge weights and directions are illustrative only.
readKnowledgeNetwork() function takes a delimited table,
optionally remaps the input column names to a common convention, and
standardizes it for downstream CorNetto functions. The minimum columns
required are fromFeatureIdentifier,
toFeatureIdentifier, fromAssayName, and
toAssayName. Other columns are optional but can be useful.
The output is a standardized S4Vectors::DataFrame.
combineKnowledgeNetworks() takes these standardized
networks and combines their rows while removing duplicate edges
(optional).
# 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
)Currently CorNetto is able to accept any normalised and fully preprocessed abundance or count matrix relating to proteomics, transcriptomics, or metabolomics.
createAnalysisData() creates a MultiAssayExperiment from
these normalized assay objects and sample metadata.
filterSamples() filters the MultiAssayExperiment based
on a group column and a range of values.
# 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")Following data importation, objects can be checked for structural conformity and diagnostic summaries.
validateAnalysisData() checks the CorNetto analysis
object for structural conformity, specifically:
validateKnowledgeNetwork() checks the CorNetto
prior-knowledge edge table for structural conformity, specifically:
These functions also run quietly after most CorNetto functions to ensure conformity of output.
# Check analysis data
analysisCovid <- validateAnalysisData(analysisCovid)
#> Analysis data object is structured correctly for CorNetto.
# Check knowledge networks
combinedPriorNetwork <- validateKnowledgeNetwork(combinedPriorNetwork)
#> Knowledge network is structured correctly for CorNetto.summarizeAnalysisData() asks “what does this analysis
object look like, and are there analysis risks?” rather than only asking
whether the object is structurally valid.
summarizeAnalysisData(analysisCovid,
groupColumn = "Group")
#> Warning: Assay `RNA` has 6 zero-variance features.
#> $assays
#> DataFrame with 3 rows and 9 columns
#> assayName featureCount sampleCount missingValueCount missingValueFraction
#> <character> <integer> <integer> <integer> <numeric>
#> 1 RNA 51 24 0 0
#> 2 Protein 63 24 0 0
#> 3 Metabolite 4 24 0 0
#> zeroVarianceFeatureCount allMissingFeatureCount highMissingFeatureCount
#> <integer> <integer> <integer>
#> 1 6 0 0
#> 2 0 0 0
#> 3 0 0 0
#> samplesMissingFromColData
#> <integer>
#> 1 0
#> 2 0
#> 3 0
#>
#> $samples
#> $samples$overall
#> DataFrame with 1 row and 2 columns
#> sampleCount samplesInAnyAssay
#> <integer> <integer>
#> 1 24 24
#>
#> $samples$groups
#> DataFrame with 2 rows and 2 columns
#> groupLevel sampleCount
#> <character> <integer>
#> 1 COVID Moderate 12
#> 2 COVID Severe 12
#>
#>
#> $warnings
#> [1] "Assay `RNA` has 6 zero-variance features."The output reports the number of features per assay, the number of samples per assay, and the number of samples in each selected group. In this small packaged example there are 12 moderate COVID-19 samples and 12 severe COVID-19 samples.
Zero-variance and near-zero-variance features should be removed
before correlation analysis. These can be removed with
removeZeroVariance = TRUE and minimumVariance
in filterFeatures().
analysisCovid <- filterFeatures(
analysisCovid,
removeZeroVariance = TRUE,
minimumVariance = 0.01
)
summarizeAnalysisData(analysisCovid)
#> $assays
#> DataFrame with 3 rows and 9 columns
#> assayName featureCount sampleCount missingValueCount missingValueFraction
#> <character> <integer> <integer> <integer> <numeric>
#> 1 RNA 44 24 0 0
#> 2 Protein 63 24 0 0
#> 3 Metabolite 4 24 0 0
#> zeroVarianceFeatureCount allMissingFeatureCount highMissingFeatureCount
#> <integer> <integer> <integer>
#> 1 0 0 0
#> 2 0 0 0
#> 3 0 0 0
#> samplesMissingFromColData
#> <integer>
#> 1 0
#> 2 0
#> 3 0
#>
#> $samples
#> $samples$overall
#> DataFrame with 1 row and 2 columns
#> sampleCount samplesInAnyAssay
#> <integer> <integer>
#> 1 24 24
#>
#> $samples$groups
#> NULL
#>
#>
#> $warnings
#> character(0)For the sparse workflow, candidate edges are restricted to edges whose endpoint features remain in the filtered analysis object. The first summary shows that the combined synthetic network includes deliberately unmeasured endpoints. The second summary shows the network after requiring both endpoints to be measured.
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
#> DataFrame with 1 row and 8 columns
#> totalEdges uniqueNodes duplicateEdges missingFeatureNameEdges
#> <integer> <integer> <integer> <integer>
#> 1 183 118 0 0
#> measuredAssayEdges unmeasuredAssayEdges measuredFeatureEdges
#> <integer> <integer> <integer>
#> 1 181 2 175
#> unmeasuredFeatureEdges
#> <integer>
#> 1 8
measuredPriorNetwork <- filterNetworkByNodes(
combinedPriorNetwork,
nodes = measuredNodeKeys,
mode = "both",
nodeIdType = "key"
)
measuredPriorSummary <- summarizeKnowledgeNetwork(
measuredPriorNetwork,
analysisCovid,
quiet = TRUE
)
measuredPriorSummary$overall
#> DataFrame with 1 row and 8 columns
#> totalEdges uniqueNodes duplicateEdges missingFeatureNameEdges
#> <integer> <integer> <integer> <integer>
#> 1 175 111 0 0
#> measuredAssayEdges unmeasuredAssayEdges measuredFeatureEdges
#> <integer> <integer> <integer>
#> 1 175 0 175
#> unmeasuredFeatureEdges
#> <integer>
#> 1 0The main function for testing differential correlations between
groups is testDifferentialCorrelation. Here it tests every
measured edge in the synthetic candidate network supplied through
candidateEdgeTable. The result illustrates the software
workflow and is not a prior-supported biological analysis.
The differential correlation result is added to
analysisCovid, then extracted with
differentialCorrelationResults(). Alternatively,
testDifferentialCorrelation() can directly return the table
with storeResult = FALSE.
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)
#> fromFeatureIdentifier toFeatureIdentifier fromFeatureName toFeatureName
#> 1 ENSG00000132485 ENSG00000132953 ENSG00000132485 ENSG00000132953
#> 2 ENSG00000088179 ENSG00000091009 ENSG00000088179 ENSG00000091009
#> 3 P49720 P60900 P49720 P60900
#> 4 P25788 P40306 P25788 P40306
#> 5 P40306 O14818 P40306 O14818
#> 6 O14818 P28062 O14818 P28062
#> 7 P28062 Q99436 P28062 Q99436
#> fromAssayName toAssayName edgeType edgeDirection
#> 1 RNA RNA differentialCorrelation <NA>
#> 2 RNA RNA differentialCorrelation <NA>
#> 3 Protein Protein differentialCorrelation <NA>
#> 4 Protein Protein differentialCorrelation <NA>
#> 5 Protein Protein differentialCorrelation <NA>
#> 6 Protein Protein differentialCorrelation <NA>
#> 7 Protein Protein differentialCorrelation <NA>
#> sourceType correlationScope correlationMethod
#> 1 differentialCorrelationTest withinOmic pearson
#> 2 differentialCorrelationTest withinOmic pearson
#> 3 differentialCorrelationTest withinOmic pearson
#> 4 differentialCorrelationTest withinOmic pearson
#> 5 differentialCorrelationTest withinOmic pearson
#> 6 differentialCorrelationTest withinOmic pearson
#> 7 differentialCorrelationTest withinOmic pearson
#> knowledgeSource groupName comparisonName
#> 1 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 2 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 3 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 4 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 5 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 6 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 7 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> correlationValue group1CorrelationValue group2CorrelationValue pValue
#> 1 NA 0.902032305 0.5521418 0.06760191
#> 2 NA 0.864196626 0.2718904 0.02876993
#> 3 NA 0.498555926 0.8801615 0.07861328
#> 4 NA 0.526881781 0.8826141 0.08902387
#> 5 NA 0.754467699 0.9130670 0.23284375
#> 6 NA 0.124513627 0.8523859 0.01562476
#> 7 NA 0.004922372 0.8328467 0.01142136
#> adjustedPValue group1PValue group2PValue group1AdjustedPValue
#> 1 0.5158465 6.017295e-05 6.268702e-02 0.01028957
#> 2 0.3692840 2.883267e-04 3.926101e-01 0.02465193
#> 3 0.5158465 9.898339e-02 1.586563e-04 0.52306645
#> 4 0.5158465 7.839537e-02 1.436856e-04 0.47877174
#> 5 0.7508336 4.573930e-03 3.374331e-05 0.11508572
#> 6 0.3095907 6.998262e-01 4.284883e-04 0.94210602
#> 7 0.3017165 9.878867e-01 7.706156e-04 0.99046955
#> group2AdjustedPValue zScoreDifference sampleCount group1SampleCount
#> 1 0.272940781 -1.827651 NA 12
#> 2 0.685064612 -2.186625 NA 12
#> 3 0.009043412 1.758789 NA 12
#> 4 0.009043412 1.700569 NA 12
#> 5 0.005770107 1.193065 NA 12
#> 6 0.018317873 2.417565 NA 12
#> 7 0.026355053 2.529536 NA 12
#> group2SampleCount edgeWeight evidenceScore isDirected
#> 1 12 NA 0.90 FALSE
#> 2 12 NA 0.65 FALSE
#> 3 12 NA 0.65 FALSE
#> 4 12 NA 0.95 FALSE
#> 5 12 NA 0.55 FALSE
#> 6 12 NA 0.60 FALSE
#> 7 12 NA 0.65 FALSEThe next step builds a differential correlation network from the
differentialSparseCorrelations table. The function returns
the network directly unless storeResult = TRUE, in which
case analysisData and resultName are
supplied.
Here the resulting network is not filtered further. In a real
analysis, minimumAbsoluteCorrelation and
differenceAdjustedPValueThreshold can be tightened to
remove weakly correlated or non-significant edges.
analysisCovid <- createDifferentialCorrelationNetwork(
differentialCorrelationTable = differentialSparseCorrelations,
minimumAbsoluteCorrelation = 0,
edgeWeightMethod = "signedZScore",
analysisData = analysisCovid,
resultName = "differentialSparseNetwork",
storeResult = TRUE)
differentialSparseNetwork <-
differentialCorrelationNetworks(analysisCovid)[["differentialSparseNetwork"]]
as.data.frame(differentialSparseNetwork)
#> fromFeatureIdentifier toFeatureIdentifier fromFeatureName toFeatureName
#> 1 ENSG00000132485 ENSG00000132953 ENSG00000132485 ENSG00000132953
#> 2 ENSG00000088179 ENSG00000091009 ENSG00000088179 ENSG00000091009
#> 3 P49720 P60900 P49720 P60900
#> 4 P25788 P40306 P25788 P40306
#> 5 P40306 O14818 P40306 O14818
#> 6 O14818 P28062 O14818 P28062
#> 7 P28062 Q99436 P28062 Q99436
#> fromAssayName toAssayName edgeType edgeDirection
#> 1 RNA RNA differentialCorrelation strengthenedPositive
#> 2 RNA RNA differentialCorrelation strengthenedPositive
#> 3 Protein Protein differentialCorrelation weakenedPositive
#> 4 Protein Protein differentialCorrelation weakenedPositive
#> 5 Protein Protein differentialCorrelation weakenedPositive
#> 6 Protein Protein differentialCorrelation weakenedPositive
#> 7 Protein Protein differentialCorrelation weakenedPositive
#> sourceType correlationScope correlationMethod
#> 1 differentialCorrelation withinOmic pearson
#> 2 differentialCorrelation withinOmic pearson
#> 3 differentialCorrelation withinOmic pearson
#> 4 differentialCorrelation withinOmic pearson
#> 5 differentialCorrelation withinOmic pearson
#> 6 differentialCorrelation withinOmic pearson
#> 7 differentialCorrelation withinOmic pearson
#> knowledgeSource groupName comparisonName
#> 1 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 2 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 3 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 4 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 5 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 6 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> 7 CorNetto synthetic within-assay <NA> COVID Moderate_vs_COVID Severe
#> correlationValue group1CorrelationValue group2CorrelationValue pValue
#> 1 NA 0.902032305 0.5521418 0.06760191
#> 2 NA 0.864196626 0.2718904 0.02876993
#> 3 NA 0.498555926 0.8801615 0.07861328
#> 4 NA 0.526881781 0.8826141 0.08902387
#> 5 NA 0.754467699 0.9130670 0.23284375
#> 6 NA 0.124513627 0.8523859 0.01562476
#> 7 NA 0.004922372 0.8328467 0.01142136
#> adjustedPValue group1PValue group2PValue group1AdjustedPValue
#> 1 0.5158465 6.017295e-05 6.268702e-02 0.01028957
#> 2 0.3692840 2.883267e-04 3.926101e-01 0.02465193
#> 3 0.5158465 9.898339e-02 1.586563e-04 0.52306645
#> 4 0.5158465 7.839537e-02 1.436856e-04 0.47877174
#> 5 0.7508336 4.573930e-03 3.374331e-05 0.11508572
#> 6 0.3095907 6.998262e-01 4.284883e-04 0.94210602
#> 7 0.3017165 9.878867e-01 7.706156e-04 0.99046955
#> group2AdjustedPValue zScoreDifference sampleCount group1SampleCount
#> 1 0.272940781 -1.827651 NA 12
#> 2 0.685064612 -2.186625 NA 12
#> 3 0.009043412 1.758789 NA 12
#> 4 0.009043412 1.700569 NA 12
#> 5 0.005770107 1.193065 NA 12
#> 6 0.018317873 2.417565 NA 12
#> 7 0.026355053 2.529536 NA 12
#> group2SampleCount edgeWeight evidenceScore isDirected
#> 1 12 -1.827651 0.90 FALSE
#> 2 12 -2.186625 0.65 FALSE
#> 3 12 1.758789 0.65 FALSE
#> 4 12 1.700569 0.95 FALSE
#> 5 12 1.193065 0.55 FALSE
#> 6 12 2.417565 0.60 FALSE
#> 7 12 2.529536 0.65 FALSERewiring scores summarize the amount of differential-correlation
signal incident on each node in the differential network. Here the
rewiring table is stored in analysisCovid and extracted
with rewiringResults().
analysisCovid <- calculateRewiringScores(
differentialCorrelationNetwork = differentialSparseNetwork,
analysisData = analysisCovid,
resultName = "differentialSparseRewiring",
storeResult = TRUE
)
rewiringScores <- rewiringResults(analysisCovid)[["differentialSparseRewiring"]]
rewiringScores <- rewiringScores[
order(rewiringScores$rootMeanSquareRewiringScore, decreasing = TRUE),
]
head(rewiringScores, 20)
#> DataFrame with 11 rows and 9 columns
#> nodeKey nodeIdentifier nodeName assayName
#> <character> <character> <character> <character>
#> 1 Protein::Q99436 Q99436 Q99436 Protein
#> 2 Protein::P28062 P28062 P28062 Protein
#> 3 RNA::ENSG00000088179 ENSG00000088179 ENSG00000088179 RNA
#> 4 RNA::ENSG00000091009 ENSG00000091009 ENSG00000091009 RNA
#> 5 Protein::O14818 O14818 O14818 Protein
#> 6 RNA::ENSG00000132485 ENSG00000132485 ENSG00000132485 RNA
#> 7 RNA::ENSG00000132953 ENSG00000132953 ENSG00000132953 RNA
#> 8 Protein::P49720 P49720 P49720 Protein
#> 9 Protein::P60900 P60900 P60900 Protein
#> 10 Protein::P25788 P25788 P25788 Protein
#> 11 Protein::P40306 P40306 P40306 Protein
#> totalConnections rawRewiringScore rootMeanSquareRewiringScore degreeBin
#> <integer> <numeric> <numeric> <character>
#> 1 1 2.52954 2.52954 [0,1]
#> 2 2 3.49902 2.47418 (1,2]
#> 3 1 2.18662 2.18662 [0,1]
#> 4 1 2.18662 2.18662 [0,1]
#> 5 2 2.69593 1.90631 (1,2]
#> 6 1 1.82765 1.82765 [0,1]
#> 7 1 1.82765 1.82765 [0,1]
#> 8 1 1.75879 1.75879 [0,1]
#> 9 1 1.75879 1.75879 [0,1]
#> 10 1 1.70057 1.70057 [0,1]
#> 11 2 2.07734 1.46890 (1,2]
#> degreeMatchedZScore
#> <numeric>
#> 1 1.889753
#> 2 NA
#> 3 0.727403
#> 4 0.727403
#> 5 NA
#> 6 -0.489392
#> 7 -0.489392
#> 8 -0.722810
#> 9 -0.722810
#> 10 -0.920155
#> 11 NApermuteRewiringScores() permutes the supplied group
labels, reruns the differential correlation testing, rebuilds the
networks, and calculates node-level permutation tail probabilities. This
example retains the observed correlation and adjusted-p filters used
above, so its output is a conditional ranking, not a randomization
p-value. This vignette uses 99 Monte Carlo permutations so that package
checks run quickly. Assignments are sampled independently and can
repeat; exact enumeration is not implemented.
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)
#> Warning: Observed-data edge filtering is active; permutation tail probabilities
#> are conditional rankings.
rewiringPermutation <-
validationResults(analysisCovid)[["differentialSparseRewiringPermutation"]]
rewiringPermutation$inferenceStatus
#> [1] "conditional ranking"
rankedRewiring <- rewiringPermutation$rewiringTable
rankedRewiring <- rankedRewiring[
order(
rankedRewiring$adjustedPermutationTailProbability,
-rankedRewiring$rawRewiringScore,
na.last = TRUE
),
]
head(rankedRewiring, 20)
#> DataFrame with 11 rows and 18 columns
#> nodeKey nodeIdentifier nodeName assayName
#> <character> <character> <character> <character>
#> 1 Protein::P28062 P28062 P28062 Protein
#> 2 Protein::Q99436 Q99436 Q99436 Protein
#> 3 RNA::ENSG00000088179 ENSG00000088179 ENSG00000088179 RNA
#> 4 RNA::ENSG00000091009 ENSG00000091009 ENSG00000091009 RNA
#> 5 Protein::O14818 O14818 O14818 Protein
#> 6 RNA::ENSG00000132485 ENSG00000132485 ENSG00000132485 RNA
#> 7 RNA::ENSG00000132953 ENSG00000132953 ENSG00000132953 RNA
#> 8 Protein::P49720 P49720 P49720 Protein
#> 9 Protein::P60900 P60900 P60900 Protein
#> 10 Protein::P25788 P25788 P25788 Protein
#> 11 Protein::P40306 P40306 P40306 Protein
#> totalConnections rawRewiringScore rootMeanSquareRewiringScore degreeBin
#> <integer> <numeric> <numeric> <character>
#> 1 2 3.49902 2.47418 (1,2]
#> 2 1 2.52954 2.52954 [0,1]
#> 3 1 2.18662 2.18662 [0,1]
#> 4 1 2.18662 2.18662 [0,1]
#> 5 2 2.69593 1.90631 (1,2]
#> 6 1 1.82765 1.82765 [0,1]
#> 7 1 1.82765 1.82765 [0,1]
#> 8 1 1.75879 1.75879 [0,1]
#> 9 1 1.75879 1.75879 [0,1]
#> 10 1 1.70057 1.70057 [0,1]
#> 11 2 2.07734 1.46890 (1,2]
#> degreeMatchedZScore permutationTailProbability
#> <numeric> <numeric>
#> 1 NA 0.06
#> 2 1.889753 0.06
#> 3 0.727403 0.04
#> 4 0.727403 0.04
#> 5 NA 0.17
#> 6 -0.489392 0.19
#> 7 -0.489392 0.19
#> 8 -0.722810 0.20
#> 9 -0.722810 0.20
#> 10 -0.920155 0.28
#> 11 NA 0.33
#> adjustedPermutationTailProbability nullMeanScore nullSdScore
#> <numeric> <numeric> <numeric>
#> 1 0.165000 1.582086 1.035090
#> 2 0.165000 1.060738 0.841214
#> 3 0.165000 0.852394 0.641887
#> 4 0.165000 0.852394 0.641887
#> 5 0.244444 1.650041 0.947227
#> 6 0.244444 1.110976 0.706074
#> 7 0.244444 1.110976 0.706074
#> 8 0.244444 0.982580 0.766584
#> 9 0.244444 0.982580 0.766584
#> 10 0.308000 1.315043 0.960308
#> 11 0.330000 1.780760 1.165209
#> contributingPermutations scoreColumn nPermutations blockColumn
#> <integer> <character> <integer> <character>
#> 1 99 rawRewiringScore 99 NA
#> 2 99 rawRewiringScore 99 NA
#> 3 99 rawRewiringScore 99 NA
#> 4 99 rawRewiringScore 99 NA
#> 5 99 rawRewiringScore 99 NA
#> 6 99 rawRewiringScore 99 NA
#> 7 99 rawRewiringScore 99 NA
#> 8 99 rawRewiringScore 99 NA
#> 9 99 rawRewiringScore 99 NA
#> 10 99 rawRewiringScore 99 NA
#> 11 99 rawRewiringScore 99 NA
#> inferenceStatus
#> <character>
#> 1 conditional ranking
#> 2 conditional ranking
#> 3 conditional ranking
#> 4 conditional ranking
#> 5 conditional ranking
#> 6 conditional ranking
#> 7 conditional ranking
#> 8 conditional ranking
#> 9 conditional ranking
#> 10 conditional ranking
#> 11 conditional rankingOnce results are generated, the network and node rewiring scores can
be supplied to prepareCytoscapeTables() to create tables
that can be imported into Cytoscape for further network analysis.
writeNetworkTables() writes the node and edge tables to
a specified directory. The vignette writes to tempdir() so
package checks do not write into the user’s working directory.
sessionInfo()
#> R version 4.6.1 (2026-06-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 26.04.1 LTS
#>
#> Matrix products: default
#> BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.32.so; LAPACK version 3.12.0
#>
#> locale:
#> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
#> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
#> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
#> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
#> [9] LC_ADDRESS=C LC_TELEPHONE=C
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
#>
#> time zone: Etc/UTC
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] CorNetto_0.99.1 BiocStyle_2.41.0
#>
#> loaded via a namespace (and not attached):
#> [1] sass_0.4.10 generics_0.1.4
#> [3] SparseArray_1.13.2 lattice_0.23-1
#> [5] digest_0.6.39 magrittr_2.0.5
#> [7] evaluate_1.0.5 grid_4.6.1
#> [9] fastmap_1.2.0 jsonlite_2.0.0
#> [11] Matrix_1.7-6 BiocManager_1.30.27
#> [13] codetools_0.2-20 jquerylib_0.1.4
#> [15] abind_1.4-8 cli_3.6.6
#> [17] rlang_1.3.0 XVector_0.53.0
#> [19] Biobase_2.73.2 withr_3.0.3
#> [21] cachem_1.1.0 DelayedArray_0.39.6
#> [23] yaml_2.3.12 otel_0.2.0
#> [25] BiocBaseUtils_1.15.1 S4Arrays_1.13.0
#> [27] tools_4.6.1 parallel_4.6.1
#> [29] BiocParallel_1.47.0 SummarizedExperiment_1.43.0
#> [31] BiocGenerics_0.59.12 MultiAssayExperiment_1.39.1
#> [33] buildtools_1.0.0 R6_2.6.1
#> [35] matrixStats_1.5.0 stats4_4.6.1
#> [37] lifecycle_1.0.5 Seqinfo_1.3.2
#> [39] S4Vectors_0.51.10 IRanges_2.47.5
#> [41] pkgconfig_2.0.3 bslib_0.12.0
#> [43] xfun_0.60 GenomicRanges_1.65.4
#> [45] sys_3.4.3 MatrixGenerics_1.25.0
#> [47] knitr_1.52 htmltools_0.5.9
#> [49] snow_0.4-4 igraph_2.3.3
#> [51] rmarkdown_2.32 maketools_1.3.2
#> [53] compiler_4.6.1