sábado, 22 de diciembre de 2012

Mudanza


¡Extra Extra!!
Me mudo!!!!
A partir de ahora, este blog se integrará en mi nueva página web 



miércoles, 30 de noviembre de 2011

Visualizar los registros de GBIF con R de una forma rápida

Hace poco ha llegado a mis manos (vía theBioBucket, de Kay Cichini) un aporte sobre la utilización de R en la gestión de registros de biodiversidad, que me parece sencillamente fantástico. Se trata de la consulta de los registros de biodiversidad de GBIF mediante R

Imaginad, que estamos trabajando con una especie y necesitamos consultar los datos existentes sobre esta especie en la plataforma GBIF (Global Biodiversity Information Facility). Pues, podemos utilizar, por ejemplo...R. Sí, existe un paquete llamado dismo, creado por Robert Hijmans, Steven Phillips, John Leathwick y jane Elith, que realiza diversas tareas relacionadas con los modelos de distribución de especies.


Pues, vamos a ver un ejemplo de alguna de las cosas que podemos hacer. Hace poco, leí mi Trabajo de Fin de Master, que versaba sobre los melojares de Quercus pyrenaica en Sierra Nevada (hablaré de ello en otra entrada) y voy a utilizar esa especie como consulta. 

En primer lugar, hemos de instalar y cargar el paquete dismo. Igualmente vamos a cargar otros paquetes necesarios para visualizar los resultados en mapas. 

Una vez cargado, utilizamos la función gbif() para que nos consulte el portal de GBIF y nos devuelva los resultados de la especie que deseemos. Para ello hemos de especificar el nombre del género (en este caso "Quercus") y el epiteto de la especie ("pyrenaica"). Además le indicamos que nos devuelva los datos geográficos, para lo cual fijamos el parámetro geo en TRUE. 

En este caso nos devuelve un dataframe con 667 resultados de ocurrencia de esta especie. En este objeto, observamos que nos devuelve información interesante como la institución responsable de la cita, el número de identificación de la cita, que tipo de registro es: si es observación o cita, etc. 

Esta sencilla consulta, en una sola línea de código, nos agiliza muchísimo la consulta en la base de datos de GBIF y nos permite llevar a cabo consultas de muchas especies en el caso en el que estemos llevando a cabo trabajos donde necesitamos recopilar información de citas de muchas especies. 

Pero, ademas de esto (que no es poco), podemos con dos o tres líneas mas de código, realizar mapas de los resultados de esta consulta. Para ello necesitamos otros packages. En este caso os dejo dos mapas de la distribución de las citas para Quercus pyrenaica, tanto en la Península Ibérica, como en Sierra Nevada. En este último caso, es para resaltar que también podemos utilizarlo incorporando shapefiles de ESRI. 


Figura 1. Ejemplo de consulta de los registros de Quercus pyrenaica en la Península Ibérica y su representación con R. 



Figura 2. Ejemplo de consulta de los registros de Quercus pyrenaica en Sierra Nevada. En este caso se ha importado un shapefile con los límites del Espacio Natural de Sierra Nevada. 


Pues nada más, solamente el código utilizado: 



######### Consulta y visualización de datos de GBIF 
 
# Cargamos la libreria dismo para la consulta a GBIF
library(dismo) 
 
# Consultamos los datos de gbif de la especie que deseemos
melojo <- gbif("Quercus", "pyrenaica", geo=TRUE)
 
# Cargamos la libreria para plotear en un mapa 
library(maps)
library(maptools)
library(mapdata)
 
# Ploteamos los resultados para la Península Ibérica
m <- map('worldHires', regions=c('Spain', 'Portugal'), exact=T, interior=FALSE, col="grey") 
area.map(m) 
# Aquí añadimos los resultados de nuestra consulta a GBIF en el mapa
points(melojo$lon, melojo$lat, cex=1.5, pch=19, col="blue") 
# Ahora la leyenda
text(-.001,36.3, "Resultados consulta GBIF\nQuercus pyrenaica")
 
 
 
