Introducción

Este sitio web muestra visualizaciones de registros de presencia de especies silvestres de felinos (familia Felidae) de Costa Rica en forma de tablas, gráficos estadísticos y mapas. Fue desarrollado como un documento R Markdown, como ejemplo para el curso GF-0604 Procesamiento de datos geográficos de la Escuela de Geografía de la Universidad de Costa Rica, impartido durante el primer ciclo lectivo de 2022. El código fuente se encuentra en https://github.com/gf0604-procesamientodatosgeograficos/2022-i-felinos-rmarkdown.

Herramientas de desarrollo

Paquetes de R

Las visualizaciones fueron desarrolladas en el lenguaje de programación R (R Core Team, 2021) con paquetes como, entre otros, dplyr (Wickham, François, Henry, & Müller, 2021), para manipulación de datos; ggplot2 (Wickham, 2016) y plotly (Sievert, 2020), para graficación estadística; DT para tablas interactivas (Xie, Cheng, & Tan, 2021); sf (Pebesma, 2018) para manejo de datos geoespaciales vectoriales; terra (Hijmans, 2021) para manejo de datos geoespaciales raster y leaflet para creación de mapas interactivos (Cheng, Karambelkar, & Xie, 2021).

# Carga de paquetes de R

library(dplyr) # manipulación de datos
library(ggplot2) # graficación estadística
library(ggthemes) # estilos para ggplot2 
library(plotly) # graficación estadística
library(kableExtra) # tablas complejas
library(DT) # tablas interactivas
library(sf) # manejo de datos vectoriales
library(terra) # manejo de datos raster
library(raster) # manejo de datos raster
library(rgdal) # manejo de datos raster
library(leaflet) # mapas interactivos

Datos

Se utilizan tres tipos de datos:

  • Registros de presencia de especies.
  • Datos geoespaciales vectoriales.
  • Datos geoespaciales raster.

Registros de presencia de especies

Son datos primarios de biodiversidad, provenientes de fuentes como museos de historia natural y aplicaciones de ciencia ciudadana para dispositivos móviles, que proporcionan detalles de un organismo tales como su identificación taxonómica (ej. nombre de la especie), su fecha de recolección u observación, su localización (ej. país, coordenadas geográficas), el nombre de su recolector u observador y el nombre de la organización que resguarda la información. Los datos asociados a la observación un ave, a una planta depositada en un herbario o a la fotografía de un mamífero tomada por una cámara trampa son ejemplos de registros de presencia de especies. Los usos de los datos de este tipo son muy variados e incluyen el monitoreo de cambios ambientales, del efecto nocivo de pesticidas, de especies invasivas y de enfermedades infecciosas, entre muchos otros (Ball-Damerow et al., 2019).

Los registros de presencia que se utilizan en este documento fueron agrupados por la Infraestructura Mundial de Información en Biodiversidad (GBIF; en inglés, Global Biodiversity Information Facility) de acuerdo con el estándar Darwin Core, un glosario de términos orientado a apoyar el intercambio de información sobre diversidad biológica (Wieczorek et al., 2012). Para obtener los regisros, se realizó una consulta al portal de datos de GBIF que retornó 173 registros de 13 proveedores de datos (Occdownload Gbif.Org, 2022), los cuales fueron descargados en formato CSV (valores separados por comas; en inglés, Comma Separated Values). Los campos de coordenadas contenidos en este archivo se emplearon para crear geometrías de puntos mediante el método st_read() de sf. Posteriormente, a las geometrías se les asignó el sistema de coordenadas WGS84 (código EPSG = 4326).

# Lectura de un archivo CSV con registros de presencia de felinos de Costa Rica
felinos <- # objeto sf de datos vectoriales con geometrías de puntos
  st_read(
    "datos/felinos.csv", # archivo de datos de entrada
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude", # columna de longitud decimal
      "Y_POSSIBLE_NAMES=decimalLatitude"  # columna de latitud decimal
    ),
    quiet = TRUE
  )

# Asignación del sistema de coordenadas WGS84 al objeto felinos
st_crs(felinos) <- 4326

