Introducción

Otra de las herramientas fundamentales del análisis y la gestión, como muchos sabréis, son los Sistemas de Información Geográfica o SIG que gestionan y generan información geográfica. Aunque están programados en otro de los lenguajes de programación y análisis punteros, Python, lo cierto es que R es en sí mismo un excelente sistema de información geográfica, con infinidad de paquetes y herramientas. Algunos tipos de análisis están, de hecho, implementados en R de la forma más eficiente por encima de otros lenguajes o programas, como es la proyección de la distribución potencial de las especias de fauna y flora.

En este pequeño tutorial os mostramos alguna potencialidad a la hora de visualizar datos de tipo espacial. Tanto tipo raster como tipo vectorial. Si no estáis familiarizados con la información geográfica espacial, conviene recordar que:

Visualización de imágenes georeferenciadas (raster)

En primer lugar, vamos a descargar el paquete fundamental para visualizar la información de este tipo, que tiene el nombre lógico de raster.

install.packages("raster")
library(raster)

La función raster() del paquete es la que nos va a permitir cargar un archivo de este tipo y generar un objeto de este tipo. En este ejemplo, vamos a cargar de esta manera el archivo de la temperatura media de la península, que disponemos en formato .tiff en la carpeta de datos donde trabajamos:

tmedia<-raster("tmedia.tif")

Como decíamos al principio del tema, la función plot() será capaz de detectar el tipo de objeto que tenemos y cómo hay que generar, por defecto, una figura:

plot(tmedia)

Visualización de información vectorial

Hay muchos paquetes en R capaces de leer información vectorial y en concreto el formato shape que a su vez, se compone de varios ficheros. Hemos escogido el paquete sf por su simplicidad a efectos de poder visualizar rápidamente geometrías de los límites de los Parques Natuales de España. Instalamos y cargamos la librería:

install.packages("sf")
library(sf)

Ya con el paquete cargado, podemos proceder a leer nuestro archivo shapefile con la función read_sf(). Ojo, el archivo shapefile se compone a su vez de varios. Por lo tanto, los hemos guardados juntos en la carpeta “Parques”, que no tiene nada más dentro. De esta manera nuestra función podrá disponer de los archivos que necesite interpretar si únicamente especificamos la ruta de la carpeta.

parques<-read_sf("parques")

Una vez generado, necesitamos hacer una pequeña simplificación de toda la información que contiene nuestro objeto, de manera que nos quedemos con algo que solo contenga los datos de los límites de los parques. No vamos a profundizar aquí en esto, en cualquier caso.

limites<-st_geometry(parques)

Ahora podemos visualizar nuestros datos de los límites de parques naturales:

plot(parques)
## Warning: plotting the first 9 out of 14 attributes; use max.plot = 14 to plot
## all

Pero en realidad, me interesa ver los dos mapas juntos, solapando los límites de áreas protegidas al mapa de temperatura media. Para ello, solo tenemos que volver a llamar a nuestro primer mapa, y para solapar encima el de límites, añadir el argumento add=TRUE.

plot(tmedia)
plot(parques,add=TRUE)
## Warning in plot.sf(parques, add = TRUE): ignoring all but the first attribute

Si queréis seguir profundizando, es útil ver que las coordenadas de puntos son más simples de añadir. En realidad, siendo datos x e y de longitud y latitud, se trata fundamentalmente de añadir un diagrama de dispersión. Lo vamos a ver con un archivo de datos de distribución de especies de plantas invasoras en España, invasoras.txt, que cargaremos:

invasoras<-read.csv("invasoras.csv")

Este archivo nos muestra tres datos: la especie invasora, y las coordenadas donde aparece cada registro. Vamos a seleccionar dos de ellas: Acacia dealbata y Agave americana. Para hacer la selección de una vez, como veremos en el tema 7, podemos decirle a R que nos seleccione aquellas filas de datos que cumplan la condición 1 O la condición 2, cualquiera de ellas hará que nos seleccione el dato. En este caso, nos seleccionará al mismo tiempo las dos especies deseadas:

seleccion<-subset(invasoras,aespecie=="Acacia_dealbata" | aespecie=="Agave_americana")

A continuación realizo un objeto coordenadas, donde excluyo (con el - delante) la columna 1 que contiene los datos de nombres de especies y me quedo solo con las de coordendas. Esas son las que añadiré encima de mi mapa. En este caso con la función points(). Voy a añadir de paso el argumento col para que me coloree los puntos de manera diferente para cada especie:

plot(tmedia)
plot(limites,add=TRUE)
coordenadas<-seleccion[-c(1)]
points(coordenadas$POINT_X,coordenadas$POINT_Y,col=as.factor(seleccion$aespecie))

Y finalmente, voy a realizar mi primera operación SIG: Voy a extraer la información de temperatura media de las coordenadas de mis puntos elegidos de mis dos especies. Estaré cruzando un mapa con otro, y recogeré la información de temperatura media de aquel pixel que corresponda con la coordenada de cada punto. Esto lo haré con la función extract() de mi paquete raster: le especifico en primer lugar la capa de la cual extraer mis datos, en segundo lugar las coordenadas de las cuales quiero la información, y finalmente con dt=TRUE especifico que quiero que el resultado (almacenado en mi objeto datos sea un dataframe).

datos<-raster::extract(tmedia,coordenadas,dt=TRUE)

Una vez extraído el dato deseado, le voy a pegar la columna aespecie de mi objeto con las especies seleccionadas, para saber a qué especie corresponde. Y finalmente haré un boxplot para ver qué diferencias hay en la temperatura media en la que estas especies se dan en la península ibérica:

datos<-cbind(datos,seleccion$aespecie)
head(datos)
boxplot(datos~aespecie,data=datos)