cursos

Haberlo sabido antes: consejos para biólogos que usen R o que quieran aprender

Esta entrada va dirigida a biólogos (y científicos en general) que requieran hacer análisis estadísticos, generar gráficas o producir mapas. Comparto aquí una serie de herramientas y bondades del internet relacionadas con R, el lenguaje y software gratuito que permite hacer todo eso. Y más: R no es sólo un programa de computadora, es una forma de realizar análisis que crece junto con la comunidad científica y que permite volver (por lo menos una parte) de la ciencia más reproducible, clara y abierta.

Sobre R se ha escrito mucho y no pretendo aquí hacer una guía. Quiero sólo compartir mi experiencia personal y las cosas que tras deambular he encontrado más útiles. Ya saben, ese tipo de cosas que una descubre con júbilo, pero también con un dejo de frustración y ganas de gritar haberlo sabido antes.

Muchos de quienes lean esto no encontrarán nada nuevo, pero espero a otros ahorrarles camino. Incluyo cosas básicas, pero también un par de consejos más avanzados.  A manera de índice, esta entrada habla de:

I) ¿Qué es R?

II) ¿Cómo aprenderlo?

III) Consejos básicos para la vida diaria con R y la felicidad a largo plazo

IV) ROpenSci y acceder a bases de datos biológicas desde R

V) GitHub: control de versiones, colaboración y publicación scripts

VI) VI. Cursos de Software Carpentry

VII)  No dejes de hacer tu ciencia por hacer scripts

I.                   ¿Qué es R?

R es una letra. En español la doble erre la aprendemos a sonar de una forma que le cuesta trabajo a otras lenguas. En inglés se pronuncia Arrr y suena a grito pirata. Por eso algunos usuarios del software R cambiamos su ícono original:

 al01

Por uno como este:

Al02

Ícono creado por Karthik Ram. Disponible aquí.

R es un lenguaje y ambiente de computación estadística. Es software libre, de fuentes abiertas y funciona en Linux, Mac y Windows por igual. En esencia R utiliza funciones agrupadas en paquetes con un objetivo común para hacer operaciones diversas con datos. Por ejemplo, el paquete ggplot2 tiene funciones para hacer gráficos, ape para hacer análisis filogenéticos, maps para dibujar mapas, nlme para ajustar y comprar modelos mixtos lineales y no lineales. Y así CRAN (Red Completa del Archivo de R) es una especie de central de abastos donde se regalan las piezas lego de cualquier forma y color que uno necesite.

R es una maravilla por varias razones. No sólo permite hacer todo análisis estadístico imaginable y gráficas increíbles, también es una forma de mostrar, repetir y guardar paso por paso qué análisis y manejo de datos se hizo de principio a fin. R utiliza líneas de código que le dicen qué hacer; el código va acompañado de comentarios hechos por el autor explicando cada paso.  Todo se guarda en un script, un simple archivo de texto que cualquiera puede utilizar para entender o repetir un análisis determinado de principio a fin. Cualquiera, empezando por nosotros mismos tres días, seis meses o diez años después. Si no imaginan la utilidad de esto, busquen en su archivo personal cualquier análisis que involucre más de una pestaña en Excel y díganme, sin sudar frío, ¿cómo llegaron a los resultados?

En resumen para análisis de datos, producción de figuras y mapas, R es el campeón de peso pesado. Aquí hablo de aplicaciones a biología, pero es también básico para científicos y analistas de otras disciplinas. Es, por ejemplo, la herramienta que se utiliza para analizar la enorme cantidad de información que generan Google, Twitter y Facebook.

 

II.               ¿Cómo se aprende?

Con ganas, paciencia y usándolo. R es un lenguaje computacional y, como todo lenguaje, aprenderlo es caminar cuesta arriba por la curva de aprendizaje. No es un programa de mover el cursor y picar botones, funciona con la línea de comando y puede ser intimidante para quién nunca haya utilizado algo así. Pero es más fácil de lo que parece y la recompensa es grande: los análisis se vuelven repetibles y un mismo script puede reutilizarse para analizar nuevos datos.

Es posible aprenderlo por cuenta propia, especialmente si se tiene experiencia con otros lenguajes de programación, pero el proceso de aprendizaje se acelera mucho si se empieza por tomar un curso introductorio intensivo. A mí me parece que deberían ofrecerse desde la licenciatura. Tal vez esto ya esté ocurriendo, pero no era así por lo menos hasta el 2009. Sé que ahora se dan cursos a nivel de posgrado en la UNAM, pero estoy segura debe haber más cursos en México y el resto de Latinoamérica. Si ven uno anunciado no duden en tomarlo.

