Obtaining the group of analytes correlating across blocks as seen in `circosPlot`


Thanks for mixOmics . I have been finding it very useful at my end for horizontal integration. I have a query with regards to the outputs from circosPlot.

I see in my plot there are multiple correlations between variables from protein with variables from other blocks like mRNA and metabolites. Is it possible to extract the information or network from the object that shows how one variable or analyte from protein has +ve or -ve correlation with multiple analytes of other blocks (e.g. mRNA and metabolites)? In other words, I am interested to pull those analytes, group them, and characterize what biological process or molecular functions they enrich for? I did extract the corr.mat using below snippet and plotted the correlation matrix but that does not let me make such inference that I can from circosPlot. Any assistance will be appreciated.

circosPlot(MyResult.diablo.tune.P, cutoff = 0.8, line = TRUE,
           color.blocks= c('darkorchid', 'brown1', 'lightgreen'),
           color.cor = c("chocolate3","grey20"), size.labels = 1, size.variables = 0.6, size.legend = 0.8)
corMat.P <- circosPlot(MyResult.diablo.tune.P, cutoff = 0.8, ncol.legend = 2, size.legend = 0.8)
corrplot::corrplot(corMat.P, order="hclust",
                   col=brewer.pal(n=8, name="RdYlBu"),addrect = 4,tl.cex = 0.55)

Hi @vd4mmind,

Unfortunately, we do not support enrichment analyses in mixOmics.

However, you can always extract the selected variables on individual blocks and use your desired bioconductor package to perform various enrichment analyses. You can find many resources at Bioconductor - Search

Keep in mind that (in addition to the component itself) the type of contribution of variables on a given component (-ve or +ve) could be grouping factor in the functional context and might need different treatment.

You can also look at the correlated features across blocks to see if they are functionally coherent (assuming you can assess their functional type and significance from a given reference). However, for functional grouping, I would not recommend the sign of correlation, but the sign of contribution (loading), as described above.

Hope it helps,


1 Like

Hi @aljabadi ,

Thanks for the response. This is helpful. I have so far done the functional enrichment with other packages from BioC. I was trying to understand if there is a way I can add the metabolites in a functionally relevant context with the mRNA and proteins for a better biological characterization given there are some correlations and also network connectivity across blocks of omics.

Can “sign of contribution (loading)” be interpreted as up and down-regulation of a variable in the categorical classes for a particular omics block?

Hi @vd4mmind,

I am not sure, but maybe a relevance network build on the similarity matrix is what you are looking for?

blocks = c(1,2,3),
color.node = c('darkorchid', 'brown1', 'lightgreen'), 
cutoff = 0.8)

It is also possible to export it using the igraph package, in case you want to edit it in cytoscape:


my.network = network(MyResult.diablo.tune.P, blocks = c(1,2,3), color.node = c('darkorchid', 'brown1', 'lightgreen'), cutoff = 0.8)

write.graph(my.network$gR, file = "myNetwork.gml", format = "gml")


1 Like

Hi @christoa ,

Thanks for the response. An excellent reminder of the igraph usage. I will try that. I want to play around with the network via RCytoscape or any other network tools to better derive the relationship between mRNA, protein, and metabolite IDs together in sub-networks to see if there are faint enrichment of any gene ontology categories or not to get more biological contexts.



Hi @vd4mmind,

Answer: Yes, and the higher the absolute value the safer it is to assume so.

1 Like