How to plot miRNA, gene expression and functional analysis together
This post should show you an easy way to get the following data type integrated into a figure:
- functional enrichment analysis
- gene expression data from any technology
- miRNA expression data from any technology
I am using the function
isoNetwork from the package
isomiRs, that of
course is developed by me :) My ego is not that big, it is just I wanted
a figure showing that information, and I couldn’t find any at a time,
but if you know any, tweet me about it to @lopantano.
This function needs some pre-computed information, like the normalized expression and the targeted genes by miRNAs. Normally, the significant genes and miRNAs from a differentially expression analysis would do it.
The first requirement is two have these two datasets into a SummarizedExperiment object As an example, I am using the published data from Folic Acid Mouse model (GSE65267) that has been analyzed with bcbio-nextgen pipeline and bcbioRNASeq package.
I saved these analysis into an R object that contains:
- fa_mrna: gene expression
- fa_mirna: miRNA expression
- fa_cold: metadata
From that, I ran DESeq2 to get the significant genes and miRNAs from the comparison day14 vs day0 (normal).
R> load("fa_isonetwork.rda") R> library(isomiRs) R> library(DESeq2) R> library(SummarizedExperiment) R> R> mi_cold = fa_cold[colnames(fa_mirna), , drop = F] R> mi_dse = DESeqDataSetFromMatrix(round(2^fa_mirna), mi_cold, design = ~day) R> mi_dse = DESeq(mi_dse) R> mi_res = results(mi_dse, name = "day_day14_vs_normal") R> mi_res = mi_res[!is.na(mi_res$padj), ] R> mi_top = row.names(mi_res[mi_res$padj < 0.05, ]) R> mi_rse = SummarizedExperiment(assays = SimpleList(norm = fa_mirna), colData = mi_cold, + metadata = list(sign = mi_top)) R> R> m_cold = fa_cold[colnames(fa_mrna), , drop = F] R> m_dse = DESeqDataSetFromMatrix(round(2^fa_mrna), m_cold, design = ~day) R> m_dse = DESeq(m_dse) R> m_res = results(m_dse, name = "day_day14_vs_normal") R> m_res = m_res[!is.na(m_res$padj), ] R> m_top = row.names(m_res[m_res$padj < 0.05, ]) R> m_rse = SummarizedExperiment(assays = SimpleList(norm = fa_mrna), colData = m_cold, + metadata = list(sign = m_top))
After that, I ran the functional analysis with
R> library(org.Mm.eg.db) R> library(clusterProfiler) R> R> R> ego <- enrichGO(m_top, org.Mm.eg.db, "ENSEMBL", ont = "MF", universe = rownames(m_res))
Actually, it could be anything as far as the table have the same naming that the one coming from this package.
Last step before the real integration analysis, is to get the predicted targets of the miRNA. This can be done with any package as far as you get a table with two columns: gene and mirna.
I used two options, one using the already implemented code in the package (that uses targetscan database):
R> library(targetscan.Mm.eg.db) R> m2t = mirna2targetscan(mi_top, species = "mmu", org = org.Mm.eg.db, keytype = "ENSEMBL") R> R> mirna_targets = findTargets(mi_rse, m_rse, m2t[, c("ENSEMBL", "mir")], summarize = "day", + min_cor = -0.7) ## Dimmension of cor matrix: 49 5233
or using the function
get_multimir implemented on
R> library(multiMiR) R> multimir_results <- get_multimir(org = "mmu", mirna = mi_top, table = "validated", + summary = TRUE) R> R> library(magrittr) R> m2t_multimir = slot(multimir_results, "data")[, c("target_ensembl", "mature_mirna_id")] %>% + dplyr::filter(target_ensembl != "") %>% dplyr::distinct() R> R> mirna_targets = findTargets(mi_rse, m_rse, m2t_multimir, summarize = "day", + min_cor = -0.7)
In both cases, I ran
findTargets to use the expression data to make
sure the correlation between the miRNA and predicted gene is negative
since is the known biological function of miRNAs, being negative
Finally, we use
isoNetwork to put all the data together, and
isoPlotNet to create the final figure with all information.
R> data <- isoNetwork(mi_rse, m_rse, min_fc = 0.1, summarize = "day", target = mirna_targets, + enrich = ego) ## Dimmension of cor matrix: 49 305 R> isoPlotNet(data, minGenes = 1)
It is an easy way to spot what pathways contain genes that are targeted by miRNAs.
Note that this function won’t indicate if a pathway is enriched on miRNA targets. It shows how these three different data set can be put together to explore the relationship among them.
“self-control in bioinformatics: be nice to your collaborator when they can not open a TSV file with excel.”