Si no encuentran un curso presencial, internet está lleno de material para los autodidactas. No vale la pena repetir la lista de recursos para aprender R que ya existe por ejemplo aquí. Así que solo les dejo mis favoritos, organizados de nivel básico a avanzado:

*Curso introductorio “Try-R” de Code School (gratis).

Tutorial interactivo, amigable y sencillo que explica el funcionamiento básico de R. Con piratas. Se hace en un par de horas y es perfecto para borrar la intimidación y probar de qué se trata R. Arrrr!

Al03

 Ah, y si lo completan les dan 40% de descuento en libros sobre R de la editorial OReilly. O al menos así era hasta hace algunos días.

* Getting Started with R: An Introduction for Biologists (paga).

Libro corto que te lleva de la mano desde instalar R hasta hacer análisis estadísticos comunes para biólogos, como ANOVA y regresión lineal. Tiene muy buen humor y excelentes consejos para quién nunca ha ocupado R. Va dirigido a biólogos y muchos de los ejemplos son fácilmente aplicables a situaciones biológicas. Seguirlo completo toma unos  días.

* Material del curso “Data Science with R” de rOpenSci  (gratis).

El curso ya ocurrió, pero aquí están desde las diapositivas hasta el código de los ejercicios que Karthik Ram utilizó para mostrar cómo utilizar R de una manera más eficiente y útil. Empieza con una introducción básica y luego se enfoca en el manejo de datos, en cómo hacer un proyecto reproducible de principio a fin y en cómo compartir los datos  y análisis finales. Es una verdadera joya. El material se cubre en dos días.

 Al04

* Curso “Computing for Data Analysis” de Coursera (gratis).

Curso en línea para aprender a utilizar R para escribir funciones, hacer gráficas y aplicar diversos métodos estadísticos. Incluye videos de clases, material de apoyo y tarea. El curso dura cuatro semanas y se abre una vez al año. El próximo curso dará inicio el 23 de septiembre de 2013.

Una recomendación para quien comienza a ocupar R es utilizar RStudio, una interface amigable con el usuario nuevo. RStudio incluye un editor de texto y paneles mediante los cuales se puede acceder a la consola, gráficas, ayuda, paquetes y demás objetos que se están ocupando.

 Al05

Además, RStudio tiene integradas otras opciones muy útiles. Aquí un resumen visual de algunas de ellas.

 III.            Consejos básicos para la vida diaria con R y ser feliz a largo plazo

Utilizar una libreta de campo o de laboratorio tiene su gracia y siempre es una buena práctica. El análisis de datos y el flujo de trabajo en la computadora también deben ir acompañados de una bitácora. A los físicos, científicos de la computación y bioinformáticos se les entrena en este sentido, pero creo que a muchos biólogos no. Es por esto que ciertos consejos básicos son bienvenidos.

* Comenta tu script

¿Qué hace cada paso? Sé específico, separa diferentes secciones, dale la misma lógica que a la redacción de los métodos de un artículo. Las líneas de comando son para R, los comentarios para el lector humano.

* Empieza por definir un objetivo concreto

“Analizar mis datos” no es un objetivo concreto.  “Realizar un análisis de componentes principales con mis datos” sí lo es. Define y escribe los objetivos del script al principio y los datos que se ocuparán.

*  Un fólder por proyecto

Mantén un fólder por proyecto que contenga fólderes separados para funciones, datos crudos, datos generados, figuras, documentos, funciones y scripts.

 Utiliza setwd para definir el directorio de trabajo y luego paste para incluir dicho folder en el nombre del archivo a abrir/guardar a lo largo de tu script.

* Acordeón a la mano

Las funciones más básicas son las que más se olvidan y más se necesitan cuando uno quiere dejar de repetir el I am y empezar a leer a Shakespeare. Ayuda mucho tener una versión impresa de la tarjeta de referencia de R o crear una lista propia de funciones útiles. Puede ser un archivo separado en la compu, pero recomiendo mucho imprimirlo y tenerlo al lado.

* ¿Cómo lo hicieron otros?

La documentación de R es buena para entender lo que hace una función en específico, pero es una letanía ineficiente si estás intentando hacer algo completamente nuevo por primera vez. Algunos paquetes vienen con un tutorial, pero para mí lo mejor es pensar la idea general de lo que quiero hacer y luego ver cómo lo hicieron otros. Mis fuentes favoritas:

Mirar gráficas

