Anexo 2. Resultados
Pipeline
La pipeline diseñada obtiene los siguientes resultados satisfactorios con los tres datasets:
Lectura de archivos CEL y archivo targets
Control de calidad antes y después de normalizar:
o Histograma de intensidades
o Boxplot
o Dendograma
o PCA Analysis
Selección de grupos para la matriz de contraste para los experimentos con una y más de una comparación
Tabla con los resultados del análisis de la expresión diferencial
Tabla de genes seleccionados con los criterios definidos por el usuario
o Selección por Adjust.P.Value
o Selección del máximo de genes a incluir Volcano plot
o Selección de genes a mostrar Heatmap
Tabla con el resumen del test de comparaciones múltiples(experimentos para más de una comparación)
o Selección por P.Value
Diagrama de Venn(experimentos con más de una comparación)
Tabla con la lista de genes sobre e infra expresados(experimentos para más de una comparación)
Análisis GO
o Tabla con términos GO anotados
o Resumen del análisis GO realizado Análisis GSEA
o Gráfico de barras
o Gráfico de puntos
o Mapa de enriquecimiento
El código de la pipeline se puede encontrar integro en el Anexo 1 Aplicación web
Para la aplicación web, testada en local se obtienen los mismos resultados favorables que para la pipeline
Se obtiene los siguientes resultados favorables en la aplicación web: Lectura de archivos CEL y archivo targets
Control de calidad antes y después de normalizar:
o Histograma de intensidades
o Boxplot
o Dendograma
o PCA Análisis
Selección de grupos para la matriz de contraste para los experimentos con una y más de una comparación
Tabla con los resultados del análisis de la expresión diferencial
Tabla de genes seleccionados con los criterios definidos por el usuario
o Selección por Adjust.P.Value
o Selección del máximo de genes a incluir Volcano plot
o Selección de genes a mostrar Heatmap
Tabla con el resumen del test de comparaciones múltiples(experimentos para más de una comparación)
o Selección por P.Value
Diagrama de Venn(experimentos con más de una comparación)
Tabla con la lista de genes sobre e infra expresados(experimentos para más de una comparación)
Análisis GO
o Tabla con términos GO anotados
o Resumen del análisis GO realizado Análisis GSEA
o Gráfico de barras
o Gráfico de puntos
o Mapa de enriquecimiento
o Mapa de asociaciones intergénicas
Pestaña de Carga de datos de la aplicación desarrollada, con el dataset 2 cargado.
Gráficos generados por el apartado de resultados para el dataset numero 3.
Anexo 3. Repositorio Github y acceso al servidor Rstudio
El código de la aplicación web se encuentra disponible para su consulta en el repositorio oficial de la aplicación en Github https://github.com/eirr82/DGER- . En el repositorio se encuentran los siguientes archivos:
README.md. Archivo de información que explica cómo utilizar la aplicación y que pasos a seguir si se quiere instalar de modo local.
Intrucctions. Archivo de texto que explica como utilizar la aplicación(es el mismo texto que se utiliza en la página de ayuda de la aplicación)
Ui.R. Código de la interfaz de la aplicación
Server.R. Código de las funciones que generan los resultados de la aplicación.
App.R. Archivo que reúne el código de ui.R y server.R y que puede ser ejecutado de forma local
Los datasets que se han utilizado para desarrollar la aplicación se pueden descargar desde el siguiente enlace (incluye el archivo targets):
https://drive.google.com/drive/folders/1-YoXdp7qdCX8OfT7SvpYS- CD2_7yCIcC
Para acceder al servidor online de Rstudio habilitado para ejecutar la aplicación debemos seguir los siguientes pasos
Entrar en el siguiente enlace http://dger.ddns.net:8787/
Loguear en el servidor usando rstudio como usuario y contraseña Apretar el botón Run App dentro de la consola de Rstudio
Anexo 4.Codigo Pipeline
##SCRIPT PIPELINE TFM##
#Cargar librerías a utilizar en el análisis
library(oligo) library(pd.clariom.s.human) library(limma) library(annotate) library(clariomshumantranscriptcluster.db) library(topGO) library(knitr) library(affycoretools) library(Heatplus) ##Carga de datos## #carga archivo targets
targets <- read.csv("C:/Users/Cristian/Desktop/TFM/datos/set1/targets.csv", sep=";")
#carga cel files(paquete oligo)
celFiles <- list.celfiles("C:/Users/Cristian/Desktop/TFM/datos/set1/", full.names=TRUE)
rawData <- read.celfiles(celFiles)
#Creamos la información del archivo targets
info <- data.frame(grupo=c(1,1,1,2,2,2)) sampleNames <- targets$Name color <- c("chocolate4","chocolate4","chocolate4","royalblue4","royalblue4","royalblue4") sampleGrops <- targets$Group sampleInfo <- targets$FileNames ##Control de calidad## #antes de normalizar
#histograma
hist(rawData, main="Signal distribution", col=color, lty=1:ncol(info)) legend (x="topright", legend=sampleNames , col=color, lty=1:ncol(info))
#Boxplot de las muestras
boxplot(rawData, cex.axis=0.6, col=color, las=2, names=sampleNames) legend(x="topright", legend = sampleGrops, col=color, lty=1:ncol(info))
#Dendograma La muestras del mismo grupo deberìan agruparse juntas
clust.euclid.average <- hclust(dist(t(exprs(rawData))),method="average")
plot(clust.euclid.average, labels=sampleNames, main="Hierarchical clustering of samples", hang=-1)
#PCA analisis
plotPCA(rawData)
##NORMALIZACION## #Normalizar
eset_rma <- oligo::rma(rawData) #Usar rma() del paquete Oligo no del paquete AFFY
##Control de calidad después de Normalizar## #boxplot despues de normalizar
boxplot(eset_rma, cex.axis=0.6, col=color, las=2, names=sampleNames) legend(x="topright", legend = sampleGrops, col=color, lty=1:ncol(info)
#dendograma
clust.euclid.average <- hclust(dist(t(exprs(eset_rma))),method="average")
plot(clust.euclid.average, labels=sampleNames, main="Hierarchical clustering of samples", hang=-1)
#PCA Analysis
plotPCA(eset_rma)
#crear la matriz de diseño del experimento groups <- as.character(targets$Group) groups <- as.factor(groups) lev<-factor(groups, levels=unique(groups)) design <- model.matrix(~0+lev) colnames(design)<-levels(lev) rownames(design) <-sampleInfo kable(design) #Crear contrastes cont.matrix <- makeContrasts( controlvstratamiento = (control-tratamiento), levels = design ) kable(cont.matrix)
#DGE por ebayes
fit <- lmFit(eset_rma, design)
fit.main <- contrasts.fit(fit, cont.matrix) fit.main <- eBayes(fit.main)
#Selección de genes diferencialmente expresados
#log2fold, p.value etc(se implementará en la aplicación diretamente)
toptable <- topTable(fit.main, coef=1, n=1000)
#eliminar la columna probeid y eliminar los NA
toptable <- na.omit(toptable) toptable$PROBEID <-NULL
#Anotación manual en caso de que la anotación via "affycoretools" cree cuello computacional en el servidor de shiny
genesymbols <- getSYMBOL(rownames(toptable1), "clariomshumantranscriptcluster.db")
results1 <- cbind(genesymbols,toptable1) results1 <- na.omit(results1)
#show few records of a toptable
kable(toptable[1:20,])
#select top15 genes (para mostrar resultados)
#en la aplicacíon el usuario decidirá los criterios para escoger la lista de genes
selected <- toptable[1:15,]
##Volcano Plot(con solo un contraste)## #volcano plot
volcanoplot(fit.main,coef=1,highlight=5, names=names(fit.main$coefficients[,1]), main=paste("Differentially expressed genes", sep="\n"))
abline(v=c(-1,1))
#Decide test y diagrama de Venn para arrays con mas de una comparacion(cuando las haya)
res<-decideTests(fit.main, method="separate", adjust.method="fdr", p.value=0.01)
sum.res.rows<-apply(abs(res),1,sum) res.selected<-res[sum.res.rows!=0,] print(summary(res))
#diagrama de venn
vennDiagram (res.selected[,1:3], main="Genes in common", cex=0.9, circle.col = c('red', 'blue', 'green'), include="up")
#Heatmap de la lista de genes seleccionada
probeNames<-rownames(res)
probeNames.selected<-probeNames[sum.res.rows!=0] exprs2cluster <-exprs(eset_rma)[probeNames.selected,]
pal <- colorRampPalette(brewer.pal(11, "RdYlGn"))(100) heatmap(exprs2cluster, col=pal)
#Heatmap para experimentos con sola un contraste
geneID = rownames(topTable(fit.main, coef=1, num=100, adjust="none",p.value=0.05))
exdat = eset_rma[geneID]
reg2 = regHeatmap(exprs(exdat), legend=2, col=heat.colors, breaks=-3:3) plot(reg2)
##Go análisis## ##Paquete topGO##
#A partir de la lista generada por toptable con los diferencialmente expresados como selected
geneID <- rownames(toptable)
#creamos la lista de genes interesantes que corresponde a los seleccionados de la toptable
myInterestingGenes <- rownames(selected)
geneList <- factor(as.integer(geneID %in% myInterestingGenes)) names(geneList) <- geneID
#Creamos el objeto topgo
top_GO_data <- new("topGOdata", ontology = "BP", allGenes = geneList,
nodeSize = 10, annot=annFUN.db, affyLib = "clariomshumantranscriptcluster.db")
#Test de Fisher
resultFisher <- runTest(top_GO_data, algorithm = "classic", statistic = "fisher")
#enrichment with Kolmogorov-Smirnov test con los modod clasico y elimin
resultKS <- runTest(top_GO_data, algorithm = "classic", statistic = "ks") resultKS.elim <- runTest(top_GO_data, algorithm = "elim", statistic = "ks")
allRes <- GenTable(top_GO_data, classicFisher = resultFisher, classicKS = resultKS, elimKS = resultKS.elim,
orderBy = "elimKS", ranksOf = "classicFisher", topNodes = 10)
#mostrar resultados
kable(allRes)
#mostrar gráfico
showSigOfNodes(top_GO_data, score(resultKS.elim), firstSigNodes = 5, useInfo = 'all')
Anexo 5. Requerimientos de Software y Hardware necesarios para instalar la aplicación en modo local
Hardware mínimo recomendado Intel Core i3 2.5G hz o superior 4GB de RAM (8GB recomendados) 2GB de espacio en el disco duro
Software utilizado para el desarrollo del proyecto R version 3.5.0 (2018-04-23)
Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=Spanish_Spain.1252 LC_CTYPE=Spanish_Spain.1252
LC_MONETARY=Spanish_Spain.1252 [4] LC_NUMERIC=C LC_TIME=Spanish_Spain.1252
attached base packages: [1] stats4 parallel stats graphics grDevices utils datasets methods base
other attached packages: [1] clusterProfiler_3.9.1 ReactomePA_1.25.0 [3] affycoretools_1.53.2 Homo.sapiens_1.3.1 [5] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2 GO.db_3.6.0 [7] OrganismDbi_1.23.0 GenomicFeatures_1.33.0 [9] GenomicRanges_1.33.5 GenomeInfoDb_1.17.1 [11] shinycssloaders_0.2.0 Heatplus_2.27.0 [13] DT_0.4 knitr_1.20 [15] GOfuncR_1.1.1 vioplot_0.2 [17] sm_2.2-5.5 clariomshumantranscriptcluster.db_8.7.0
[19] org.Hs.eg.db_3.6.0 annotate_1.59.0 [21] XML_3.98-1.11 AnnotationDbi_1.43.1 [23] limma_3.37.1 pd.clariom.s.human_3.14.1 [25] DBI_1.0.0 oligo_1.45.0 [27] Biobase_2.41.0 oligoClasses_1.43.1 [29] RSQLite_2.1.1 Biostrings_2.49.0 [31] XVector_0.21.1 IRanges_2.15.13 [33] S4Vectors_0.19.7 BiocGenerics_0.27.0 [35] shinydashboard_0.7.0 shiny_1.1.0
loaded via a namespace (and not attached): [1] R.utils_2.6.0 tidyselect_0.2.4 htmlwidgets_1.2
[4] grid_3.5.0 BiocParallel_1.15.5 munsell_0.4.3
[7] units_0.5-1 codetools_0.2-15 preprocessCore_1.43.0
[10] colorspace_1.3-2 GOSemSim_2.7.0 BiocInstaller_1.31.1
[13] Category_2.47.0 rstudioapi_0.7 DOSE_3.7.0
[16] GenomeInfoDbData_1.1.0 hwriter_1.3.2 bit64_0.9-7
[19] biovizBase_1.29.0 affxparser_1.53.0 R6_2.2.2
[22] locfit_1.5-9.1 AnnotationFilter_1.5.1 bitops_1.0-6
[25] reshape_0.8.7 fgsea_1.7.0 DelayedArray_0.7.2
[28] assertthat_0.2.0 promises_1.0.1 scales_0.5.0
[31] ggraph_1.0.1 nnet_7.3-12 enrichplot_1.1.2
[34] gtable_0.2.0 affy_1.59.0 ggbio_1.29.0
[37] ensembldb_2.5.1 rlang_0.2.1 genefilter_1.63.0
[40] splines_3.5.0 rtracklayer_1.41.2 lazyeval_0.2.1
[43] acepack_1.4.1 dichromat_2.0-0 checkmate_1.8.5
[46] yaml_2.1.19 reshape2_1.4.3 crosstalk_1.0.0
[49] backports_1.1.2 rsconnect_0.8.8 httpuv_1.4.3
[52] qvalue_2.13.0 Hmisc_4.1-1 RBGL_1.57.0
[55] tools_3.5.0 tcltk_3.5.0 ggplot2_2.2.1
[58] affyio_1.51.0 gplots_3.0.1 ff_2.2-14
[61] RColorBrewer_1.1-2 ggridges_0.5.0 Rcpp_0.12.17
[64] plyr_1.8.4 base64enc_0.1-3 progress_1.1.2
[70] prettyunits_1.0.2 rpart_4.1-13 viridis_0.5.1
[73] cowplot_0.9.2 mapplots_1.5.1 ggrepel_0.8.0
[76] SummarizedExperiment_1.11.3 cluster_2.0.7-1 magrittr_1.5
[79] data.table_1.11.4 DO.db_2.9 reactome.db_1.64.0
[82] ProtGenerics_1.13.0 matrixStats_0.53.1 mime_0.5
[85] xtable_1.8-2 gcrma_2.53.0 gridExtra_2.3
[88] compiler_3.5.0 biomaRt_2.37.1 tibble_1.4.2
[91] KernSmooth_2.23-15 ReportingTools_2.21.0 R.oo_1.22.0
[94] htmltools_0.3.6 GOstats_2.47.0 later_0.7.2
[97] Formula_1.2-3 tidyr_0.8.1 udunits2_0.13
[100] geneplotter_1.59.0 tweenr_0.1.5 rappdirs_0.3.1
[103] MASS_7.3-49 Matrix_1.2-14 R.methodsS3_1.7.1
[106] gdata_2.18.0 igraph_1.2.1 bindr_0.1.1
[109] pkgconfig_2.0.1 rvcheck_0.1.0
GenomicAlignments_1.17.1
[112] foreign_0.8-70 foreach_1.4.4 AnnotationForge_1.23.0
[115] stringr_1.3.1 VariantAnnotation_1.27.1 digest_0.6.15
[118] graph_1.59.0 fastmatch_1.1-0 htmlTable_1.12
[121] edgeR_3.23.2 GSEABase_1.43.0 curl_3.2
[124] graphite_1.27.2 Rsamtools_1.33.0 gtools_3.5.0
[127] jsonlite_1.5 PFAM.db_3.6.0 bindrcpp_0.2.2
[130] viridisLite_0.3.0 BSgenome_1.49.0 pillar_1.2.3
[133] lattice_0.20-35 GGally_1.4.0 httr_1.3.1
[136] survival_2.41-3 glue_1.2.0 UpSetR_1.3.3
[139] iterators_1.0.9 bit_1.1-14 Rgraphviz_2.25.0
[142] ggforce_0.1.2 stringi_1.2.2 blob_1.1.1
[145] DESeq2_1.21.3 latticeExtra_0.6-28 caTools_1.17.1 [148] memoise_1.1.0 dplyr_0.7.5