Datos geoespaciales vectoriales

Se utilizan también datos vectoriales con geometrías de multipolígonos correspondientes a las siete provincias de Costa Rica. Estos datos provienen de un geoservicio WFS (en inglés, Web Feature Service) publicado por el Instituto Geográfico Nacional (IGN), desde el que convirtieron a un archivo en formato GeoJSON, el cual se leyó y cargó en R con el método st_read() de sf. Luego, las geometrías se transformaron al sistema de coordenadas WGS84 (EPSG = 4326).

# Lectura de una capa vectorial (GeoJSON) de provincias de Costa Rica

provincias <- # objeto sf de datos vectoriales con geometrías de multipolígonos
  st_read(
    "datos/provincias.geojson", # archivo de datos de entrada
    quiet = TRUE
  ) %>%
  st_transform(4326) # transformación al sistema de coordenadas WGS84

Datos geoespaciales raster

Por último, se utiliza un archivo raster de altitud de Costa Rica proveniente de WorldClim, un conjunto de capas climáticas (precipitación, temperatura, radiación solar, etc.) disponibles en varias resoluciones para emplearse en mapas y modelado espacial (Fick & Hijmans, 2017). La capa global de altitud de WorldClim se recortó de acuerdo con el contorno de las provincias de Costa Rica y se guardó en un archivo GeoTIFF, el cual se leyó y cargó en R con el método rast de terra.

# Lectura de una capa raster (GeoTIFF) de altitud de Costa Rica

altitud <- # objeto tipo SpatRaster
  rast(
    "datos/altitud.tif" # archivo de datos de entrada
  )

Especies presentes en Costa Rica

En la clasificación taxonómica, los felinos son una familia con nombre científico Felidae, perteneciente al orden de los carnívoros (Carnivora) y a la clase de los mamíferos (Mammalia). Contiene, al menos, 36 especies silvestres. Entre sus similitudes morfológicas pueden mencionarse caras redondas, bigotes, ojos grandes y orejas grandes. Tienen el rango más amplio de tamaños corporales de todas las familias de carnívoros, con pesos que van desde 1 kg hasta 300 kg. Ocupan hábitats muy diversos y su distribución natural cubre todo el planeta, con la excepción de la Antártida y Australia, donde han sido introducidos por el ser humano (Lamberski, 2015).

En Costa Rica hay seis especies de felinos silvestres, cuyas principales características se resumen a continuación:

# Tabla con información de especies de felinos de Costa Rica

# Data frame con datos
especies_felinos <-
  data.frame(
    nombre_cientifico = c(
      "Leopardus pardalis",
      "Leopardus tigrinus",
      "Leopardus wiedii",
      "Panthera onca",
      "Puma concolor",
      "Puma yagouaroundi"
    ),
    url = c(
      "https://es.wikipedia.org/wiki/Leopardus_pardalis",
      "https://es.wikipedia.org/wiki/Leopardus_tigrinus",
      "https://es.wikipedia.org/wiki/Leopardus_wiedii",
      "https://es.wikipedia.org/wiki/Panthera_onca",
      "https://es.wikipedia.org/wiki/Puma_concolor",
      "https://es.wikipedia.org/wiki/Herpailurus_yagouaroundi"
    ),
    nombre_comun = c(
      "Manigordo, ocelote",
      "Tigrillo",
      "Caucel",
      "Jaguar",
      "Puma",
      "León breñero, yaguarundí"
    ),
    longitud = c("110 cm", "78 cm", "94 cm", "2 m", "1.7 m", "1.25 m"),
    peso = c("7 - 15 kg", "1.5 - 2.8 kg", "3 - 5 kg", "30 - 100 kg", "24 - 65 kg", "4 - 9 kg"),
    estado_conservacion = c(
      "En peligro de extinción",
      "En peligro de extinción",
      "En peligro de extinción",
      "En peligro de extinción",
      "En peligro de extinción",
      "En peligro de extinción"
    ),
    imagen = ""
  )