En lugar de buscar el nombre de la función, explora las gráficas por temas y ve el código ejemplo de cómo hacerlas. Recomiendo el Manual Gráfico de R y el Libro de cocina gráfico de R.

Revisar blogs

Hay cientos de entradas de blog que funcionan como tutoriales para hacer cosas específicas, posiblemente muy similares a lo que se quiere hacer. Googlea o busca en blogs dedicados a R. R-bloggers.com es una recopilación muy completa llena de ejemplos de todo tipo.

El blog de Molecular Ecologist también ha dedicado algunas entradas a cosas que se pueden hacer con R útiles para biólogos evolutivos y ecólogos. Por ejemplo esta entrada sobre cómo hacer mapas con R.

Al06

Busca scripts en GitHub

Además de los paquetes y sus funciones, muchos usuarios de R están haciendo disponibles sus scripts y funciones para hacer análisis específicos. GitHub (del cuál hablo con más detalle adelante) es una red donde depositarlos como material acompañando una publicación, pero también para colaborar y compartir con otros.

Buscar scripts aquí no es tan sencillo. El secreto está más bien en seguir el trabajo de usuarios que hagan cosas de nuestro interés y que amablemente hacen público su trabajo. Hace poco el blog de Molecular Ecologist hizo un llamado para juntar en un grupo código útil para biólogos evolutivos y ecólogos en GitHub. Aquí el link.

*  No te trabes, pregúntale a internet

Una mañana se puede convertir en ayer cuando uno está intentando hacer algo en R sin saber bien cómo. Mi consejo es que si no sale en un par de intentos hay que preguntarle a internet.

 La primera opción es por supuesto Google. Pero también hay varios sitios y foros especializados. Mi favorito es por mucho stackoverflow. Así se ve la página principal:

Al07

Las mejores respuestas son votadas y también las preguntas bien hechas. Así que es fácil encontrar muy buenas respuestas hechas a la más básica de las preguntas o a la más avanzada, pasando por cómo hacer gráficas como las de el webcomic xkcd.

 Si eventualmente llegas a la soledad de cero resultados en una búsqueda: pregunta. La gente responderá, sólo asegúrate de formular bien lo que necesitas y de poner un ejemplo reproducible. Consejos aquí, pero en resumen dput()es la función amiga: permite recrear un objeto de R en otra computadora sin tener que hacer todos los análisis que llevaron a hacerlo.

*  Guarda tu script como un archivo HTLM que incluya los resultados de la consola y los gráficos

 Esto se puede hacer de forma muy sencilla con el paquete knirt a través de RStudio. Lo más fácil (de verdad no podría ser más sencillo) es crear una libreta de notas con todo el código y los resultados. La libreta de notas es un archivo htlm que se puede mandar por correo como un solo archivo y que se ve más o menos así:

Al08

Yo hago un libreta de notas cada que hago cambios grandes al script o a los datos crudos y lo guardo con un html en un folder dedicado para esto. Así puedo ver cómo se veía tal resultado preliminar, tal gráfica o cómo hice algo. Encuentro esto maravilloso para compartir con colegas y discutir los datos, para incluirlo como material suplementario de un artículo, o para tener como referencia de cómo se iban viendo las cosas sin necesidad de tener que correr el script. Pero si se clavan mucho y quieren más: RMarkdown permite crear un reporte más completo agregando texto con formato y sólo los fragmentos de código y figuras deseados.

*  Guarda por separado diferentes versiones de un script.

No trabajes en un único archivo de principio a fin. Los scripts son un poco como escribir un cuento, o peor, un capítulo de la tesis. A veces llegar al resultado deseado toma batallas campales contra funciones altaneras, errores de copy-paste e indecisiones de cómo hacer las cosas. Inevitablemente en algún momento un script que ya medio funcionaba dejará de hacerlo por completo, o te arrepentirás de haber borrado ciertas líneas y desearás no un Ctrl+z de cien pasos, sino viajar cinco días al pasado. Mejor cada vez que vayas a hacer un cambio grande crea otra versión y guarda por separado las versiones antiguas.

 Esto es parecido a lo que se conoce como control de versiones y que puede hacerse con software especializado. Lo cual explico con más detalle abajo.

* Tranquilo(a), vamos por partes.

No dejes que la frustración de no lograr saberlo todo se apodere del ánimo. Empieza por lo sencillo y construye desde ahí. El Doc de Volver al Futuro estaría orgulloso e impactado. R es una herramienta nueva, empezó en 1993, pero tomó auge en los últimos años. Vivimos en un presente que se le escapó a la ciencia ficción.

 IV.             ROpenSci y acceder a bases de datos biológicas desde R