# Ahora lo mismo pero con datos para Sierra Nevada
# Importamos un shape del shapefile del límite del Espacio Natural de Sierra Nevada
sn_lim <- readShapePoly("C:/consulta_datos_R_gbif/EENNPP/InfGeografica/InfVectorial/Shapes/EspacioNaturalSierraNevada.shp"
, proj4string=CRS("+proj=latlong +ellps=WGS84"))
 
# Ploteamos los límites de Sierra Nevada
plot(sn_lim, border="grey", axes=TRUE)
points(melojo$lon, melojo$lat, cex=1.3, pch=19, col="blue") 
text(-3.1, 37.4, "Consulta de datos de Quercus pyrenaica\nen GBIF mediante R", cex=1.5)
text(-3.1, 36.4, "Espacio Natural de Sierra Nevada", cex=1.5)
Created by Pretty R at inside-R.org

lunes, 20 de junio de 2011

Colaborativamente aprendiendo

Como ya he manifestado en alguna ocasión, R me parece un software extremadamente potente y versátil y con una gran cantidad de recursos que permite llevar a cabo multitud de análisis. No, no me llevo comisión por su uso y por intentar venderte la moto...

Pero, y siempre los hay, una de las cosas que siempre me han desencantado es que existe muchísima información sobre él y muy dispersa. No es un defecto, pero si pude suponer una "no optimización" del escaso tiempo que uno dispone para realizar cualquier tarea.

En este sentido, creo que estamos de enhorabuena, porque, y utilizando una forma colaborativa por excelencia, se acaba de lanzar dentro de la iniciativa Wikibooks, una wiki-libro de programación sobre R. No, no os asustéis, por el título, porque incluye "capítulos" interesantísimos sobre diferentes técnicas de análisis. Por ejemplo existe uno sobre modelos lineales, donde se nos ofrecen para llevar a cabo un análisis de, por ejemplo, regresión lineal, con todos los comandos que hemos de ejecutar para llevar a cabo dicho análisis. Lo bueno, es que nos muestran muchos muchos de los comandos necesarios, no solamente los básicos, y además algunas alternativas.

Seguramente no es perfecto, pero (y aquí viene lo mejor), uno puede contribuir mejorándolo o añadiendo algún análisis que haya realizado. Así que solo decir: os animáis...

Espero que nos sirva.

Pd: No se me ha notado mucho que se han juntado dos cosas que me gustan mucho: entornos colaborativos (wikis) y análisis estadísticos.

miércoles, 8 de junio de 2011

Dos gráficos en uno. R


Retomo mi olvidado blog para escribir algunas notas y para que no se me olvide como procedí cuando quería realizar un gráfico como el que presento a continuación.

Una de las cosas que mas me gusta de R es que primero uno piensa el gráfico que necesita, y luego lo hace, es decir, que los gráficos no están tan cerrados como en otros softwares estadísticos. En este caso la idea era realizar un gráfico de densidad de dos conjuntos de datos y añadirle un boxplot que coincidiera en el eje x. Esta idea es una modificación de la que en su día tuvo el Dr. Blas Benito para representar requerimientos ecológicos de especies vegetales y que se puede encontrar aquí.

Para comprenderlo mejor vamos a entrar en faena. Supongamos que tenemos un dataset con una variable binaria (presencia/ausencia) de una especie vegetal y muchas otras variables ambientales de dichos puntos.


Como dijimos nuestro propósito es representar gráficos de densidad de los datos de presencia y ausencia respecto a una variable ambiental concreta, y añadirle después un boxplot debajo, que coincida en el eje x. Para ello en primer lugar creamos dos subsets de datos (uno para los datos de presencia y otro para los datos de ausencia) (existen otras formas de hacerlo, pero yo he procedido de este modo):
# Separo los datos de presencia de los no presencia
datos0 <- datos[datos$presencia==0,]
datos1 <- datos[datos$presencia==1,]
A continuación calculamos el gráfico de densidad para la variable ambiental, en este caso, la Temperatura mínima del invierno para el año 2000.
# Calculamos la Densidad para la variable temperatura mínima 
d.datos0 <- density(datos0$tmniob2000)
d.datos0 <- density(datos1$tmniob2000)

