{ "cells": [ { "cell_type": "markdown", "id": "8d7113e4", "metadata": {}, "source": [ "# Programación para las ciencias biológicas\n", "## R & Rstudio (parte 1)\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": "79cc321f-1236-46aa-9c3a-111cfc28d262", "metadata": {}, "source": [ "# **\"Biología Computacional con R\"**\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 R y Jupyer \n", "* Breve revisión de las estructuras de programación en R\n", "* Importar archivos\n", "* Usar librerías para trbajar con secuencias biológicas\n", "\n" ] }, { "cell_type": "markdown", "id": "fba10e01", "metadata": {}, "source": [ "# R\n", "R es un lenguaje de programación usado para realizar procedimientos estadísticos y gráficos de alto nivel, este lenguaje fue creado en 1993 por los profesores e investigadores Robert Gentleman y Ross Ihaka. Inicialmente el lenguaje se usó para apoyar los cursos que tenían a su cargo los profesores, pero luego de ver la utilidad de la herramienta desarrollada, decidieron colocar copias de R en StatLib. A partir de 1995 el código fuente de R está disponible bajo licencia GNU GPL para sistemas operativos Windows, Macintosh y distribuciones Unix/Linux (Hernández, Usuga, 2021)\n", "\n", "Para mas detalles puede revisar el sitio del proyecto https://www.r-project.org/\n", "\n", "R es un entorno de software libre para computación estadística y gráficos. Se compila y ejecuta en una amplia variedad de plataformas UNIX, Windows y MacOS. Para descargar R, puede elegir un servidor espejo CRAN.\n", "\n" ] }, { "cell_type": "markdown", "id": "2510dd13", "metadata": {}, "source": [ "# RStudio\n", "RStudio es un entorno gráfico de desarrollo para el lenguaje de programación R, facilitando al usuario un entorno con las herramientas necesarias para la generación de scripts, documentos y manejo de librerías y dependencias de este lenguaje.\n", "\n", "Con RStudio puede trabajar con R en un entorno amigable y que es ampliamente utilizado en el mercado." ] }, { "cell_type": "markdown", "id": "da7bd823", "metadata": {}, "source": [ "# Documentación de R\n", "Existe una amplia documentación alrededor de esta herramienta que puede ser fácilmente accedida por los usarios, así;\n", "\n", "Manual de R para principiantes\n", "El manual de R para principiantes puede ser descargado desde este enlace:\n", "\n", "https://cran.r-project.org/doc/contrib/rdebuts_es.pdf\n", "\n", "Revíselo y practique en RStudio habilitado en su máquina virtual del curso o instálese directamente en su sistema operativo." ] }, { "cell_type": "markdown", "id": "f5f34f36", "metadata": {}, "source": [ "# Manual de introducción a R\n", "Introducción a R, Notas sobre R: Un entorno de programación para Análisis de Datos y Gráficos, R Development Core Team\n", "\n", "https://cran.r-project.org/doc/contrib/R-intro-1.1.0-espanol.1.pdf\n", "\n", "Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation" ] }, { "cell_type": "markdown", "id": "c9cf8538", "metadata": {}, "source": [ "# Bioestadística usando R\n", "BIOESTATÍSTICA USANDO R, APOSTILA DE EXEMPLOS PARA O BIÓLOGO, Colin Robert Beasley (2004)\n", "\n", "https://cran.r-project.org/doc/contrib/Beasley-BioestatisticaUsandoR.pdf" ] }, { "cell_type": "markdown", "id": "40f28a5b", "metadata": {}, "source": [ "# R y RStudio\n", "R es un lenguaje de programación en el que se trabaja con objetos, como ejemplo podemos mencionar algunos de ellos:\n", "\n", "* Variables\n", "* Vectores\n", "* Listas\n", "* Matrices\n", "* Arreglos\n", "* Marcos de datos\n", "\n", "Por tanto las entidades que R crea y manipula se denominan objetos. Estos pueden ser de muchos tipos: Variables, Variables indexadas, Cadenas de caracteres, Funciones, etc. Incluso estructuras más complejas construidas a partir de otras más sencillas." ] }, { "cell_type": "markdown", "id": "f34d6f6f", "metadata": {}, "source": [ "# Sintaxis y comandos en R\n", "Al igual que en los sistemas GNU/Linux en R existe diferencia entre mayúsculas y minúsculas, por lo tanto, como ejemplo el comando OBJECTS() no es igual a objects() y generará un error.\n", "\n", "**A continuación trabajaremos con el terminal R en su máquina virtual:**" ] }, { "cell_type": "markdown", "id": "de0442fa", "metadata": {}, "source": [ "# Comandos R - Ayuda\n", "help: El comando help permite revisar la documentación de los comandos de R, por ejemplo el comando: “help(help)”, muestra la documentación de la instrucción help()." ] }, { "cell_type": "code", "execution_count": null, "id": "04c84ba9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "58e9b318", "metadata": {}, "source": [ "# Entorno de R\n", "R es un conjunto integrado de programas para manipulación de datos, cálculo y gráficos. Entre otras caracterı́sticas dispone de:\n", "\n", "* Almacenamiento y manipulación efectiva de datos,\n", "* Operadores para cálculo sobre variables indexadas (Arrays), en particular matrices,\n", "* Una amplia, coherente e integrada colección de herramientas para análisis de datos,\n", "* Posibilidades gráficas para análisis de datos, que funcionan directamente sobre pantalla o impresora\n", "* Lenguaje de programación bien desarrollado, simple y efectivo, que incluye condicionales, ciclos, funciones recursivas y posibilidad de entradas y salidas" ] }, { "cell_type": "markdown", "id": "d7df8882", "metadata": {}, "source": [ "# La Consola (terminal) de R\n", "* Cuando R espera la entrada de órdenes, presenta un sı́mbolo para indicarlo. El símbolo predeterminado es ‘>’, que en UNIX puede coincidir con el sı́mbolo del sistema\n", "* R es un lenguaje de expresiones con una sintaxis muy simple.\n", "* Las órdenes elementales consisten en expresiones o en asignaciones. Si una orden consiste en una expresión, se evalúa, se imprime y su valor se pierde.\n", "* Por el contrario, si evalúa una expresión, no la imprime y guarda su valor en una variable.\n", "* Las órdenes se separan mediante punto y coma, (‘;’), o mediante un cambio de lı́nea.\n", "* Si al terminar la lı́nea, la orden no está sintácticamente completa, R mostrará un signo de continuación, por ejemplo “+”" ] }, { "cell_type": "markdown", "id": "530b2be1", "metadata": {}, "source": [ "# Objetos en R\n", "Las entidades que R crea y manipula se denominan objetos. Estos pueden ser de muchos tipos: Variables, Variables indexadas, Cadenas de caracteres, Funciones, etc. Incluso estructuras más complejas construidas a partir de otras más sencillas, por ejemplo:\n", "\n", "Vectores\n", "Matrices\n", "Factores\n", "Listas\n", "Dataframes\n", "Funciones" ] }, { "cell_type": "markdown", "id": "3f306c6e", "metadata": {}, "source": [ "# Objetos en R\n", "Para ver los objetos que hemos asignado podemos usar el comando: \n", "c<-27.3 \n", "a<-\"soy una cadena\"" ] }, { "cell_type": "code", "execution_count": null, "id": "8ec19dea", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "680fd911", "metadata": {}, "source": [ "Podemos ver los objetos con objects()" ] }, { "cell_type": "code", "execution_count": null, "id": "855dd561", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ea764efe", "metadata": {}, "source": [ "Con esto obtenemos los nombres de los objetos almacenados en R. Esta función es equivalente a la función ls(). La colección de objetos almacenados en cada momento se denomina espacio de trabajo (workspace)." ] }, { "cell_type": "markdown", "id": "3c97d62d", "metadata": {}, "source": [ "## Espacios de trabajo\n", "Para conocer el espacio de trabajo puede usar el comando getwd()" ] }, { "cell_type": "code", "execution_count": null, "id": "4663b16a", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "dddb00d3", "metadata": {}, "source": [ "## Ejemplos espacio de trabajo\n", "Podemos crear un directorio de trabajo y cambiarnos a trabajar en el: \n", "dir.create(\"/home/jupyter/espacio1\") \n", "setwd(\"/home/jupyter/espacio1\") \n", "getwd() " ] }, { "cell_type": "code", "execution_count": null, "id": "ec85dc90", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "2d12ae6f", "metadata": {}, "source": [ "## Creando y asignando objetos (variables)\n", "En R se crean las variables como objetos y se le asignan valores con “<-” y el tipo de dato se define en el momento de la asignación (flotante, entero, complejo, cadena, booleano) \n", "\n", "\n", "a<-4 \n", "b<-2 \n", "c<-a**b \n", "print(c) " ] }, { "cell_type": "code", "execution_count": null, "id": "d5715cab", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5d4dc4b1", "metadata": {}, "source": [ "\n", "Uno de los objetos muy usado en R son los vectores, entre los cuales se pueden realizar operaciones elemento a elemento. Los elementos de un vector deben ser todos del mismo modo y éste será el modo del vector:\n", "\n", "\n", "A<-c(4,7,3.2,8) ; B<-c(2,3,0,2) \n", "C<-A+B; D<-A-B \n", "print(C) " ] }, { "cell_type": "code", "execution_count": null, "id": "dd8cb871", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9925df36", "metadata": { "scrolled": true }, "outputs": [], "source": [ "print(D)" ] }, { "cell_type": "markdown", "id": "cdca3747", "metadata": {}, "source": [ "\n", "Se deben tener claras las operaciones elemento a elemento, incluso en operaciones que pueden parecer complejas:\n", "Las operaciones ariméticas son las comunes “+”,“-”,\"*“,”/“,”^\" o \"**\"\n", "\n", "\n", "E<-A\\*\\*B;F<-A*B \n", "print(E)" ] }, { "cell_type": "code", "execution_count": null, "id": "68be60cf", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "59dc7090", "metadata": { "scrolled": true }, "outputs": [], "source": [ "print(F)" ] }, { "cell_type": "code", "execution_count": null, "id": "16e60d91", "metadata": { "scrolled": true }, "outputs": [], "source": [ "G<-c(E,F)\n", "print(c(E,F)); print(G)" ] }, { "cell_type": "markdown", "id": "f86313ee", "metadata": {}, "source": [ "Dado que hemos creado varios objetos podemos visualizarlos como lo habíamos visto previamente.\n", "\n", "\n", "objects()" ] }, { "cell_type": "code", "execution_count": null, "id": "17cd6611", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "dd83d9ef", "metadata": {}, "source": [ "# Exploración preliminar de datos\n", "## Importar archivo csv\n", "\n", "Para trabajar con archivos de datos, estos deben ser preparados previamente organizándolos en formato CSV\n", "\n", "## Ejemplo larvas.csv\n", "\n", "* Como ejemplo importaremos los datos de de un archivo de larvas a una lista con la función read.csv y veremos el tipo del objeto creado" ] }, { "cell_type": "code", "execution_count": null, "id": "f29661fa", "metadata": { "scrolled": true }, "outputs": [], "source": [ "x<-read.csv(\"http://www.seracademia.com/academia/larvas.csv\")\n", "typeof(x)" ] }, { "cell_type": "markdown", "id": "4d05a97f", "metadata": {}, "source": [ "* Revisemos los nombres de la cabecera con names(x)" ] }, { "cell_type": "code", "execution_count": null, "id": "508fe082", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "275db013", "metadata": {}, "source": [ "* Revisemos los primeros registros\n", "\n", "\n", "head(x)" ] }, { "cell_type": "code", "execution_count": null, "id": "859c359d", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f4a71b64", "metadata": {}, "source": [ "* Revisemos los últimos 10 registros\n", "\n", "\n", "tail(x,n=10)" ] }, { "cell_type": "code", "execution_count": null, "id": "41797d64", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "8735c2c2", "metadata": {}, "source": [ "* Veamos un resumen de los estadísticos de cada unas de las columnas\n", "\n", "\n", "summary(x)" ] }, { "cell_type": "code", "execution_count": null, "id": "e93d519e", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "24a68fce", "metadata": {}, "source": [ "* Veamos un gráfico de cajas de cada unas de las columnas\n", "\n", "\n", "boxplot(x)" ] }, { "cell_type": "code", "execution_count": null, "id": "5ca25eef", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "618dd18b", "metadata": {}, "source": [ "## Ejemplo massa.csv\n", "* Importemos un segundo archivo csv y lo asignamos al objeto “y”" ] }, { "cell_type": "code", "execution_count": null, "id": "7a674bdb", "metadata": {}, "outputs": [], "source": [ "y<-read.csv(\"http://www.seracademia.com/academia/massa.csv\")" ] }, { "cell_type": "markdown", "id": "66018b2b", "metadata": {}, "source": [ "Nombres de las columnas\n", "\n", "names(y)" ] }, { "cell_type": "code", "execution_count": null, "id": "f416b3c2", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "8208022c", "metadata": {}, "source": [ "Primeros 10 registros\n", "\n", "\n", "head(y,n=10)" ] }, { "cell_type": "code", "execution_count": null, "id": "52e62445", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3a615188", "metadata": {}, "source": [ "Resumen de estadísticos\n", "\n", "\n", "summary(y)" ] }, { "cell_type": "code", "execution_count": null, "id": "4d58a85e", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "40793669", "metadata": {}, "source": [ "Veamos el gráfico de caja que nos muestra la mediana y los cuartiles entre 25% y 75%, así como los máximos y mínimos\n", "\n", "\n", "boxplot(y, col=\"yellow\", ylab=\"Massa(g)\", xlab=\"Ubicación del nido\")" ] }, { "cell_type": "code", "execution_count": null, "id": "90cdf650", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "060f775e", "metadata": {}, "source": [ "# Ejemplo Human gene lengths" ] }, { "cell_type": "code", "execution_count": null, "id": "b018b2ee", "metadata": {}, "outputs": [], "source": [ "human_gen_len=read.csv('https://www.zoology.ubc.ca/~whitlock/ABD/teaching/datasets/04/04e1HumanGeneLengths.csv')" ] }, { "cell_type": "markdown", "id": "ff5c8220", "metadata": {}, "source": [ "Veamos el número de columnas con:\n", "\n", "\n", "ncol(human_gen_len)" ] }, { "cell_type": "code", "execution_count": null, "id": "86a4ffd2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "18ef613e", "metadata": {}, "source": [ "Número de filas\n", "\n", "\n", "nrow(human_gen_len)" ] }, { "cell_type": "code", "execution_count": null, "id": "55e06dd1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "95357d03", "metadata": {}, "source": [ "Veamos el nombre de las columnas:\n", "\n", "\n", "colnames(human_gen_len)" ] }, { "cell_type": "code", "execution_count": null, "id": "0829c383", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "082bf572", "metadata": {}, "source": [ "Estadísticos \n", "\n", "\n", "summary(human_gen_len)" ] }, { "cell_type": "code", "execution_count": null, "id": "a9b659b9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "08b26790", "metadata": {}, "source": [ "q1<-summary(human_gen_len)[2] \n", "print(q1)" ] }, { "cell_type": "code", "execution_count": null, "id": "04e7d793", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "7e618f76", "metadata": {}, "source": [ "q3<-summary(human_gen_len)[5] \n", "print(q3)" ] }, { "cell_type": "code", "execution_count": null, "id": "c43c47f1", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "2e7c7bf1", "metadata": {}, "source": [ "IQR=3444-1312 \n", "print(IQR)" ] }, { "cell_type": "code", "execution_count": null, "id": "442ef703", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9d1719f1", "metadata": {}, "source": [ "IQR=summary(human_gen_len)[2]-summary(human_gen_len)[5]" ] }, { "cell_type": "code", "execution_count": null, "id": "baa76ffc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "13ff888b", "metadata": {}, "source": [ "Valores faltantes" ] }, { "cell_type": "markdown", "id": "983c4bbf", "metadata": {}, "source": [ "is.null(human_gen_len)" ] }, { "cell_type": "code", "execution_count": null, "id": "10e76d37", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "be720817", "metadata": {}, "source": [ "sum(is.na(human_gen_len))" ] }, { "cell_type": "code", "execution_count": null, "id": "bddd41f7", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ad6f3a98", "metadata": {}, "source": [ "mean(human_gen_len$gene.length)" ] }, { "cell_type": "code", "execution_count": null, "id": "668e6b40", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f8af89c0", "metadata": {}, "source": [ "min(human_gen_len$gene.length)" ] }, { "cell_type": "code", "execution_count": null, "id": "e0fe6b6b", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "31b0bb0f", "metadata": {}, "source": [ "quantile(human_gen_len$gene.length,score)" ] }, { "cell_type": "code", "execution_count": null, "id": "b544e5dc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "2e2d0007", "metadata": {}, "source": [ "boxplot(human_gen_len)" ] }, { "cell_type": "code", "execution_count": null, "id": "0946acd1", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "e7f19a31", "metadata": {}, "source": [ "Q1<-quantile(human_gen_len\\\\$gene.length, 0.25) \n", "Q3<-quantile(human_gen_len\\\\$gene.length, 0.75) \n", "IQR<-Q3-Q1 \n", "MAX<-Q3+1.5*IQR \n", "print(IQR) \n", "print(MAX) " ] }, { "cell_type": "code", "execution_count": null, "id": "429f17ae", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "572308bd", "metadata": {}, "source": [ "human_gen_len_proc=data.frame(human_gen_len\\[human_gen_len\\\\$gene.length