AL09

ROpenSci es una organización que está desarrollando paquetes para que el acceso y manejo de bases de datos y depósitos de información pueda hacerse también desde R, con las ventajas, en términos de claridad y reproducibilidad, que esto implica.

 Aquí pueden ver la lista de sus paquetes. No son muchos y algunos están en desarrollo, pero los que ya existen me parecen muy útiles. Por ejemplo con rgibf se puede acceder a la base de datos del Sistema de Información Global de Biodiversidad (GBIF) y generar, con un par de líneas, mapas como el de abajo:

 al10

 al11

El equipo de ROpenSci está interesado en desarrollar nuevos paquetes que ayuden a que los investigadores utilicen de forma práctica y abierta la información que ya existe. Así que no dejen de contactarlos si tienen alguna idea en mente.

 Por ejemplo, a mí se me ocurre que la ya muy útil Mapoteca Digital de la CONABIO podría serlo aún más si sus usuarios pudiéramos acceder a la información desde R.

 V.                GitHub: control de versiones, colaboración y publicar scripts

El control de versiones se puede realizar de una forma más ordenada y fiable utilizando software diseñado con tal objetivo. Utilizar estas herramientas puede ser fundamental para el trabajo en equipo (como ejemplifican el Hombre Lobo y Drácula aquí), pero también tiene ventajas si se está trabajando como llanero solitario, como se discute en detalle aquí.

 Existen varios programas para realizar control de versiones y no tengo la autoridad para discutir cuál es el mejor. Supongo que depende de qué haga cada quién. A mí me convenció git  porque se puede vincular con GitHub: un servidor web para proyectos que usan git. Su ícono es un pulpogato:

al12

Git permite publicar scripts, tener control de las versiones de un proyecto individual o colaborativo, y ver o utilizar lo que otros hacen.

 Los scripts depositados en GitHub se pueden consultar sin necesidad de utilizar git. A los ejemplos que mencioné antes se pueden sumar el GitHub de ROpenSci. Pero si quieren abrir su cuenta y subir su material, aquí una guía elemental de qué es git y un tutorial de sus comandos básicos.

 VI.             Cursos de Software Carpentry

 ¿Demasiado que aprender por cuenta propia? ¿Qué útil sería un feliz curso dirigido a biólogos dónde se enseñara cómo organizar el análisis de datos, el flujo del trabajo, la colaboración y la generación de reportes con herramientas como R, GitHub y otras más?

 Esto es exactamente lo que hacen los cursos intensivos de Software-Carpentry, una organización de voluntarios cuyo objetivo es enseñarle a los científicos técnicas de computación como las que he discutido aquí.

 Creo que vale la pena intentar organizar este tipo de cursos en nuestras respectivas instituciones, sobre todo en México. Aquí pueden ver su lista de preguntas frecuentes y su guía de operaciones, pero en resumen, lo que se necesita es proveer un aula adecuada por dos días y que cada participante tenga una computadora. Los instructores son voluntarios, por lo que el costo de organizar un curso es relativamente bajo. Además, la idea es que algunos de los participantes se conviertan después en instructores. Así que si se hiciera uno por primera vez en inglés, después habría instructores locales que podrían repetirlo en español.

 Y bueno, si la mala fortuna evita asistir a uno de estos cursos, todo su material está disponible en el GitHub de Software Carpentry.

 VII.         No dejes de hacer tu ciencia por hacer scripts.

A menos que, claro, tu ciencia sea generar nuevo software, en cuyo caso síguele. Pero si lo que estás haciendo son preguntas biológicas, cuidado con perseguir al conejo de las herramientas tecnológicas hasta el fondo de su fractal madriguera.  Mientras escribía esta entrada con todo el entusiasmo del geekismo, un amigo me recordó algo importante: R y el resto de las herramientas de las que he hablado aquí, son sólo eso, herramientas.

 El tiempo del universo será infinito, pero el propio no. Y también es finita nuestra capacidad de dedicación.  Aprende lo que necesites saber para hacer tus análisis de forma confiable, repetible y abierta, luego (o al mismo tiempo) enfoca el ánimo y la creatividad en las preguntas biológicas que querías responder en primer lugar.

Acerca del autor

Alicia Mastretta Yanes es Bióloga egresada de la UNAM y actualmente cursa su doctorado en la University of East Anglia, Inglaterra. Su proyecto explora la relación entre las características físicas del paisaje y la distribución de la diversidad genética en plantas de alta montaña de México. Tuitea como @AliciaMstt