# Se formatea la columna con el URL que navega al artículo de Wikipedia para cada especie
especies_felinos <-
  especies_felinos %>%
  mutate(nombre_cientifico = cell_spec(nombre_cientifico, "html", link = url)) %>%
  dplyr::select(-url)

# Tabla con formato e imágenes
especies_felinos %>%
  kbl(
    "html",
    caption = "Especies de felinos de Costa Rica",
    escape = FALSE,
    col.names = c(
      "Nombre científico",
      "Nombre común",
      "Longitud (*)",
      "Peso (*)",
      "Estado de conservación (**)",
      "Imagen (***)"
    )
  ) %>%
  kable_paper(full_width = TRUE) %>%
  row_spec(0, align = "c") %>%
  column_spec(1, italic = TRUE) %>%
  column_spec(6, image = spec_image(
    c(
      "img/leopardus_pardalis.png",
      "img/leopardus_tigrinus.png",
      "img/leopardus_wiedii.png",
      "img/panthera_onca.png",
      "img/puma_concolor.png",
      "img/puma_yagouaroundi.png"
    ),
    400,
    400
  ))
Especies de felinos de Costa Rica
Nombre científico Nombre común Longitud (*) Peso (*) Estado de conservación (**) Imagen (***)
Leopardus pardalis Manigordo, ocelote 110 cm 7 - 15 kg En peligro de extinción
Leopardus tigrinus Tigrillo 78 cm 1.5 - 2.8 kg En peligro de extinción
Leopardus wiedii Caucel 94 cm 3 - 5 kg En peligro de extinción
Panthera onca Jaguar 2 m 30 - 100 kg En peligro de extinción
Puma concolor Puma 1.7 m 24 - 65 kg En peligro de extinción
Puma yagouaroundi León breñero, yaguarundí 1.25 m 4 - 9 kg En peligro de extinción

(*) Fuente: Costa Rica Silvestre - Vecinos silvestres - Felinos (Sinac, 2019).
(**) Fuente: R-SINAC-CONAC-092-2017 - Establece la lista oficial de especies en peligro de extinción y con poblaciones reducidas y amenazadas (Sinac, 2017).
(***) Fuente: Imágenes del Centro de Rescate y Refugio Las Pumas, publicadas en Costa Rica Silvestre - Vecinos silvestres - Felinos (Sinac, 2019).

Visualizaciones de datos

Tablas

Registros de presencia

La siguiente tabla muestra la lista de registros de presencia, con un subconjunto de columnas seleccionadas, en una tabla interactiva del paquete DT.

# Tabla interactiva del paquete DT

felinos %>%
  st_drop_geometry() %>% # se suprime la columna de geometría
  dplyr::select(species,
                # selección de columnas
                eventDate,
                stateProvince,
                locality,
                decimalLongitude,
                decimalLatitude) %>%
  datatable(
    options = list(
      pageLength = 5,
      # cantidad de registros en una página
      language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json') # traducción al español
    ),
    colnames = c(
      # encabezados de las columnas
      "Especie",
      "Fecha",
      "Provincia",
      "Localidad",
      "Longitud",
      "Latitud"
    )
  )

Gráficos

Registros de presencia por especie

Se muestra la cantidad de registros por especie en un gráfico de barras. Se construye con el paquete ggplot2 y luego se utiliza la función ggplotly() para convertirlo a un gráfico interactivo de plotly.

# Gráfico de barras de cantidad de registros por especie

# Gráfico ggplot2
grafico_registros_x_especie <-
  felinos %>%
  count(species) %>% # se realiza primero el conteo de registros por especies, para luego facilitar el ordenamiento de las barras
  ggplot(aes(x = reorder(species, n), y = n)) +
  geom_bar(stat = "identity") +
  xlab("Especie") +
  ylab("Registros de presencia") +
  coord_flip() + # inversión de ejes
  theme_hc() # tema del paquete ggthemes

# Gráfico plotly
grafico_registros_x_especie %>%
  ggplotly() %>% 
  config(locale = 'es') # traducción de etiquetas al español

Mapas

Registros de presencia