Seguidamente para asegurarnos de que todos los gráficos de todas las variables ambientales que queremos hacer guarden la misma proporción entre el plot de densidad y el boxplot, vamos a obtener los límites para los ejes x e y.
# Obtener los valores máximos de los ejes y el mínimo del eje x
ymax
<- max(c(d.datos0$y, d.datos1$y))
xmin
<- min(c(d.datos0$x, d.datos1$x))
xmax
<- max(c(d.datos0$x, d.datos1$x))
El valor ymax representa el valor positivo máximo del eje y. Esta parte del gráfico (es decir, la parte positiva) queremos que siempre suponga el 70 % (por ejemplo) del gráfico combinado (boxplot y density). La parte negativa del eje y, será donde ubiquemos los boxplots y queremos que siempre ocupen un 30 % de la proporción del gráfico combinado. Para ello lo que vamos a hacer es crear una variable llamada ymin que sea el 30 % de la región del gráfico, teniendo en cuenta para ello el valor de ymax (El fijar estas proporciones es importante porque cuando realizamos este gráfico para diferentes variables ambientales, puede ser que los boxplots no tengan el mismo tamaño).
# Establecer un mínimo en el eje y, que sea el 30 % de la región del gráfico
ymin
&lt;- (ymax*(10/7))*0.3
Una vez que tenemos fijados dichos valores, vamos a empezar a realizar el gráfico. En primer lugar dibujamos la densidad de los datos de ausencias. Seguidamente añadimos la densidad de datos de presencia.
plot(d.datos0, ylim=c(-ymin,ymax), main="", ylab="", xlab="Temperatura mínima ivierno (ºC*10)")
polygon(d.datos1, col="#669700", border="#669700")
lines(d.datos0,xlim=c(0, max(datos0$tmxvob2000)), ylim=c(0,ymax), col="#336699", lwd=2)

Tras hacerlo nos queda una cosa similar a esta
Si os fijáis nos queda un espacio vacío en la zona negativa del eje y, que siempre será de la misma proporción para todos los gráficos de todas las variables ambientales. Allí es donde vamos a realizar el gráfico de boxplots. Para ello vamos a utilizar una función llamada subplots(), del package TeachingDemos. Su funcionamiento es muy sencillo y como argumentos (ver ayuda de la función) establecemos qué gráfico vamos a incluir y en qué lugar. Para eso último utilizaremos las coordenadas de la región gráfica, haciendo uso del argumento 'usr' de la función par (). Este argumento es un vector de 4 elementos dando las coordenadas de los extremos de la región gráfica, en el siguiente modo c(x1, x2, y1, y2). Para el caso de las coordenadas del eje x, utilizamos par('usr')[1:2], y para la región negativa del eje y, lo que hacemos es dividirla en dos para que cuadren los dos boxplot. Todo ello lo hacemos así:
subplot(boxplot(datos1$tmxvob2000, horizontal=T, ylim=c(xmin,xmax), axes=F, col="#669700"),par('usr')[1:2], c((par('usr')[3] - 0)/2,0))
subplot(boxplot(datos0$tmxvob2000, horizontal=T, ylim=c(xmin,xmax), axes=F, col="#336699"),par('usr')[1:2], c(par('usr')[3],(par('usr')[3] - 0)/2))
Y conseguimos el gráfico combinado que nos proponíamos al inicio. Como se puede apreciar los boxplots coincíden en el eje x con los gráficos de densidad.



Pues nada más por ahora, espero os sirva.

