Las bases de datos de diversidad contienen información global sobre la distribución geográfica de organismos. Los datos que contienen pueden ser:
Coordenadas geográficas donde fue observado un individuo
Polígonos de la distribución
A continuación se explica la naturaleza y manera de acceder a algunas de las bases de datos.
GBIF (https://www.gbif.org) es el principal repositorio global de información sobre la biodiversidad. Los datos que contiene provienen de colecciones biológicas (botánicas, zoológicas, etc.) de todo el mundo, incluyendo registros obtenidos en tiempos coloniales. GBIF en realidad es un meta-repositorio, pues importa datos de otros repositorios, haciendo que la colecta de datos sobre biodiversidad sea más sencillo. Los datos que contiene GBIF son principalmente coordenadas geográficas.
Existen dos maneras de acceder a los datos de GBIF:
Directamente del portal. Descargar los datos por esta vía requiere registro. La ventaja es que una vez abierta una cuenta de usuario, se guardan los detalles de todas las descargas solicitadas y a estas se les asigna un DOI.
Desde R. El paquete dismo
(distribution modeling) contiene una función dedicada al la búsqueda y descarga de los datos de GBIF, lo que evita la necesidad de iniciar sesión y solicitar manualmente la descarga de los datos.
El proceso de obtención de datos desde el portal de GBIF es genérico, aunque se requiere de inicio de sesión. Una vez iniciada la sesión, es posible realizar un búsqueda simple mediante la herramienta de búsqueda.
Por ejemplo, podemos buscar la almeja galáctica (Panopea fantastica, Sebastián y David 2023):
Al realizar la búsqueda nos encontramos con que, lamentablemente, sólo hay registros de una especie hermana terrestre que habita en el Pacífico norte:
Para obtener los datos de la especie que buscamos, deberemos seleccionar la pestaña de Descargas que aparece arriba del mapa donde se muestran los datos existentes:
Entre las opciones posibles de descarga, seleccionaremos .csv
:
Existe la posibilidad de buscar información de manera más refinada, por ejemplo por región geográfica.
La descarga con dichos filtros sólo incluirá los datos dentro del polígono especificado.
Otras búsquedas incluyen niveles taxonómicos superiores a especie, género, familia etc., ó todos combinados por región geográfica. Además de especificar un polígono a mano alzada, también se puede hacer búsqueda y descarga por el nombre de la región geográfica, fecha, colección de procedencia, precisión, etc.
Para descargar datos de GBIF desde R necesitamos primero instalar el paquete dismo
:
install.packages("dismo")
Una vez instalado, lo cargamos para la sesión de trabajo de R y utilizamos la función gbif
. Para que dismo
se pueda ejecutar correctamente, necesitamos tener instalados los paquetes raster
y sp
. El paquete raster será eliminado próximamente de los repositorios de R y será reemplazado por terra
. Mientas dismo
no sea compatible con terra
usaremos raster
:
library(dismo)
## Loading required package: raster
## Loading required package: sp
sp <- gbif(genus = "Cachryx", species = "defensor")
## 169 records found
## 0-169 records downloaded
La función gbif
requiere cuando menos de dos argumentos, genus
y species
. Argumentos adicionales pueden ser provistos por ejemplo para restringir la búsqueda a un dominio espacial especfífico. Mientras se realiza la búsqueda, gbif
responderá indicando el número de registros que ha encontrado. Una vez terminada la descarga, el objeto creado por gbif
será de tipo data.frame
:
class(sp)
## [1] "data.frame"
Esta tabla tiene 133 columnas que representan metadatos como identificadores dentro de GBIF, de las colecciones donde están depositados los especímenes, de quien realizó las colectas, fecha el registro, etc. Los datos que nos son de más utilidad son la latitud y longitud. Los nombres de las columnas que las contienen son lon
y lat
. Podemos revisar los primeros y últimos 6 datos de las columnas que contienen las coordenadas, para ver que hay observaciones donde faltan las cordenadas.
lon | lat |
---|---|
-89.62138 | 20.95758 |
-89.62138 | 20.95758 |
-89.69778 | 19.38624 |
-90.40167 | 20.85281 |
-90.20193 | 20.77426 |
-89.53405 | 21.22869 |
lon | lat | |
---|---|---|
164 | NA | NA |
165 | -88.56652 | 20.66726 |
166 | NA | NA |
167 | NA | NA |
168 | NA | NA |
169 | NA | NA |
El procedimiento habitual, es eliminar esos datos faltantes. En R, podemos eliminarlos usando na.omit
. Antes de eliminar estos datos faltantes, tenemos que crear otro data.frame
que sólo contenga las coordenadas geográficas:
xy <- subset(sp, select = c("lon", "lat"))
xy.na <- na.omit(xy)
Otros procedimientos de limpieza son:
La eliminación de duplicados es sencilla. Comenzamos multiplicando longitud y latitud, y usamos el producto para ver cuáles datos no son únicos:
p <- with(xy.na, lon * lat)
xy.na$p <- p
xy.unicos <- unique(xy.na)
dim(xy.unicos)
## [1] 75 3
Como podemos ver, después de eliminar datos faltantes y duplicados sólo tenemos 75 observaciones. De estas algunas tendrán errores de localización, por lo que hay que eliminarlos también. Una manera de hacerlo es teniendo una capa de máscara que contenga el área distribucional aproximada, ó los límites M de nuestra especie, de modo que eliminemos todos lo que quedan fuera de ella. En este caso, tomaremos como área accesibe a toda la península (Descarga aquí):
library(terra)
## terra 1.7.29
v <- vect("Datos/Peninsula.gpkg") #Importando área de estudio
xy.s <- vect(xy.unicos[, c("lat", "lon")])# transformando de df a vector
plot(v); points(xy.s)
e <- terra::extract(v, xy.s)
e.na <- which(!is.na(e$GID_0))
xy.corr <- xy.unicos[e.na, ]
plot(v); points(xy.corr[, c("lon", "lat")], pch = 20)
Una vez eliminados los puntos, podemos guardar la base de datos limpia como csv
, ó gpkg
para uso en sistemas de información geográfica:
write.csv(xy.corr, "Datos/Cachryx.csv", row.names = F)
writeVector(vect(xy.corr[, c("lon", "lat")]), filename = "Datos/Cachryx.gpkg", filetype = "GPKG")
Naturalista (https://naturalista.mx) es una iniciativa de ciencia ciudadana con un proceso de validación gradual por expertos. Las contribuciones a naturalista son hechas por el público en general por medio de fotografías georreferenciadas.
La descarga desde R requiere de la instalación del paquete rinat
:
install.packages("rinat")
La función de rinat
con la que descargamos los datos es get_inat_obs
, que se usa de la siguiente manera:
library(rinat)
sp1 <- get_inat_obs(taxon_name = "Cachryx defensor")
El resultado de la descarga es una tabla con 37 columnas que contienen los metadatos asociados a cada observación. Para Cachryx defensor, podemos ver que hay 90 observaciones:
dim(sp1)
## [1] 90 37
Para análisis espaciales necesitamos cuando menos conocer las columnas que contienen la longitud y latitud. Al igual que para GBIF, podemos extraerlas:
xy.1 <- subset(sp1, selec = c("longitude", "latitude"))
Para ver la distribución de los puntos en el área de estudio:
plot(v); points(xy.1, pch = 20)
El resto del proceso de limpieza y filtrado de los registros es igual que para GBIF. Cabe mencionar, que los registros de presencia de organismos sujetos a protección especial son modificados de manera automática por el sistema de Naturalista. Es posible solicitar acceso a las coordenadas reales contactando al responsable del registro. Si el análisis a realizar no requiere de alta precisión espacial, podría omitirse dicho paso.
Este es otro repositorio de información distribucional únicamente de vertebrados. Al igual que Naturalista y GBIF, sus registros pueden obtenerse desde R. Para ello, necesitamos el paquete rvertnet
:
install.packages("rvertnet")
La descarga la realizamos con la función vertsearch
, y utiliza como único argumento el nombre de la especie que buscamos:
library(rvertnet)
sp2 <- vertsearch("Cachryx defensor")
## Processing request...
##
## Last Query URL: "http://api.vertnet-portal.appspot.com/api/search?q={"q":"Cachryx defensor","l":1000}"
##
## Matching records: 14 returned, 14 available
En este caso, el objeto que se obtiene es de tipo list
:
class(sp2)
## [1] "list"
La base de datos tabulada que necesitamos está en la posición con nombre “data”:
## [1] "tbl_df" "tbl" "data.frame"
Si analizamos los contenidos de la búsqueda, encontraremos que no hay registros geo-referenciados para Cachryx defensor. Podemos, hacer otra búsqueda que sí produzca resultados goegráficos, por ejemplo, para Ctenosaura similis:
sp3 <- vertsearch("Ctenosaura similis")
## Processing request...
##
## Last Query URL: "http://api.vertnet-portal.appspot.com/api/search?q={"q":"Ctenosaura similis","l":1000}"
##
## Matching records: 1000 returned, 2233 available
Cuando los resultados de la búsqueda sí están georreferenciados, podemos generar un mapa con la función vertmap
:
vertmap(sp3)
Como resulta obvio, sería necesario un cuidadoso escrutinio de los registros puesto que los resultados incluyen observaciones de otros organismos.
Para extraer las coordenadas, extraremos la columnas decimallatitude
y decimallongitude
, y para extraer sólo los registros de Ctenosaura similis, necesitamos la columna scientificname
xy.3 <- subset(sp3$data, select = c("decimallatitude", "decimallongitude"),
scientificname %in% c("Ctenosaura similis", "CTENOSAURA SIMILIS"))
El resto del proceso de limpieza de los datos es igual a GBIF.
Existen bases de datos más especializadas en grupos taxonómicos ó regiones geográficas. Algunas bases de datos son increíblemente detalladas espacial y temporalmente: