Descargar y cargar librerias necesarias. En este caso se incluyen algunas que luego deben ser revisadas aunque no utilizadas para el manejo de datos obtenidos.
#Descargar paquetes
#BiocManager::install("multiMiR")
#pck=c("BiocManager","plotly","highcharter","esquisse","dplyr","webr","tidyr")
#install.packages(pck)
#Cargar paquetes
paq <- c("dplyr","multiMiR","plotly",
"highcharter","esquisse","tidyplots",
"webr","svglite","BiocManager","tidyr")
lapply(paq, require, character.only = TRUE)## Cargando paquete requerido: dplyr
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Cargando paquete requerido: multiMiR
## Welcome to multiMiR.
##
## multiMiR database URL has been set to the
## default value: http://multimir.org/
##
## Database Version: 2.4.0 Updated: 2024-08-28
## Cargando paquete requerido: plotly
## Warning: package 'plotly' was built under R version 4.4.3
## Cargando paquete requerido: ggplot2
## Warning: package 'ggplot2' was built under R version 4.4.3
##
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:multiMiR':
##
## select
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
## Cargando paquete requerido: highcharter
## Warning: package 'highcharter' was built under R version 4.4.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Highcharts (www.highcharts.com) is a Highsoft software product which is
## not free for commercial and Governmental use
## Cargando paquete requerido: esquisse
## Warning: package 'esquisse' was built under R version 4.4.3
## Cargando paquete requerido: tidyplots
## Warning: package 'tidyplots' was built under R version 4.4.3
##
## Adjuntando el paquete: 'tidyplots'
## The following objects are masked from 'package:plotly':
##
## add_area, add_boxplot, add_heatmap, add_histogram, add_pie
## Cargando paquete requerido: webr
## Warning: package 'webr' was built under R version 4.4.3
## Cargando paquete requerido: svglite
## Warning: package 'svglite' was built under R version 4.4.3
## Cargando paquete requerido: BiocManager
## Warning: package 'BiocManager' was built under R version 4.4.3
## Bioconductor version '3.20' is out-of-date; the current release version '3.21'
## is available with R version '4.5'; see https://bioconductor.org/install
## Cargando paquete requerido: tidyr
## Warning: package 'tidyr' was built under R version 4.4.3
## [[1]]
## [1] TRUE
##
## [[2]]
## [1] TRUE
##
## [[3]]
## [1] TRUE
##
## [[4]]
## [1] TRUE
##
## [[5]]
## [1] TRUE
##
## [[6]]
## [1] TRUE
##
## [[7]]
## [1] TRUE
##
## [[8]]
## [1] TRUE
##
## [[9]]
## [1] TRUE
##
## [[10]]
## [1] TRUE
Antes de iniciar cualquier proyecto debemos tener en cuenta dónde estámos trabajando. Por lo tanto lo definimos de la siguiente forma:
miRNAsUPprimarios <- get_multimir(mirna = c(
"hsa-miR-1246",
"hsa-miR-100-5p",
"hsa-miR-21-5p",
"hsa-miR-374b-5p",
"hsa-miR-582-3p",
"hsa-miR-374a-3p"),
summary = TRUE)## Searching mirecords ...
## Searching mirtarbase ...
## Searching tarbase ...
##
## validated
## 18567
Guardar los datos en .CSV
Por ejemplo, si requiero solo algunas columnas de interés se pueden buscar de la siguiente forma
#ejemplo1 <- as.data.frame(miRNAsUPprimarios@data[, c("database","mature_mirna_id","experiment","support_type")])Para contar cuántos datos hay por miRNA en los datos recién obtenidos:
filter(miRNAsUPprimarios@data, mature_mirna_id %in% c(
"hsa-miR-21-5p",
"hsa-miR-100-5p",
"hsa-miR-374b-5p",
"hsa-miR-374a-3p",
"hsa-miR-582-3p",
"hsa-miR-1246")) %>%
count(mature_mirna_id)%>%
arrange(desc(n))Para tener un conteo gráfico de cuántos miRNAs se tienen se realizó lo siguiente. No se ha filtrado nada por ahora, esto es simplemente para tener un panorama de cuantos miRNAs se tienen inicialmente. Tener cuidado con estos datos.
RAW_NO_REP <- miRNAsUPprimarios@data %>%
distinct(mature_mirna_id, target_symbol,.keep_all = TRUE)
conteo_RAW_NO_REP <- filter(RAW_NO_REP, mature_mirna_id %in% c(
"hsa-miR-21-5p",
"hsa-miR-100-5p",
"hsa-miR-374b-5p",
"hsa-miR-374a-3p",
"hsa-miR-582-3p",
"hsa-miR-1246")) %>%
count(mature_mirna_id)%>%
arrange(desc(n))
sum(conteo_RAW_NO_REP$n)## [1] 15309
Graficar los datos anteriormente obtenidos
conteo_RAW_NO_REP %>%
tidyplot(y= n, color = mature_mirna_id) %>%
add_donut (width = 1.5, reverse = FALSE) %>%
remove_title() %>%
remove_legend_title() %>%
sort_color_levels() %>%
adjust_size(width = 150, height = 150) %>%
adjust_font(fontsize = 10) %>%
remove_legend_title() %>%
remove_x_axis_labels() %>%
remove_y_axis_labels() %>%
remove_x_axis_title() %>%
remove_y_axis_title() %>%
adjust_colors(new_colors = colors_discrete_alger) %>%
save_plot("conteocrudo.svg")## ✔ save_plot: saved to 'conteocrudo.svg'
La sintáxis muestra los datos donde se tomará todo lo contenido en miRNAsUPprimarios@data. Los corchetes indican las filas y las columnas [FILAS, COLUMNAS]. Por lo tanto, la función grep está buscando en las filas la palabra “Luciferase”, y al incluir una coma al final de grep se incluyen todas las columnas de los datos. El ignore.case al estar en TRUE no discrimina entre mayúsculas o minúsculas.
Búsqueda de interacciones únicamente luciferasa:
luciferase <- as.data.frame(miRNAsUPprimarios@data[grep("Luciferase", miRNAsUPprimarios@data$experiment, ignore.case = TRUE),])Ahora se requieren aquellas interacciones catalogadas como “Functional MTI”. Por lo tanto se pueden filtrar de la siguiente manera:
Aunque creamos que se tienen las interacciones con estos carácteres específicos, resulta que no. También tenemos aquellos que tienen un non al inicio “Non-Functional MTI”, pues estos también comparten los carácteres que se buscaban en un principio. Para aclarar la sintaxis lo que se debe realizar es lo siguiente:
Ahora sí poseemos tanto los miRNAs que fueron validados a través de ensayos luciferasa y además catalogados como con “efectos funcionales sobre mRNA”. Finalmente los guardamos en formato CSV.
De los datos obtenidos hay una gran cantidad de miRNAs que se validan varias veces con el mismo gen objetivo. Antes de eliminar estas interacciones repetidas se debe confirmar qué miRNAs comparten interacciones con sus targets. Para verificarlo se realiza lo siguiente:
Filtrado de miRNAs que regulan varios mRNAs
miRNA_x_mRNA <- MTI_luciferase %>%
group_by(mature_mirna_id) %>%
summarise(target_symbol = list(unique(target_symbol)))Realizar combinaciones
combinaciones <- expand.grid(miRNA1 = miRNA_x_mRNA$mature_mirna_id,
miRNA2 = miRNA_x_mRNA$mature_mirna_id,
stringsAsFactors = FALSE) %>%
filter(miRNA1 < miRNA2)Resultados_miRNA_x_mRNA <- combinaciones %>%
left_join(miRNA_x_mRNA, by = c("miRNA1" = "mature_mirna_id")) %>%
left_join(miRNA_x_mRNA, by = c("miRNA2" = "mature_mirna_id")) %>%
rowwise() %>%
mutate(genes_compartidos = list(intersect(target_symbol.x, target_symbol.y)),
n_compartidos = length(genes_compartidos),
genes_compartidos = paste(genes_compartidos, collapse = ", ")) %>%
select(miRNA1, miRNA2, genes_compartidos, n_compartidos)Ahora sí se pueden alojar estos miRNAs que comparten targets en un CSV para tenerlos en cuenta en los siguientes pasos, ya que se eliminarán datos repetidos.
Teniendo en cuenta los mRNAs regulados por varios miRNAs se procederá a generar un CSV sin repeticiones de miRNAs y mRNA. Para analizar estos datos se debe de tener muy en mente aquellos mRNA que comparten miRNA. Para eliminar aquellos miRNAs repetidos se dispondrá del siguiente código:
FILTRADO_FINAL_NO_REP <- MTI_luciferase %>%
distinct(mature_mirna_id, target_symbol, .keep_all = TRUE)Generamos un CSV para guardar nuestros datos bonitos
Ahora vamoh a revisar cuántos miRNA salieron de cada uno con todos los filtros que se aplicaron.
conteo_FILTRADO_FINAL_NO_REP <- filter(FILTRADO_FINAL_NO_REP, mature_mirna_id %in% c(
"hsa-miR-21-5p",
"hsa-miR-100-5p",
"hsa-miR-374b-5p",
"hsa-miR-374a-3p",
"hsa-miR-582-3p",
"hsa-miR-1246")) %>%
count(mature_mirna_id)%>%
arrange(desc(n))
sum(conteo_FILTRADO_FINAL_NO_REP$n)## [1] 143
Para finalizar se realizará un gráfico de dona para resumir los datos que se obtuvieron
conteo_FILTRADO_FINAL_NO_REP %>%
tidyplot(y= n, color = mature_mirna_id) %>%
add_donut (width = 1.5, reverse = FALSE) %>%
remove_title() %>%
remove_legend_title() %>%
sort_color_levels() %>%
adjust_size(width = 150, height = 150) %>%
adjust_font(fontsize = 10) %>%
remove_legend_title() %>%
remove_x_axis_labels() %>%
remove_y_axis_labels() %>%
remove_x_axis_title() %>%
remove_y_axis_title() %>%
adjust_colors(new_colors = colors_discrete_alger) %>%
save_plot("conteoFINAL_Up_Primarios.svg")## ✔ save_plot: saved to 'conteoFINAL_Up_Primarios.svg'