{ "cells": [ { "cell_type": "markdown", "id": "8d7113e4", "metadata": {}, "source": [ "# Programación para las ciencias biológicas\n", "## Python\n", "**Docente:** Charles Escobar \n", "2025" ] }, { "cell_type": "markdown", "id": "b180836f", "metadata": {}, "source": [ "**Nombre del estudiante:**" ] }, { "cell_type": "markdown", "id": "6a4a50ff", "metadata": {}, "source": [ "Ingrese aquí su nombre" ] }, { "cell_type": "markdown", "id": "215c7f14-52e0-4e51-98ea-23d3919e7e8c", "metadata": {}, "source": [ "# **Bibliotecas Especializadas para Bioinformática en R y Python**\n", "\n", "**¿Qué esperamos aprender en esta libreta?**\n", "\n", "En esta libreta de trabajo, vamos a explorar los siguientes temas:\n", "\n", "* Trabajar con Bioconductor\n", "* Importar Secuencias biológicas\n", "* Usar librerías especializadas para trabajar con secuencias biológicas" ] }, { "cell_type": "markdown", "id": "859a7246-a2ce-42f3-835c-23955b33d948", "metadata": {}, "source": [ "# Ejercicio con `BIOCONDUCTOR`\n", "\n", "A continuación, se desarrolla un ejercicio utilizando Bioconductor en R. \n", "\n", "Este ejercicio cubre desde la carga de datos hasta el análisis de expresión génica diferencial, incluyendo la visualización de resultados. Utilizaremos datos de RNA-seq como ejemplo.\n", "\n", "Ejercicio: Análisis de Expresión Diferencial con Bioconductor\n", "\n", "**Objetivo**\n", "\n", "Realizar un análisis de expresión diferencial (DEA) a partir de datos de RNA-seq para identificar genes que están regulados diferencialmente entre dos condiciones (por ejemplo, tratamiento vs control).\n", "\n", "**Pasos del Ejercicio** \n", "\n", "1. Instalación de paquetes necesarios.\n", "2. Carga de datos de expresión génica.\n", "3. Preprocesamiento y normalización de datos.\n", "4. Análisis de expresión diferencial.\n", "5. Visualización de resultados.\n", "6. Interpretación y generación de reportes. \n", "\n", "\n", "\n", "\n", "## 1. Instalación de paquetes necesarios (En caso de requerirse)\n", " \n", "Primero, instalamos los paquetes de Bioconductor necesarios para este análisis:\n" ] }, { "cell_type": "markdown", "id": "4a0cbbdc-60c9-42d6-b738-05cf95771c3d", "metadata": {}, "source": [ "Ejecutar desde la consola de R:\n", "\n", "```R\n", "\n", "if (!require(\"BiocManager\", quietly = TRUE))\n", " install.packages(\"BiocManager\")\n", "\n", "BiocManager::install(c(\"DESeq2\", \"airway\", \"pheatmap\", \"ggplot2\", \"AnnotationDbi\", \"org.Hs.eg.db\"))\n", "\n", "``` " ] }, { "cell_type": "markdown", "id": "2a850c91-871d-4e0c-a1ee-2699866ead1f", "metadata": {}, "source": [ "## 2. Carga de datos de expresión génica\n", "Utilizaremos el paquete `airway`, que contiene un conjunto de datos de RNA-seq de un experimento con células de las vías respiratorias humanas tratadas con dexametasona." ] }, { "cell_type": "markdown", "id": "f1a817be-3cb2-4ee2-90e0-d541bafd3e68", "metadata": {}, "source": [ "La librería **`airway`** es un paquete de datos en **Bioconductor** que proporciona un conjunto de datos de RNA-seq (secuenciación de ARN) preprocesado y listo para usar. Estos datos provienen de un estudio científico real y se utilizan comúnmente como un ejemplo estándar en tutoriales y análisis de bioinformática, especialmente para demostrar el uso de herramientas como **DESeq2** para el análisis de expresión diferencial.\n", "\n", "\n", "- **Origen de los datos**: Los datos en `airway` provienen de un estudio publicado en 2013 por Himes et al. en la revista *PLoS ONE*. El estudio analizó el efecto de la **dexametasona** (un glucocorticoide sintético) en células de las vías respiratorias humanas (airway smooth muscle cells).\n", "- **Tipo de datos**: Contiene datos de RNA-seq, que incluyen conteos de lecturas (reads) mapeados a genes para varias muestras.\n", "- **Formato**: Los datos están almacenados en un objeto de tipo **SummarizedExperiment**, que es una estructura de datos común en Bioconductor para almacenar y manipular datos genómicos.\n", "\n", "---\n", "\n", "El objeto `airway` incluye:\n", "\n", "1. **Conteos de lecturas (counts)**:\n", " - Matriz de conteos de lecturas mapeadas a genes para cada muestra.\n", " - Las filas representan genes (identificados por ENSEMBL IDs).\n", " - Las columnas representan muestras (4 tratadas con dexametasona y 4 no tratadas).\n", "\n", "2. **Metadatos de las muestras (colData)**:\n", " - Información sobre las muestras, como:\n", " - `SampleName`: Identificador de la muestra.\n", " - `cell`: Línea celular.\n", " - `dex`: Condición de tratamiento (tratado con dexametasona o no tratado).\n", " - `albut`: Indicador de uso de albuterol (un broncodilatador).\n", " - `Run`: Identificador de la corrida de secuenciación.\n", "\n", "3. **Metadatos de los genes (rowData)**:\n", " - Información sobre los genes, como sus identificadores (ENSEMBL IDs).\n", "\n", "---\n", "\n", "El objeto `airway` es un **SummarizedExperiment**, que tiene la siguiente estructura:\n", "\n", "- **`assays`**: Contiene la matriz de conteos de lecturas.\n", " - Una matriz de conteos de lecturas mapeadas a genes (filas: genes, columnas: muestras).\n", "- **`colData`**: Contiene los metadatos de las muestras.\n", " - Información sobre las muestras, como la condición de tratamiento (dex: dexametasona) y la línea celular.\n", "- **`rowData`**: Contiene los metadatos de los genes\n", " - Identificadores de genes (ENSEMBL IDs).\n", "- **`metadata`**: Información adicional sobre el experimento.\n", "\n", "---\n", "\n", "El conjunto de datos `airway` se utiliza principalmente para demostrar el flujo de trabajo de análisis de RNA-seq\n", "\n", "### 1. Carga de datos" ] }, { "cell_type": "code", "execution_count": null, "id": "5352fd1e-5093-4a9b-a797-3b8cb606da8b", "metadata": { "scrolled": true }, "outputs": [], "source": [ "library(DESeq2)\n", "library(airway)\n", "\n", "# Cargar el conjunto de datos\n", "data(\"airway\")\n", "se <- airway" ] }, { "cell_type": "markdown", "id": "66cf4829-2d28-4664-b293-12a388413603", "metadata": {}, "source": [ "### Exploración de los datos:" ] }, { "cell_type": "code", "execution_count": null, "id": "4b1a8e7a-2506-4aa0-a912-706797c3e2ff", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Ver el objeto\n", "airway" ] }, { "cell_type": "code", "execution_count": null, "id": "2311992f-3be7-41cb-85fb-38444d37edf1", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Ver los conteos de lecturas\n", "head(assay(airway))" ] }, { "cell_type": "code", "execution_count": null, "id": "e36bf48f-318f-4402-9d63-6b4df666b03c", "metadata": {}, "outputs": [], "source": [ "tail(assay(airway))" ] }, { "cell_type": "markdown", "id": "3c9f8986-41e8-4769-81a5-8b959fd8e678", "metadata": {}, "source": [ "**Metadatos de muestras:** Información sobre las muestras, como la condición de tratamiento (dex: dexametasona) y la línea celular." ] }, { "cell_type": "code", "execution_count": null, "id": "99be35db-5ba7-4f20-9cc7-107ae05633ff", "metadata": {}, "outputs": [], "source": [ "# Ver metadatos de las muestras\n", "colData(airway)" ] }, { "cell_type": "markdown", "id": "d1ec2221-3a73-4f6b-823d-5d277952ebec", "metadata": {}, "source": [ "**Metadatos de genes**: Identificadores de genes (ENSEMBL IDs)." ] }, { "cell_type": "code", "execution_count": null, "id": "77f1fa0e-bdf6-49c4-b828-37772de37559", "metadata": {}, "outputs": [], "source": [ "# Ver metadatos de los genes\n", "rowData(airway)" ] }, { "cell_type": "markdown", "id": "0bc76108-8a87-494c-b73c-fbacb1ad66dc", "metadata": {}, "source": [ "### Análisis de expresión diferencial:\n", "\n", " - El paquete `airway` se usa comúnmente con `DESeq2` para realizar análisis de expresión diferencial entre las muestras tratadas y no tratadas con dexametasona." ] }, { "cell_type": "markdown", "id": "d4cd24c5-7a3e-4cb9-86dc-d84d80dcc15d", "metadata": {}, "source": [ "### 2. Conversión a objeto DESeqDataSet\n", "\n", "El objetivo es convertir el objeto airway en un DESeqDataSet, que es el formato requerido por el paquete DESeq2 para realizar el análisis de expresión diferencial.\n", "\n", "* **Diseño experimental**: El argumento `design = ~ dex` especifica que queremos comparar las muestras en función de la condición de tratamiento (dex: dexametasona).\n", "\n", "El objeto `dds` contendrá: \n", "* Los conteos de lecturas.\n", "* Los metadatos de las muestras.\n", "* El diseño experimental para el análisis." ] }, { "cell_type": "code", "execution_count": null, "id": "b7ab99ee-4455-41d5-aeb7-f756dbf71b88", "metadata": {}, "outputs": [], "source": [ "library(DESeq2)\n", "\n", "# Convertir a objeto DESeqDataSet\n", "dds <- DESeqDataSet(airway, design = ~ dex)" ] }, { "cell_type": "markdown", "id": "b9b5b0e1-a05c-418a-b4f1-45b2ff8cd439", "metadata": {}, "source": [ "### 3. Filtrado de genes con baja expresión\n", "\n", "Tiene por objeto eliminar genes con baja expresión, ya que no proporcionan información útil para el análisis.\n", "\n", "* Criterio de filtrado: Se conservan los genes que tienen al menos 10 lecturas en total en todas las muestras combinadas.\n", "\n", "* El objeto dds ahora contiene solo los genes que cumplen con el criterio de expresión mínima.\n", "\n", "* Esto reduce el número de genes y mejora la precisión del análisis." ] }, { "cell_type": "code", "execution_count": null, "id": "dddd5801-ee7e-4d9f-9f58-8cd713aaed84", "metadata": {}, "outputs": [], "source": [ "# Filtrar genes con baja expresión\n", "keep <- rowSums(counts(dds)) >= 10\n", "dds <- dds[keep, ]" ] }, { "cell_type": "markdown", "id": "166f3d03-9722-48d5-a167-69a611cc70f7", "metadata": {}, "source": [ "### 4. Normalización y análisis de expresión diferencial\n", "\n", "En este paso se busca normalizar los datos y realizar el análisis de expresión diferencial.\n", "\n", "* Pasos que realiza DESeq:\n", "\n", " 1. Estimación de factores de tamaño: Ajusta las diferencias en la profundidad de secuenciación entre muestras.\n", " 2. Dispersión de genes: Estima la variabilidad biológica entre muestras.\n", " 3. Ajuste del modelo: Compara las condiciones de tratamiento para identificar genes diferencialmente expresados.\n", "\n", "El objeto dds ahora contendrá los resultados del modelo estadístico.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "33c85093-9b49-4de3-a362-585f9d52ddd4", "metadata": {}, "outputs": [], "source": [ "# Normalización y análisis\n", "dds <- DESeq(dds)" ] }, { "cell_type": "markdown", "id": "151fc81b-2a7b-469d-9187-6f8829031435", "metadata": {}, "source": [ "### 5. Extracción de resultados\n", "\n", "En este punto se extraen los resultados del análisis de expresión diferencial.\n", "\n", "* Contraste: Especificamos que queremos comparar las muestras tratadas con dexametasona (trt) frente a las no tratadas (untrt).\n", "\n", "\n", "El objeto `res` contiene:\n", "\n", "* **log2FoldChange**: Cambio en la expresión (en escala logarítmica) entre las condiciones.\n", "\n", "* **pvalue**: Valor p sin ajustar.\n", "\n", "* **padj**: Valor p ajustado (corregido por múltiples pruebas).\n", "\n", "* **baseMean**: Expresión media normalizada del gen.\n", "\n", "Aquí se puede interpretar que:\n", "\n", "* **log2FoldChange > 0**: El gen está sobreexpresado en la condición tratada.\n", "\n", "* **log2FoldChange < 0**: El gen está subexpresado en la condición tratada.\n", "\n", "* **padj < 0.05**: El gen se considera significativamente diferencialmente expresado." ] }, { "cell_type": "code", "execution_count": null, "id": "754c92fb-cc55-457b-8e62-512283281f1a", "metadata": {}, "outputs": [], "source": [ "res <- results(dds, contrast = c(\"dex\", \"trt\", \"untrt\"))" ] }, { "cell_type": "markdown", "id": "b1fc7f3a-01bc-4183-8e94-72790f689792", "metadata": {}, "source": [ "### 6. Visualización de resultados\n", " - Se pueden generar gráficos como heatmaps y MA plots para visualizar los resultados." ] }, { "cell_type": "code", "execution_count": null, "id": "84d72217-23da-4c76-94e5-24f72d273b6b", "metadata": {}, "outputs": [], "source": [ "# MA plot\n", "plotMA(res)\n", "\n", "# Heatmap de los genes más significativos\n", "library(pheatmap)\n", "top_genes <- head(order(res$padj), 20)\n", "pheatmap(assay(dds)[top_genes, ], scale = \"row\")" ] }, { "cell_type": "markdown", "id": "c123bd03-2a61-47fb-ba7e-1d9b368a797a", "metadata": {}, "source": [ "## Tarea \n", "\n", "### 1. Práctica\n", "Usando `R` con biopython, repita el jercicio previo con los datos pasillaDEXSeqDataSet, esto dado que el conjunto de datos pasillaGenes ha sido deprecado en versiones recientes del paquete pasilla, y ahora se recomienda usar pasillaDEXSeqDataSet. Este conjunto de datos está diseñado para ser utilizado con el paquete DEXSeq, que es una herramienta para el análisis de expresión diferencial a nivel de exones.\n", "\n", "Ejercicio: Análisis de Expresión Diferencial con pasillaDEXSeqDataSet\n", "\n", "Objetivo:\n", "\n", "Realizar un análisis de expresión diferencial a partir de los datos de RNA-seq del paquete pasilla utilizando el conjunto de datos pasillaDEXSeqDataSet.\n", "\n", "Comience en la consola de **R** con:\n", "\n", "```R\n", "BiocManager::install(\"pasilla\") \n", "```" ] }, { "cell_type": "markdown", "id": "4c74d075-35f9-45b5-bfd4-64b614c24149", "metadata": {}, "source": [ "Llame las librerías necesarias:\n", "\n", "```R\n", "library(DESeq2)\n", "library(DEXSeq)\n", "library(pasilla)\n", "```" ] }, { "cell_type": "markdown", "id": "0dc90dda-9560-4c09-89a7-b16f7691acb2", "metadata": {}, "source": [ "Cargue el dataset:\n", "\n", "```R\n", "data(\"pasillaDEXSeqDataSet\")\n", "\n", "```" ] }, { "cell_type": "markdown", "id": "d1f69467-063a-4bc6-8b7c-776febb1da6e", "metadata": {}, "source": [ "#### Explore los datos\n", "\n", "* Vea el contenido del dataset:\n", "```R\n", "dxd\n", "```" ] }, { "cell_type": "markdown", "id": "2261c89b-cdb8-48a5-a45b-a082863f8ee7", "metadata": { "scrolled": true }, "source": [ "Revice la cabecera\n", "\n", "```R\n", "head(assay(dxd))\n", "```" ] }, { "cell_type": "markdown", "id": "a855d56a-20c5-4719-a5d7-0c0e4a0969ef", "metadata": {}, "source": [ "#### Normalizace de datos\n", "```R\n", "dxd <- estimateSizeFactors(dxd)\n", "dxd <- estimateDispersions(dxd)\n", "```" ] }, { "cell_type": "markdown", "id": "d27eb816-e728-4b02-aaaf-7ee2fe210b6c", "metadata": {}, "source": [ "#### Realizar el análisis de expresión diferencial\n", "```R\n", "dxd <- testForDEU(dxd)\n", "dxd <- estimateExonFoldChanges(dxd, fitExpToVar = \"condition\")\n", "```\n", "#### Extraer resultados\n", "```R\n", "res <- DEXSeqResults(dxd)\n", "```\n", "\n", "#### Ver los resultados\n", "```R\n", "head(res)\n", "```\n", "\n", "#### Filtrar genes significativos (p-ajustado < 0.05)\n", "```R\n", "res_sig <- subset(res, padj < 0.05)\n", "head(res_sig[order(res_sig$padj), ])\n", "```" ] }, { "cell_type": "markdown", "id": "62236e12-9c24-4b11-840a-dab366d3d090", "metadata": {}, "source": [ "#### Graficar\n", "```R\n", "library(pheatmap)\n", "```\n", "##### Seleccionar los 20 genes más significativos\n", "```R\n", "top_genes <- head(order(res$padj), 20)\n", "counts_normalized <- counts(dxd, normalized = TRUE)\n", "heatmap_data <- counts_normalized[top_genes, ]\n", "```\n", "\n", "##### Crear el heatmap\n", "```R\n", "pheatmap(heatmap_data, scale = \"row\", clustering_distance_rows = \"correlation\")\n", "```R" ] }, { "cell_type": "markdown", "id": "f9614d33-1cbe-4f68-b81c-3b84faa5218f", "metadata": {}, "source": [ "#### Para el gráfico MA, defina las columnas de interés\n", "```R\n", "colnames(res)\n", "```" ] }, { "cell_type": "markdown", "id": "3370e15b-7b7b-420f-b13e-44c5a67dafe8", "metadata": {}, "source": [ "Una vez seleccionadas las columnas realice el gráfico MA: \n", "\n", "```R\n", "library(ggplot2)\n", "\n", "# Convertir resultados a DataFrame para ggplot\n", "res_df <- as.data.frame(res)\n", "\n", "# Crear MA plot\n", "ggplot(res_df, aes(x = exonBaseMean, y = log2fold_untreated_treated, color = padj < 0.05)) +\n", " geom_point(alpha = 0.5) +\n", " scale_x_log10() +\n", " labs(title = \"MA Plot\", x = \"Media de expresión\", y = \"Log2 Fold Change\") +\n", " theme_minimal()\n", "```" ] }, { "cell_type": "markdown", "id": "52b1799d-bb32-4120-a747-5c2987c0ee0f", "metadata": {}, "source": [ "### 2. Cuestionario\n", "\n", "Conteste las siguientes preguntas" ] }, { "cell_type": "markdown", "id": "54b45a3a-2bfb-4f86-9e0d-9f90cdcdd502", "metadata": {}, "source": [ "#### 2.1. ¿Qué diferencias encuentra entre Bipython y Bioconductor?" ] }, { "cell_type": "markdown", "id": "701221f7-3e26-4671-aadc-4fa2afe3dc53", "metadata": {}, "source": [ "ponga aquí su respuesta" ] }, { "cell_type": "markdown", "id": "732ca0b0-65b0-47ff-9cd0-76ba2bb6258b", "metadata": {}, "source": [ "#### 2.2. ¿Resuma el proceso de expresión diferencial?" ] }, { "cell_type": "markdown", "id": "dc2e174d-ace0-4421-94b8-5e74d5c3b14f", "metadata": {}, "source": [ "ponga aquí su respuesta" ] }, { "cell_type": "markdown", "id": "852e3bf6-ec1e-4fd1-8299-4864b67d4309", "metadata": {}, "source": [ "#### 2.3. ¿En qué aporta la capa de visualización de expresión diferencial? (Heatmap y MA)" ] }, { "cell_type": "markdown", "id": "c6a4ea1e-7bf1-42a8-9023-8d0a945e57f0", "metadata": {}, "source": [ "ponga aquí su respuesta" ] }, { "cell_type": "markdown", "id": "8d81031c", "metadata": {}, "source": [ "# Conclusiones y Recomendaciones\n", "\n", "Una vez ejecutado este cuaderno de trabajo y seguido las instrucciones que en el se detallan, desarrolle por lo menos tres conclusiones y recomendaciones delimitadas exclusivamente a las actividades ejecutadas en este cuaderno de trabajo." ] }, { "cell_type": "markdown", "id": "70716aa1", "metadata": {}, "source": [ "## Conclusiones\n", "1. Conclusión 1\n", "2. Conclusión 2\n", "3. Conclusión 3" ] }, { "cell_type": "markdown", "id": "2ad4beef-6416-44b6-b7a4-630d7fbce4fb", "metadata": {}, "source": [ "## Recomendaciones\n", "1. Recomendación 1\n", "2. Recomendación 2\n", "3. Recomendación 3" ] }, { "cell_type": "markdown", "id": "9d771607-06b1-4069-a551-01ff59e9c7c3", "metadata": {}, "source": [ "|RÚBRICA Y CRITERIOS DE EVALUACIÓN |||||\n", "|:-|:-:|:-:|:-:|:-|\n", "|PARÁMETROS|100%|50%|0%|Total parcial|\n", "|Desempeño en el desarrollo del cuaderno de trabajo (toma de datos, realización de cálculos, ejecución de comandos, realización de programas, obtención de resultados, obtención de un producto, aplicación de una herramienta, realización de un procedimiento para experimento, etc.)|El estudiantes demuestra solvencia al desempeñarse durante la práctica|El estudiante demuestra parcialmente solvencia al desempeñarse durante la práctica |El estudiante no demuestra solvencia al desempeñarse durante la práctica |40%|\n", "|Cuestionario|El estudiante contesta el cuestionario de forma correcta |El estudiante contesta la mitad del cuestionario de forma correcta|El estudiante contesta el cuestionario de forma incorrecta|30%|\n", "|Conclusiones y Recomendaciones|Todas las conclusiones son adecuadas, objetivas y aplicables exclusivamente a la práctica|Las conclusiones son parcialmente adecuadas, objetivas y aplicables|Las conclusiones no son adecuadas, objetivas y aplicables|30%|\n", "|TOTAL||||100%|" ] }, { "cell_type": "code", "execution_count": null, "id": "cb7389af-6892-494b-a3cb-4ffbd65a68a9", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "4.2.2" } }, "nbformat": 4, "nbformat_minor": 5 }