# Suppress title check warning options(rmarkdown.html_vignette.check_title = FALSE) knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(NetCoMi)
This tutorial shows how to construct a cross-domain network (e.g. a network consisting of bacteria and fungi) using SpiecEasi's ability to estimate cross-domain associations.
We use the same data as in the "Cross domain interactions" section of the SpiecEasi tutorial.
The samples are split into two groups and cross-domain associations are computed for each group using SpiecEasi. The association matrices are then passed to NetCoMi's netConstruct() function to conduct a network comparison between the two groups.
Note:
This tutorial explains how two cross-domain networks are constructed and compared. For constructing a single network, skip the step where the data are split into two groups and perform the framework only for a single data set (i.e. pass the estimated association matrix to the "data" argument of netConstruct() and continue with NetCoMi's standard pipeline).
library(SpiecEasi) library(phyloseq) data(hmp2) # Store count matrices (taxa are columns) counts_hmp216S <- as.matrix(t(phyloseq::otu_table(hmp216S)@.Data)) counts_hmp2prot <- as.matrix(t(phyloseq::otu_table(hmp2prot)@.Data)) # Assume, the first 23 samples are in one group and the remaining 24 samples in the other group group_vec <- c(rep(1, 23), rep(2, 24)) # Split count matrices counts_hmp216S_gr1 <- counts_hmp216S[group_vec == 1, ] counts_hmp216S_gr2 <- counts_hmp216S[group_vec == 2, ] counts_hmp2prot_gr1 <- counts_hmp2prot[group_vec == 1, ] counts_hmp2prot_gr2 <- counts_hmp2prot[group_vec == 2, ] set.seed(123456) # Run SpiecEasi and create association matrix for group 1 # Note: Increase nlambda and rep.num for real data sets spiec_result_gr1 <- multi.spiec.easi(list(counts_hmp216S_gr1, counts_hmp2prot_gr1), method='mb', nlambda=10, lambda.min.ratio=1e-2, pulsar.params = list(thresh = 0.05, rep.num = 10)) assoMat1 <- SpiecEasi::symBeta(SpiecEasi::getOptBeta(spiec_result_gr1), mode = "ave") assoMat1 <- as.matrix(assoMat1) # Run SpiecEasi and create association matrix for group 2 # Note: Increase nlambda and rep.num for real data sets spiec_result_gr2 <- multi.spiec.easi(list(counts_hmp216S_gr2, counts_hmp2prot_gr2), method='mb', nlambda=10, lambda.min.ratio=1e-2, pulsar.params = list(thresh = 0.05, rep.num = 10)) assoMat2 <- SpiecEasi::symBeta(SpiecEasi::getOptBeta(spiec_result_gr2), mode = "ave") assoMat2 <- as.matrix(assoMat2) # Get taxa names taxnames <- c(taxa_names(hmp216S), taxa_names(hmp2prot)) colnames(assoMat1) <- rownames(assoMat1) <- taxnames diag(assoMat1) <- 1 colnames(assoMat2) <- rownames(assoMat2) <- taxnames diag(assoMat2) <- 1
# NetCoMi workflow library(NetCoMi) # Network construction (pass association matrices to netConstruct) # - sparsMethod must be set to "none" because sparsification is already included in SpiecEasi net_hmp_16S_prot <- netConstruct(data = assoMat1, data2 = assoMat2, dataType = "condDependence", sparsMethod = "none") # Network analysis netprops_hmp_16S_prot <- netAnalyze(net_hmp_16S_prot, hubPar = "eigenvector")
nodeCols <- c(rep("lightblue", ntaxa(hmp216S)), rep("orange", ntaxa(hmp2prot))) names(nodeCols) <- taxnames plot(netprops_hmp_16S_prot, sameLayout = TRUE, layoutGroup = "union", nodeColor = "colorVec", colorVec = nodeCols, nodeSize = "eigen", nodeSizeSpread = 2, labelScale = FALSE, cexNodes = 2, cexLabels = 2, cexHubLabels = 2.5, cexTitle = 3.8, groupNames = c("group1", "group2")) legend(-0.2, 1.2, cex = 3, pt.cex = 4, legend = c("HMP2 16S", "HMP2 protein"), col = c("lightblue", "orange"), bty = "n", pch = 16)
# Network comparison # - Permutation tests cannot be performed because the association matrices are # used for network construction. For permutation tests, however, the count # data are needed. netcomp_hmp_16S_prot <- netCompare(netprops_hmp_16S_prot, permTest = FALSE) summary(netcomp_hmp_16S_prot, groupNames = c("group1", "group2"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.