Se recomienda tener la última versión de R instalada R 4.5.1.
Para el procesamiento y el análisis de los datos, sera necesario utilizar los siguientes paquetes:
library(sf)
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(readxl)
library(janitor)
##
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(leaflet)
library(leaflet.extras)
library(tidyr)
library(viridis)
## Loading required package: viridisLite
library(vegan)
## Loading required package: permute
## Loading required package: lattice
## This is vegan 2.6-6.1
Obsérvese que la lectura de un paquete se realiza con la función
library() y en caso de que aparezca el siguiente error
Error: no se encontró la librería 'nombre_paquete', el cual
indica que el paquete bajo el nombre nombre_paquete no está
instalado, puede proceder instalándolo con la siguiente línea de código
install.package("nombre_paquete").
Una vez realizada la lectura de los paquetes, se procede a realizar la importación o lectura de la base de datos. Considerando en este caso que no solo se cuenta con el archivo que contiene los datos del levantamiento, sino que además, se necesitan archivos de la capa base (ya sea poligonos o raster) para la proyección del mapa del campus universitario UNAL; entonces la importación se realizará para ambos archivos.
Consideremos que el archivo en el cual se encuentran los datos esta
un formato .xlsx (es decir, un archivo excel), se utilizará la
función read_excel() para la importación como se muestra a
continuación:
ruta <- "C:\\Users\\brial\\OneDrive\\Documentos\\Avistamiento_Aves\\"
aves <- read_excel(paste(ruta,"Simulados_datos.xlsx", sep=""),
sheet = "Hoja3")
Cabe mencionar, que la ruta debe ajustarse según donde tenga guardado su archivo.
Considere ahora que su archivo de datos sobre el avistamiento de aves no se encuentra en un archivo .xlsx sino en un archivo .csv, entonces la indicación es utilizar la función read.csv() adecuada para esta situación. A continuación, un ejemplo:
aves <- read.csv(ruta,sep = ";")
Note que esta función posee el parametro sep = ";" lo
que indica que nuestro archivo esta separado por el signo “;”; por lo
cual, usted deberá ajustar este parametro según requiera (por ejemplo:
“,”, “_“,”-“,”@“,…).
Una vez realizada la lectura de la base de datos, se procederá con un tratamiento sencillo para mostrar un ejemplo sencillo de cómo tratar su base de datos una vez cargada al programa R.
aves <- aves %>%
select(decimalLongitude, decimalLatitude, scientificName, cantidad) %>%
mutate(
longitud = as.numeric(decimalLongitude),
latitud = as.numeric(decimalLatitude)
) %>%
filter(!is.na(latitud), !is.na(longitud))
aves_filtro <- aves %>%
select(decimalLatitude, scientificName, cantidad) %>%
mutate(
latitud = as.numeric(decimalLatitude)
) %>%
group_by(scientificName) %>%
summarise(Total_individuos = sum(cantidad, na.rm = TRUE)) %>%
filter((scientificName == "Colinus cristatus" |
scientificName == "Eupsittula pertinax" |
scientificName == "Falco sparverius"
) &
Total_individuos >= 3)
En este caso, el paquete dplyr permite ejecutar varias
acciones a una base de datos y generar una nueva con todo el tratamiento
realizado, esto lo realiza con ayuda del operador %>%.
En el codigo mostrado anteriormente para generar la tabla
aves_filtro permite seleccionar en primer lugar las columnas
que se deseen, en segundo lugar, agregar nuevas columnas, en tercer
lugar, agrupar y resumir los datos agrupados sumandolos, en cuarto
lugar, filtrar los datos cuantas veces desee.
campus <- st_read(paste(ruta,"campus_unal.shp", sep=""), quiet = TRUE) %>%
st_transform(4326) %>%
st_make_valid()
aves.sf <- aves %>%
st_as_sf(coords = c("longitud", "latitud"), crs = 4326, remove = FALSE)
aves.sf <- aves.sf[st_within(aves.sf, campus, sparse = FALSE), ]
leaflet() %>%
addProviderTiles("Esri.WorldImagery") %>%
addPolygons(data = campus, fillColor = "transparent", color = "red", weight = 2) %>%
addCircleMarkers(
lng = aves.sf$longitud,
lat = aves.sf$latitud,
radius = 5,
color = "orange",
stroke = FALSE,
fillOpacity = 0.7,
popup = paste0(
"<b>Nombre:</b> ", aves.sf$scientificName, "<br>",
"<b>Coordenada:</b> ", aves.sf$longitud, ";", aves.sf$latitud, "<br>"
)
)
leaflet() %>%
addProviderTiles("Esri.WorldImagery") %>%
addPolygons(data = campus, fillColor = "transparent", color = "red", weight = 2) %>%
addHeatmap(
lng = aves.sf$longitud,
lat = aves.sf$latitud,
intensity = aves.sf$cantidad * 3,
radius = 50, blur = 20,
max = max(aves.sf$cantidad, na.rm = TRUE),
gradient = c(
"0.0" = "transparent",
"0.2" = "skyblue",
"0.4" = "limegreen",
"0.6" = "yellow",
"0.8" = "orange",
"1.0" = "red"
)
)
# Convertir a proyección métrica (UTM zona 18N)
campus_utm <- st_transform(campus, 32618)
aves_sf_utm <- st_transform(aves.sf, 32618)
# Crear una cuadrícula de 100 m dentro del campus
grid <- st_make_grid(campus_utm, cellsize = 100, square = TRUE)
grid_sf <- st_sf(ID = 1:length(grid), geometry = grid)
grid_campus <- st_intersection(grid_sf, campus_utm)
## Warning: attribute variables are assumed to be spatially constant throughout
## all geometries
# Unir aves a la cuadrícula
aves_join <- st_join(aves_sf_utm, grid_campus, left = FALSE)
tabla_abundancia <- aves_join %>%
st_drop_geometry() %>%
group_by(ID, scientificName) %>%
summarise(Total_individuos = sum(cantidad, na.rm = TRUE)) %>%
ungroup() %>%
pivot_wider(names_from = scientificName,
values_from = Total_individuos,
values_fill = 0)
## `summarise()` has grouped output by 'ID'. You can override using the `.groups`
## argument.
diversidad_indices <- tabla_abundancia %>%
mutate(
Shannon = diversity(select(., -ID), index = "shannon"),
Simpson = diversity(select(., -ID), index = "simpson")
) %>%
select(ID, Shannon, Simpson)
diversidad_sf <- grid_campus %>%
left_join(diversidad_indices, by = "ID") %>%
st_transform(4326)
pal_shannon <- colorNumeric("viridis", domain = diversidad_sf$Shannon)
leaflet(diversidad_sf) %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addPolygons(
fillColor = ~pal_shannon(Shannon),
color = "grey40",
weight = 1,
fillOpacity = 0.7,
label = ~paste0("Shannon: ", round(Shannon, 2))
) %>%
addLegend(pal = pal_shannon, values = diversidad_sf$Shannon,
title = "Índice de Shannon") %>%
addPolygons(data = campus, fill = NA, color = "black", weight = 1.5)
pal_simpson <- colorNumeric("magma", domain = diversidad_sf$Simpson)
leaflet(diversidad_sf) %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addPolygons(
fillColor = ~pal_simpson(Simpson),
color = "grey40",
weight = 1,
fillOpacity = 0.7,
label = ~paste0("Simpson: ", round(Simpson, 2))
) %>%
addLegend(pal = pal_simpson, values = diversidad_sf$Simpson,
title = "Índice de Simpson") %>%
addPolygons(data = campus, fill = NA, color = "black", weight = 1.5)