El siguiente mapa interactivo fue creado con el paquete leaflet y muestra la ubicación de los registros de presencia en un mapa que, además, despliega una capa base de OpenStreetMap (OSM), la capa raster de altitud de Costa Rica y la capa vectorial de polígonos de provincias de Costa Rica.

# Mapa leaflet básico con capas de altitud, provincias y registros de presencia de felinos

leaflet() %>%
  addTiles() %>% # capa base de OSM
  addRasterImage( # capa raster de altitud
    raster(altitud), # la capa se convierte al formato RasterLayer del paquete raster, para compatibilidad con leaflet
    opacity = 0.6
  ) %>%    
  addPolygons( # capa vectorial de polígonos de provincias
    data = provincias,
    color = "black",
    fillColor = "transparent",
    stroke = TRUE,
    weight = 1.0,
  ) %>%
  addCircleMarkers( # capa vectorial de puntos de registros de presencia
    data = felinos,
    stroke = F,
    radius = 4,
    fillColor = 'blue',
    fillOpacity = 1
  )

Bibliografía

Ball-Damerow, J. E., Brenskelle, L., Barve, N., Soltis, P. S., Sierwald, P., Bieler, R., … Guralnick, R. P. (2019). Research applications of primary biodiversity databases in the digital age. PLOS ONE, 14(9), e0215794. https://doi.org/10.1371/journal.pone.0215794
Cheng, J., Karambelkar, B., & Xie, Y. (2021). Leaflet: Create interactive web maps with the JavaScript ’leaflet’ library. Retrieved from https://CRAN.R-project.org/package=leaflet
Fick, S. E., & Hijmans, R. J. (2017). WorldClim 2: New 1-km spatial resolution climate surfaces for global land areas. International Journal of Climatology, 37(12), 4302–4315. https://doi.org/10.1002/joc.5086
Hijmans, R. J. (2021). Terra: Spatial data analysis. Retrieved from https://CRAN.R-project.org/package=terra
Lamberski, N. (2015). Felidae. Fowler’s Zoo and Wild Animal Medicine, Volume 8, 467–476. https://doi.org/10.1016/B978-1-4557-7397-8.00047-5
Occdownload Gbif.Org. (2022). Occurrence download. The Global Biodiversity Information Facility. https://doi.org/10.15468/DL.K4UUUY
Pebesma, E. (2018). Simple Features for R: Standardized Support for Spatial Vector Data. The R Journal, 10(1), 439–446. https://doi.org/10.32614/RJ-2018-009
R Core Team. (2021). R: A language and environment for statistical computing. Vienna, Austria: R Foundation for Statistical Computing. Retrieved from https://www.R-project.org/
Sievert, C. (2020). Interactive web-based data visualization with r, plotly, and shiny. Chapman; Hall/CRC. Retrieved from https://plotly-r.com
Sinac. (2017). R-SINAC-CONAC-092-2017 - Establece la lista oficial de especies en peligro de extinción y con poblaciones reducidas y amenazadas. Retrieved from http://www.pgrweb.go.cr/scij/Busqueda/Normativa/Normas/nrm_texto_completo.aspx?param1=NRTC&nValor1=1&nValor2=84908&nValor3=109703&strTipM=TC
Sinac. (2019). Costa Rica Silvestre - Vecinos silvestres - Felinos. Retrieved from https://costaricasilvestre.go.cr/wp-content/uploads/2020/11/ficha-felinos.pdf
Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer-Verlag New York. Retrieved from https://ggplot2.tidyverse.org
Wickham, H., François, R., Henry, L., & Müller, K. (2021). Dplyr: A grammar of data manipulation. Retrieved from https://CRAN.R-project.org/package=dplyr
Wieczorek, J., Bloom, D., Guralnick, R., Blum, S., Döring, M., Giovanni, R., … Vieglais, D. (2012). Darwin Core: An Evolving Community-Developed Biodiversity Data Standard. PLOS ONE, 7(1), e29715. https://doi.org/10.1371/journal.pone.0029715
Xie, Y., Cheng, J., & Tan, X. (2021). DT: A wrapper of the JavaScript library ’DataTables’. Retrieved from https://CRAN.R-project.org/package=DT