Pd: Gracias al Dr. Benito por los datos.
Pd2: Para presentar el código he utilizado Pretty-R





domingo, 6 de marzo de 2011

Atardecer...

Un atardecer en la Boca de la Pescá (Sierra Nevada). Sin palabras!!



miércoles, 2 de marzo de 2011

La web 2.0 en investigación en regiones de alta montaña

Durante un tiempo he estado implicado junto a parte del equipo del Laboratorio de Ecología del CEAMA en fomentar la utilización de las herramientas de colaboración y comunicación que ofrece la web 2.0 en el Observatorio de Cambio Global de Sierra Nevada. Los resultados que hemos observado nos dejan un sabor agridulce. De forma extremadamente resumida (y muy a grosso modo - para mas información ver esta y esta publicación-) podemos decir que hemos, entre otras cosas, aumentado la visibilidad del proyecto y mejorado la disponibilidad de materiales científicos, pero, siendo honestos, nos ha defraudado la implicación y participación de los usuarios a los que iba dirigido. Pero esto no es excepcional. Es un problema que ya anunciaban los impulsores de la llamada Ciencia 2.0, y que se ha obtenido en diversas disciplinas científicas.
La investigación en regiones de montaña, no escapa a esta tendencia. La iniciativa mountain.TRIP (Mountain Sustainability: Transforming Research into Practice) pretende crear una red de transferencia de conocimiento entre científicos y gestores de los recursos, utilizando recursos y tecnologías innovadoras de la web 2.0. En sus primeros años ha realizado una recopilación de proyectos de investigación en regiones de montaña de Europa. Algunos resultados (disponibles aquí y aquí) de dicha recopilación muestran las deficiencias en la transferencia de conocimiento y sobre todo en el uso de nuevas herramientas de comunicación.

Destaca por un lado que las plataformas en web (wikis, blogs, redes sociales, videos online, etc) son las que presentan el menor porcentaje de uso como fuente de información; y que además son las que mayor porcentaje de respuestas categorizadas como "No útiles" presentan.

Por otro lado, llama la atención que cerca del 35 % de los proyectos analizados presentan resultados que pueden ser potencialmente útiles para los gestores, pero cuya información no está disponible. Además la mayoría de los resultados están en formatos dirigidos a la comunidad científica y no en formatos mas cercanos a los gestores del medio natural. En definitiva el uso de estas nuevas herramientas no está todavía implantado en la investigación en áreas de montaña.

Sin embargo, me resisto a pensar que estas herramientas no sean útiles para mejora la divulgación de resultados y para agilizar la transferencia de conocimiento científico actualizado. La apuesta por estas herramientas nuevas de comunicación y colaboración no pretende suplantar ni sustituir a las tradicionales, mas bien al contrario, pretenden ser un complemento que agilice, facilite y mejore los procesos de colaboración, divulgación y transferencia. Pero para ello creo que el primer paso es que los investigadores veamos que estas herramientas son útiles, de esta forma las usaremos más.




lunes, 14 de febrero de 2011

Sobre open acces en ecología




Acaba de salir un número especial de Science sobre el Open Access. La verdad que los artículos que presentan tienen muy buena pinta. Por ahora, solo me ha dado tiempo a estrujar uno de ellos con un título bastante sugerente: Challenges and opportunities of open data in Ecology. Entre los autores, nada menos que Matt Jones, entre otros. Algunas de las cuestiones que trata este artículo:
  • Menos del 1% de los datos ecológicos que se toman, se ponen luego accesibles tras la publicación de resultados asociados.
  • Una de las claves para reducir la heterogeneidad es la utilización de estándares de metadatos (nuestro amigo el EML, Ecological Metadata Languague)
Pero tiene mas cosas interesantes. Os animo a leerlo y discutirlo.



Reichman OJ, Jones MB, & Schildhauer MP (2011). Challenges and opportunities of open data in ecology. Science (New York, N.Y.), 331 (6018), 703-5 PMID: 21311007