Riqueza de especies

Species acumulation curves, rarefaction and other plots

using packages vegan and iNext to analyze diversity on camera trap data
R
diversity
accumulation
effort
Author
Affiliation

Diego J. Lizcano

WildMon

Published

June 25, 2024

Riqueza de especies y esfuerzo de muestreo

Hay dos formas de uso común para tener en cuenta el esfuerzo de muestreo al estimar la riqueza de especies mediante cámaras trampa:

utilizando la rarefacción de la riqueza observada.

utilizando modelos de ocupación multiespecie para tener en cuenta las especies presentes pero no observadas (modelo de ocupación).

En este post podemos ver un ejemplo del número 1 utilizando el enfoque clásico de la ecología de comunidades utilizando el paquete vegan. El paquete vegan (https://cran.r-project.org/package=vegan) proporciona herramientas para la ecología descriptiva de comunidades. Tiene funciones básicas de análisis de diversidad, ordenación de comunidades y análisis de disimilitud. El paquete vegan proporciona la mayoría de las herramientas estándar de análisis descriptivo de comunidades. Más adelante en el artículo realizamos otro análisis de diversidad utilizando funciones del paquete iNEXT.

El enfoque moderno para medir la diversidad de especies incluye los “numeros de Hill”. La rarefacción y la extrapolación con números de Hill han ganado popularidad en la última década y se pueden calcular utilizando la función renyi en el paquete R vegan (Oksanen 2016) y la función rarity en el paquete R MeanRarity (Roswell y Dushoff 2020), y las diversidades de Hill de muestras de igual tamaño o igual cobertura se pueden comparar utilizando las funciones iNEXT y estimateD en el paquete R iNEXT (Hsieh et al. 2016). Las estimaciones para valores asintóticos de diversidad de Hill están disponibles en SpadeR (Chao y Jost 2015, Chao et al. 2015).

Load packages

Code


library(patchwork) # The Composer of Plots
library(readxl) # Read Excel Files
library(sf) # Simple Features for R
library(elevatr) # Access Elevation Data from Various APIs
library(mapview) # Interactive Viewing of Spatial Data in R
library(tmap)
library(eks) # make countours
library(grateful) # Facilitate Citation of R Packages
library(camtrapR) # Camera Trap Data Management and Preparation of Occupancy and Spatial Capture-Recapture Analyses
library(vegan) # Community Ecology Package 
library(ggvegan)
# library(BiodiversityR) # cause error!
library(ggordiplots)
library(grid)
library(gridExtra)
library(DT)
library(MeanRarity)
library(SpadeR)
library(iNEXT) # Interpolation and Extrapolation for Species Diversity
library(knitr) # A General-Purpose Package for Dynamic Report Generation in R
library(kableExtra) # Construct Complex Table with 'kable' and Pipe Syntax
library(tidyverse) # Easily Install and Load the 'Tidyverse'
library(ggforce) # Accelerating 'ggplot2'
library(plotly)

Load data

Code

datos <- read_excel("C:/CodigoR/CameraTrapCesar/data/CT_Cesar.xlsx")

# habitat types extracted from Copernicus
habs <- read.csv("C:/CodigoR/CameraTrapCesar/data/habitats.csv")

Agrupación de varios sitios

Para este ejemplo, seleccioné un año para los sitios: Becerril 2021, LaPaz_Manaure 2019, MLJ, CL1, CL2 y PCF. A veces, necesitamos crear códigos únicos por cámara y tabla cameraOperation. Este no fue el caso.

Para este ejemplo, usamos el tipo de hábitat donde se instaló la cámara como una forma de ver el esfuerzo de muestreo (número de cámaras) por tipo de hábitat. El tipo de hábitat se extrajo superponiendo los puntos de la cámara sobre el conjunto de datos global de cobertura terrestre de 100 m de COPERNICUS utilizando el motor de Google Earth conectado a R. Cómo hacer esto se explicará en otra publicación.

Code
# make a new column Station
# datos_PCF <- datos |> dplyr::filter(Proyecto=="CT_LaPaz_Manaure") |> unite ("Station", ProyectoEtapa:Salida:CT, sep = "-")

# fix dates
datos$Start <- as.Date(datos$Start, "%d/%m/%Y")
datos$End <- as.Date(datos$End, "%d/%m/%Y")
datos$eventDate <- as.Date(datos$eventDate, "%d/%m/%Y")
datos$eventDateTime <- ymd_hms(paste(datos$eventDate, " ",
                              datos$eventTime, ":00", sep=""))

# filter Becerril
datos_Becerril <- datos |> dplyr::filter(ProyectoEtapa=="CT_Becerril") |> mutate (Station=IdGeo) |> filter(Year==2021)

# filter LaPaz_Manaure
datos_LaPaz_Manaure<- datos |> dplyr::filter(ProyectoEtapa=="CT_LaPaz_Manaure") |> mutate (Station=IdGeo) |> filter(Year==2019)

# filter MLJ
datos_MLJ <- datos |> dplyr::filter(ProyectoEtapa=="MLJ_TH_TS_2021") |> mutate (Station=IdGeo)

# filter CL
datos_CL1 <- datos |> dplyr::filter(ProyectoEtapa=="CL-TH2022") |> mutate (Station=IdGeo)
# filter CL
datos_CL2 <- datos |> dplyr::filter(ProyectoEtapa=="CL-TS2022") |> mutate (Station=IdGeo)

# filter PCF
datos_PCF <- datos |> dplyr::filter(Proyecto=="PCF") |> mutate (Station=IdGeo)

data_south <- rbind(datos_LaPaz_Manaure, datos_Becerril, datos_MLJ,datos_CL1, datos_CL2,datos_PCF)

# filter 2021 and make uniques
CToperation  <- data_south |> 
              # filter(Year==2021) |> 
              group_by(Station) |> 
              mutate(minStart=min(Start), maxEnd=max(End)) |>  distinct(Longitude, Latitude, minStart, maxEnd, Year) |> 
  ungroup()

Generar la tabla cameraOperation y realizar los históricos de detección para todas las especies.

El paquete CamtrapR tiene la función ‘cameraOperation’ que realiza una tabla de cámaras (estaciones) y fechas (setup, puck-up), esta tabla es clave para generar los históricos de detección utilizando la función ‘detectionHistory’ en el siguiente paso.

Code
# Generamos la matríz de operación de las cámaras

camop <- cameraOperation(CTtable= CToperation, # Tabla de operación
                         stationCol= "Station", # Columna que define la estación
                         setupCol= "minStart", #Columna fecha de colocación
                         retrievalCol= "maxEnd", #Columna fecha de retiro
                         #hasProblems= T, # Hubo fallos de cámaras
                         dateFormat= "%Y-%m-%d") #, # Formato de las fechas
                         #cameraCol="CT")
                         # sessionCol= "Year")

# Generar las historias de detección ---------------------------------------
## remove plroblem species
# ind <- which(datos_PCF$Species=="Marmosa sp.")
# datos_PCF <- datos_PCF[-ind,]

DetHist_list <- lapply(unique(data_south$Species), FUN = function(x) {
  detectionHistory(
    recordTable         = data_south, # Tabla de registros
    camOp                = camop, # Matriz de operación de cámaras
    stationCol           = "Station",
    speciesCol           = "Species",
    recordDateTimeCol    = "eventDateTime",
    recordDateTimeFormat  = "%Y-%m-%d",
    species              = x,     # la función reemplaza x por cada una de las especies
    occasionLength       = 7, # Colapso de las historias a 10 días
    day1                 = "station", # ("survey"),or #inicia en la fecha de cada station
    datesAsOccasionNames = FALSE,
    includeEffort        = TRUE,
    scaleEffort          = FALSE,
    output               = ("binary"), # ("binary") or ("count")
    #unmarkedMultFrameInput=TRUE
    timeZone             = "America/Bogota" 
    )
  }
)

# put names to the species 
names(DetHist_list) <- unique(data_south$Species)

# Finally we make a new list to put all the detection histories.
ylist <- lapply(DetHist_list, FUN = function(x) x$detection_history)


  

Use the detection histories to make the a matrix for vegan and the incidence for iNEXT.

Species accumulation curves made using the package vegan, plot the increase in species richness as we add survey units. If the curve plateaus (flattens), then that suggests you have sampled the majority of the species in your survey site (camera or habitat type).

Code
# loop to make vegan matrix
mat_vegan <- matrix(NA, dim(ylist[[1]])[1], length(unique(data_south$Species)))
for(i in 1:length(unique(data_south$Species))){
  mat_vegan[,i] <- apply(ylist[[i]], 1, sum, na.rm=TRUE)
  mat_vegan[,i] <- tidyr::replace_na(mat_vegan[,i], 0) # replace na with 0
}

colnames(mat_vegan)  <- unique(data_south$Species)
rownames(mat_vegan) <- rownames(ylist[[1]])

mat_vegan2 <- as.data.frame(mat_vegan)
mat_vegan2$hab <- habs$hab_code
# mat_vegan3 <-  mat_vegan2 |> 
  
# Select specific rows by row numbers
closed_forest_rows <- which(mat_vegan2$hab=="closed_forest_evergreen_broad")
herbaceous_rows <- which(mat_vegan2$hab=="herbaceous_wetland")
herbs_rows <- which(mat_vegan2$hab=="herbs")
open_forest_rows <- which(mat_vegan2$hab=="open_forest_evergreen_broad")
open_forest2_rows <- which(mat_vegan2$hab=="open_forest_other")


closed_forest <- apply(mat_vegan2[closed_forest_rows,1:22], MARGIN = 2, sum)
herbaceous_wetland <- apply(mat_vegan2[herbaceous_rows,1:22], MARGIN = 2, sum)
herbs  <- apply(mat_vegan2[herbs_rows,1:22], MARGIN = 2, sum)
open_forest_evergreen <- apply(mat_vegan2[open_forest_rows,1:22], MARGIN = 2, sum)
open_forest_other <- apply(mat_vegan2[open_forest2_rows,1:22], MARGIN = 2, sum)

# tb_sp <- mat_vegan2 |> group_by(hab)
# hab_list <- group_split(tb_sp)

# make list of dataframe per habitat
sp_by_hab <- mat_vegan2 |> dplyr::group_by(hab) %>% split (.$hab)
# arrange abundance (detection frecuency) mat for INEXT 
cesar_sp <- t(rbind(
t(colSums(sp_by_hab[[1]][,1:33])),
t(colSums(sp_by_hab[[2]][,1:33])),
t(colSums(sp_by_hab[[3]][,1:33])),
t(colSums(sp_by_hab[[4]][,1:33])),
t(colSums(sp_by_hab[[5]][,1:33]))
))
 
colnames(cesar_sp) <- names(sp_by_hab)



# function to Format data to incidence and use iNext
f_incidences <- function(habitat_rows=closed_forest_rows){ylist %>%  # historias de detection
  map(~rowSums(.,na.rm = T)) %>% # sumo las detecciones en cada sitio
  reduce(cbind) %>% # unimos las listas
  as_data_frame() %>% #formato dataframe
  filter(row_number() %in% habitat_rows) |> 
  t() %>% # trasponer la tabla
  as_tibble() %>% #formato tibble
  mutate_if(is.numeric,~(.>=1)*1) %>%  #como es incidencia, formateo a 1 y 0
  rowSums() %>%  # ahora si la suma de las incidencias en cada sitio
  sort(decreasing=T) |> 
  as_tibble() %>% 
  add_row(value= length(habitat_rows), .before = 1) %>%  # requiere que el primer valor sea el número de sitios
  filter(!if_any()==0) |>  # filter ceros
  as.matrix() # Requiere formato de matriz
}

# Make incidence frequency table (is a list whit 5 habitats)
# Make an empty list to store our data
incidence_cesar <- list() 
incidence_cesar[[1]] <- f_incidences(closed_forest_rows)
incidence_cesar[[2]] <- f_incidences(herbaceous_rows)
incidence_cesar[[3]] <- f_incidences(herbs_rows)
incidence_cesar[[4]] <- f_incidences(open_forest_rows)
incidence_cesar[[5]] <- f_incidences(open_forest_other)

# put names
names(incidence_cesar) <- names(sp_by_hab)

# we deleted this habitat type for making error
incidence_cesar <- within(incidence_cesar, rm("herbaceous_wetland")) 

Para comenzar, graficaremos las especies versus los sitios.

Code
# Transpose if needed to have sample site names on rows
abund_table<-mat_vegan
# Convert to relative frequencies
abund_table <- abund_table/rowSums(abund_table)
library(reshape2)
df<-melt(abund_table)
colnames(df)<-c("Sampled_site","Species","Value")
library(plyr)
library(scales)
 
# We are going to apply transformation to our data to make it
# easier on eyes 
 
#df<-ddply(df,.(Samples),transform,rescale=scale(Value))
df<-ddply(df,.(Sampled_site),transform,rescale=sqrt(Value))
 
# Plot heatmap
p <- ggplot(df, aes(Species, Sampled_site)) + 
  geom_tile(aes(fill = rescale),colour = "white") + 
  scale_fill_gradient(low = "white",high = "#1E5A8C")+
  scale_x_discrete(expand = c(0, 0)) +
  scale_y_discrete(expand = c(0, 0)) + theme(legend.position = "none",axis.ticks = element_blank(),axis.text.x = element_text(angle = 90, hjust = 1,size=6),axis.text.y = element_text(size=4))

# ggplotly(p) # see interactive
# View the plot
p

Observe cómo algunas cámaras no registraron ninguna especie. Aquí se muestra como la línea horizontal gay. Tal vez debamos eliminar esas cámaras.

Rarefaction usando vegan

Tenga en cuenta que los sitios son cámaras y la acumulación es de especies por cámara, no de tiempo.

La rarefacción es una técnica para evaluar la riqueza de especies esperada. La rarefacción permite calcular la riqueza de especies para un número determinado de muestras individuales, basándose en la construcción de curvas de rarefacción.

El problema que se produce al muestrear varias especies en una comunidad es que cuanto mayor sea el número de individuos muestreados, más especies se encontrarán. Las curvas de rarefacción se crean muestreando aleatoriamente el conjunto de N muestras varias veces y luego trazando el número promedio de especies encontradas en cada muestra (1,2, … N). “Por lo tanto, la rarefacción genera el número esperado de especies en una pequeña colección de n individuos (o n muestras) extraídos al azar del gran conjunto de N muestras”. Las curvas de rarefacción generalmente crecen rápidamente al principio, a medida que se encuentran las especies más comunes, pero las curvas se estabilizan a medida que solo quedan por muestrear las especies más raras.

Code

rarecurve(mat_vegan, col = "blue") 

Code
rarecurve(t(cesar_sp), col = "blue") 

Code

sp1 <- specaccum(mat_vegan)
sp2 <- specaccum(mat_vegan, "random")
# sp2
# summary(sp2)
plot(sp1, ci.type="poly", col="blue", lwd=2, ci.lty=0, ci.col="lightblue")

Code
# boxplot(sp2, col="yellow", add=TRUE, pch="+")


mods <- fitspecaccum(sp1, "gleason")
plot(mods, col="hotpink")
boxplot(sp2, col = "yellow", border = "blue", lty=1, cex=0.3, add= TRUE)

Code


## Accumulation model
pool <- poolaccum(mat_vegan)
# summary(pool, display = "chao")
plot(pool)

Distribución de abundancia clasificada

Un enfoque alternativo para la distribución de la abundancia de especies es representar gráficamente las abundancias logarítmicas en orden decreciente o en función de los rangos de especies.

Code
k <- sample(nrow(mat_vegan), 1)
rad <- radfit(mat_vegan[22,]) # species 22
# plot(rad)
radlattice(rad)

Hill Diversities using vegan

Code
# data(BCI)
i <- sample(nrow(mat_vegan), 20)
mod <- renyi(mat_vegan) #selecting sites with more than one record
plot(mod)

Code
mod <- renyiaccum(mat_vegan[55:89,])
plot(mod, as.table=TRUE, col = c(1, 2, 2))

Code
persp(mod)

Total number of species

Code
DT::datatable(round(specpool(mat_vegan),3))

Number of unseen species per camera

Look at S.chao1

Code
DT::datatable(
t(round(as.data.frame(estimateR(mat_vegan[,])),3))
)
Code

# save as dataframe
S_per_site <- as.data.frame(t(round(as.data.frame(estimateR(mat_vegan[,])),3)))
# add sites
S_per_site$Station <- rownames(S_per_site)

It is weird to have .5 species in some sites.

Mapa que convierte la operación de la cámara trampa a sf

En este paso, convertimos la tabla de operación de la cámara trampa a sf, agregamos la elevación de AWS, el tipo de hábitat y las especies por sitio (S.chao1) para finalmente visualizar el mapa que muestra la cantidad de especies como el tamaño del punto.

Code

# datos_distinct <- datos |> distinct(Longitude, Latitude, CT, Proyecto)

projlatlon <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"

CToperation_sf <-  st_as_sf(x = CToperation,
                         coords = c("Longitude", 
                                    "Latitude"),
                         crs = projlatlon)

# write.csv(habs, "C:/CodigoR/CameraTrapCesar/data/habitats.csv")
habs <- read.csv("C:/CodigoR/CameraTrapCesar/data/habitats.csv")

CToperation_elev_sf <- get_elev_point(CToperation_sf, src = "aws") # get elevation from AWS

CToperation_elev_sf <- CToperation_elev_sf |> left_join(habs, by='Station') |> left_join(S_per_site, by='Station') |> select("Station", "elevation", "minStart.x","maxEnd.x", "Year.x", "hab_code" , "S.obs", "S.chao1")

# add habitat 
# CToperation_elev_sf$habs <- habs$hab_code
# see the map
mapview(CToperation_elev_sf, zcol="hab_code", cex = "S.chao1", alpha = 0)

Tal vez sea más fácil representar gráficamente el número de especies como un mapa de contornos

Una ventaja de utilizar la estimación de densidad de eks es que resulta más claro lo que significa el resultado. El contorno del 20 % significa que “el 20 % de las mediciones se encuentran dentro de este contorno”. La documentación de eks no está de acuerdo con la forma en que stat_density_2d realiza su cálculo. No sé quién tiene razón porque el valor estimado es la especie.

Code
# select chao
species <- dplyr::select(CToperation_elev_sf, "S.chao1")
# hakeoides_coord <- data.frame(sf::st_coordinates(hakeoides))
Sta_den <- eks::st_kde(species) # calculate density

# VERY conveniently, eks can generate an sf file of contour lines
contours <- eks::st_get_contour(Sta_den, cont=c( 10,20,30,40,50,60,70,80, 90)) %>% 
  mutate(value=as.numeric(levels(contlabel)))


# pal_fun <- leaflet::colorQuantile("YlOrRd", NULL, n = 5)

p_popup <- paste("Species", as.numeric(levels(contours$estimate)), "number")


tmap::tmap_mode("view") # set mode to interactive plots

tmap::tm_shape(species) + 
    tmap::tm_sf(col="black", size=0.2) +
  #   contours from eks
  tmap::tm_shape(contours) +
    tmap::tm_polygons("estimate",
                      palette="Reds",
                      alpha=0.5 )
Code


## geom_sf plot
# ## suitable smoothing matrix gives optimally smoothed contours
# gs1 <- ggplot(Sta_den) + geom_sf(data=CToperation_elev_sf, fill=NA) + ggthemes::theme_map() +
#     colorspace::scale_fill_discrete_sequential(palette="Heat2") 
# gs1 + geom_sf(data=st_get_contour(Sta_den), aes(fill=label_percent(contlabel))) +
#     coord_sf(xlim=xlim, ylim=ylim) 

En términos generales, la estimación de especies por sitio parece ser mayor cerca de la mina y disminuye con la distancia a la mina. Observe también que las estimaciones de densidad de núcleo son mayores que las de s.chao1.

Escalamiento multidimensional no métrico (NMDS)

En la investigación ecológica, a menudo nos interesa no solo comparar descriptores univariados de comunidades, como la diversidad, sino también cómo las especies constituyentes (o la composición de especies) cambian de una comunidad a la siguiente. Una herramienta común para hacer esto es el escalamiento multidimensional no métrico, o NMDS. El objetivo del NMDS es agrupar la información de múltiples dimensiones (por ejemplo, de múltiples comunidades, sitios donde se instaló la cámara trampa, etc.) en solo unas pocas, de modo que se puedan visualizar e interpretar. A diferencia de otras técnicas de ordenación que se basan en distancias (principalmente euclidianas), como el análisis de coordenadas principales, el NMDS utiliza órdenes de rango y, por lo tanto, es una técnica extremadamente flexible que puede adaptarse a una variedad de diferentes tipos de datos.

Si el tratamiento es continuo, como un gradiente ambiental, entonces puede ser útil trazar líneas de contorno en lugar de envolturas convexas. Podemos obtener algunos datos de elevación para nuestra matriz comunitaria original y superponerlos en el gráfico NMDS usando “ordisurf”.

Code

example_NMDS=metaMDS(as.data.frame(mat_vegan), 
                     distance="euclidean",
                     zerodist = "ignore",
                     trymax=300,
                     k=5) # T
#> Wisconsin double standardization
#> Run 0 stress 0.1177774 
#> Run 1 stress 0.1211582 
#> Run 2 stress 0.1212973 
#> Run 3 stress 0.1191625 
#> Run 4 stress 0.117699 
#> ... New best solution
#> ... Procrustes: rmse 0.05334456  max resid 0.2986997 
#> Run 5 stress 0.1218946 
#> Run 6 stress 0.119396 
#> Run 7 stress 0.1184204 
#> Run 8 stress 0.1194898 
#> Run 9 stress 0.1190681 
#> Run 10 stress 0.1178003 
#> ... Procrustes: rmse 0.07086938  max resid 0.2576866 
#> Run 11 stress 0.1199537 
#> Run 12 stress 0.1203993 
#> Run 13 stress 0.118161 
#> ... Procrustes: rmse 0.0459295  max resid 0.1785734 
#> Run 14 stress 0.1178142 
#> ... Procrustes: rmse 0.06706333  max resid 0.3403826 
#> Run 15 stress 0.1211165 
#> Run 16 stress 0.1207702 
#> Run 17 stress 0.1190289 
#> Run 18 stress 0.1197535 
#> Run 19 stress 0.1187253 
#> Run 20 stress 0.1198963 
#> Run 21 stress 0.1180226 
#> ... Procrustes: rmse 0.05507927  max resid 0.2000862 
#> Run 22 stress 0.1179596 
#> ... Procrustes: rmse 0.0751764  max resid 0.3065298 
#> Run 23 stress 0.1192157 
#> Run 24 stress 0.1197584 
#> Run 25 stress 0.1187964 
#> Run 26 stress 0.1191531 
#> Run 27 stress 0.1195885 
#> Run 28 stress 0.1199824 
#> Run 29 stress 0.1180602 
#> ... Procrustes: rmse 0.06506573  max resid 0.208996 
#> Run 30 stress 0.1176216 
#> ... New best solution
#> ... Procrustes: rmse 0.05648714  max resid 0.190632 
#> Run 31 stress 0.1181766 
#> Run 32 stress 0.1204855 
#> Run 33 stress 0.1188313 
#> Run 34 stress 0.1195703 
#> Run 35 stress 0.1210658 
#> Run 36 stress 0.1196305 
#> Run 37 stress 0.1177478 
#> ... Procrustes: rmse 0.06485224  max resid 0.3011637 
#> Run 38 stress 0.1205858 
#> Run 39 stress 0.1168856 
#> ... New best solution
#> ... Procrustes: rmse 0.04955251  max resid 0.2818473 
#> Run 40 stress 0.1186349 
#> Run 41 stress 0.1183233 
#> Run 42 stress 0.1188144 
#> Run 43 stress 0.1194731 
#> Run 44 stress 0.1200207 
#> Run 45 stress 0.1186039 
#> Run 46 stress 0.1180974 
#> Run 47 stress 0.1206428 
#> Run 48 stress 0.1182294 
#> Run 49 stress 0.1184835 
#> Run 50 stress 0.1202381 
#> Run 51 stress 0.1191361 
#> Run 52 stress 0.1186928 
#> Run 53 stress 0.1196786 
#> Run 54 stress 0.1188905 
#> Run 55 stress 0.1201879 
#> Run 56 stress 0.1195397 
#> Run 57 stress 0.1194922 
#> Run 58 stress 0.1180469 
#> Run 59 stress 0.1193363 
#> Run 60 stress 0.1190413 
#> Run 61 stress 0.1187071 
#> Run 62 stress 0.1200085 
#> Run 63 stress 0.1185079 
#> Run 64 stress 0.1190033 
#> Run 65 stress 0.1195173 
#> Run 66 stress 0.118546 
#> Run 67 stress 0.1194079 
#> Run 68 stress 0.1183561 
#> Run 69 stress 0.1185949 
#> Run 70 stress 0.1210041 
#> Run 71 stress 0.1204828 
#> Run 72 stress 0.1180284 
#> Run 73 stress 0.1190941 
#> Run 74 stress 0.1196239 
#> Run 75 stress 0.1211473 
#> Run 76 stress 0.1204393 
#> Run 77 stress 0.1187643 
#> Run 78 stress 0.1197731 
#> Run 79 stress 0.1188496 
#> Run 80 stress 0.1209728 
#> Run 81 stress 0.1190095 
#> Run 82 stress 0.1200579 
#> Run 83 stress 0.1175591 
#> Run 84 stress 0.116869 
#> ... New best solution
#> ... Procrustes: rmse 0.0376579  max resid 0.1585361 
#> Run 85 stress 0.117761 
#> Run 86 stress 0.1182156 
#> Run 87 stress 0.1204913 
#> Run 88 stress 0.1196952 
#> Run 89 stress 0.1184089 
#> Run 90 stress 0.1188361 
#> Run 91 stress 0.1201588 
#> Run 92 stress 0.1183023 
#> Run 93 stress 0.119133 
#> Run 94 stress 0.1183862 
#> Run 95 stress 0.1180582 
#> Run 96 stress 0.1208255 
#> Run 97 stress 0.1196153 
#> Run 98 stress 0.1198022 
#> Run 99 stress 0.1201732 
#> Run 100 stress 0.1186273 
#> Run 101 stress 0.1191146 
#> Run 102 stress 0.1198233 
#> Run 103 stress 0.1200847 
#> Run 104 stress 0.1194222 
#> Run 105 stress 0.1199835 
#> Run 106 stress 0.1195893 
#> Run 107 stress 0.1193433 
#> Run 108 stress 0.1191023 
#> Run 109 stress 0.1172886 
#> ... Procrustes: rmse 0.0671454  max resid 0.2649203 
#> Run 110 stress 0.1206771 
#> Run 111 stress 0.1210343 
#> Run 112 stress 0.1202096 
#> Run 113 stress 0.1189394 
#> Run 114 stress 0.1179109 
#> Run 115 stress 0.1188948 
#> Run 116 stress 0.1207775 
#> Run 117 stress 0.119568 
#> Run 118 stress 0.1196652 
#> Run 119 stress 0.1189281 
#> Run 120 stress 0.1200464 
#> Run 121 stress 0.1181344 
#> Run 122 stress 0.1218319 
#> Run 123 stress 0.1196155 
#> Run 124 stress 0.1186135 
#> Run 125 stress 0.1196418 
#> Run 126 stress 0.1203043 
#> Run 127 stress 0.11773 
#> Run 128 stress 0.1202728 
#> Run 129 stress 0.1188226 
#> Run 130 stress 0.1204618 
#> Run 131 stress 0.1198807 
#> Run 132 stress 0.1186841 
#> Run 133 stress 0.1178397 
#> Run 134 stress 0.1191831 
#> Run 135 stress 0.1192987 
#> Run 136 stress 0.118177 
#> Run 137 stress 0.1191548 
#> Run 138 stress 0.1213243 
#> Run 139 stress 0.1180362 
#> Run 140 stress 0.1196696 
#> Run 141 stress 0.1188839 
#> Run 142 stress 0.1216302 
#> Run 143 stress 0.1192539 
#> Run 144 stress 0.1198361 
#> Run 145 stress 0.1179701 
#> Run 146 stress 0.1192952 
#> Run 147 stress 0.1185629 
#> Run 148 stress 0.1177968 
#> Run 149 stress 0.117655 
#> Run 150 stress 0.1192496 
#> Run 151 stress 0.119373 
#> Run 152 stress 0.1191413 
#> Run 153 stress 0.1168278 
#> ... New best solution
#> ... Procrustes: rmse 0.03019843  max resid 0.1677703 
#> Run 154 stress 0.1203182 
#> Run 155 stress 0.1181074 
#> Run 156 stress 0.1179864 
#> Run 157 stress 0.1198395 
#> Run 158 stress 0.1189867 
#> Run 159 stress 0.1181673 
#> Run 160 stress 0.1199229 
#> Run 161 stress 0.1192644 
#> Run 162 stress 0.1179292 
#> Run 163 stress 0.1198977 
#> Run 164 stress 0.1200704 
#> Run 165 stress 0.1202001 
#> Run 166 stress 0.1209971 
#> Run 167 stress 0.1189265 
#> Run 168 stress 0.1185002 
#> Run 169 stress 0.120098 
#> Run 170 stress 0.119822 
#> Run 171 stress 0.1190084 
#> Run 172 stress 0.1197402 
#> Run 173 stress 0.1192796 
#> Run 174 stress 0.1193162 
#> Run 175 stress 0.1188664 
#> Run 176 stress 0.1209573 
#> Run 177 stress 0.1179904 
#> Run 178 stress 0.1191293 
#> Run 179 stress 0.1202595 
#> Run 180 stress 0.1197796 
#> Run 181 stress 0.1177875 
#> Run 182 stress 0.1180694 
#> Run 183 stress 0.1176092 
#> Run 184 stress 0.1198626 
#> Run 185 stress 0.119073 
#> Run 186 stress 0.1195468 
#> Run 187 stress 0.1207633 
#> Run 188 stress 0.1190306 
#> Run 189 stress 0.1210146 
#> Run 190 stress 0.1190707 
#> Run 191 stress 0.1195641 
#> Run 192 stress 0.1185847 
#> Run 193 stress 0.1189139 
#> Run 194 stress 0.1178703 
#> Run 195 stress 0.1182162 
#> Run 196 stress 0.1218095 
#> Run 197 stress 0.1175066 
#> Run 198 stress 0.119619 
#> Run 199 stress 0.1191894 
#> Run 200 stress 0.1192808 
#> Run 201 stress 0.1199891 
#> Run 202 stress 0.120028 
#> Run 203 stress 0.1175908 
#> Run 204 stress 0.118203 
#> Run 205 stress 0.1194049 
#> Run 206 stress 0.1197837 
#> Run 207 stress 0.1202254 
#> Run 208 stress 0.1201398 
#> Run 209 stress 0.1181564 
#> Run 210 stress 0.1198362 
#> Run 211 stress 0.1190425 
#> Run 212 stress 0.1190272 
#> Run 213 stress 0.1190913 
#> Run 214 stress 0.1192191 
#> Run 215 stress 0.1183133 
#> Run 216 stress 0.1199784 
#> Run 217 stress 0.1188057 
#> Run 218 stress 0.120127 
#> Run 219 stress 0.1180508 
#> Run 220 stress 0.1197585 
#> Run 221 stress 0.1200253 
#> Run 222 stress 0.1190509 
#> Run 223 stress 0.1184969 
#> Run 224 stress 0.1193851 
#> Run 225 stress 0.1196846 
#> Run 226 stress 0.1192098 
#> Run 227 stress 0.1201206 
#> Run 228 stress 0.1185686 
#> Run 229 stress 0.1199617 
#> Run 230 stress 0.1189983 
#> Run 231 stress 0.1190767 
#> Run 232 stress 0.1199342 
#> Run 233 stress 0.1187167 
#> Run 234 stress 0.1206304 
#> Run 235 stress 0.1187739 
#> Run 236 stress 0.1187816 
#> Run 237 stress 0.1196961 
#> Run 238 stress 0.1200113 
#> Run 239 stress 0.117875 
#> Run 240 stress 0.1180518 
#> Run 241 stress 0.1181188 
#> Run 242 stress 0.1182886 
#> Run 243 stress 0.1195173 
#> Run 244 stress 0.1179139 
#> Run 245 stress 0.1179677 
#> Run 246 stress 0.1175461 
#> Run 247 stress 0.1184389 
#> Run 248 stress 0.1180015 
#> Run 249 stress 0.1207187 
#> Run 250 stress 0.1190768 
#> Run 251 stress 0.1195012 
#> Run 252 stress 0.1200513 
#> Run 253 stress 0.1186996 
#> Run 254 stress 0.1176741 
#> Run 255 stress 0.1184409 
#> Run 256 stress 0.1200844 
#> Run 257 stress 0.1194721 
#> Run 258 stress 0.1210275 
#> Run 259 stress 0.1192189 
#> Run 260 stress 0.1182547 
#> Run 261 stress 0.1198083 
#> Run 262 stress 0.1171739 
#> ... Procrustes: rmse 0.03440154  max resid 0.1411531 
#> Run 263 stress 0.1198517 
#> Run 264 stress 0.1180458 
#> Run 265 stress 0.118906 
#> Run 266 stress 0.1186349 
#> Run 267 stress 0.1207902 
#> Run 268 stress 0.1214568 
#> Run 269 stress 0.1195704 
#> Run 270 stress 0.1181102 
#> Run 271 stress 0.1192847 
#> Run 272 stress 0.1198753 
#> Run 273 stress 0.1187425 
#> Run 274 stress 0.1193056 
#> Run 275 stress 0.1204123 
#> Run 276 stress 0.1199086 
#> Run 277 stress 0.1200055 
#> Run 278 stress 0.1190225 
#> Run 279 stress 0.1203536 
#> Run 280 stress 0.1195998 
#> Run 281 stress 0.1168231 
#> ... New best solution
#> ... Procrustes: rmse 0.01973719  max resid 0.07936257 
#> Run 282 stress 0.1178182 
#> Run 283 stress 0.1199405 
#> Run 284 stress 0.1191517 
#> Run 285 stress 0.1194614 
#> Run 286 stress 0.1184141 
#> Run 287 stress 0.117876 
#> Run 288 stress 0.1195383 
#> Run 289 stress 0.1199813 
#> Run 290 stress 0.1196048 
#> Run 291 stress 0.1199466 
#> Run 292 stress 0.1186127 
#> Run 293 stress 0.1187504 
#> Run 294 stress 0.1193074 
#> Run 295 stress 0.120654 
#> Run 296 stress 0.1195552 
#> Run 297 stress 0.1202316 
#> Run 298 stress 0.1187314 
#> Run 299 stress 0.1181165 
#> Run 300 stress 0.1187011 
#> *** Best solution was not repeated -- monoMDS stopping criteria:
#>    300: no. of iterations >= maxit

# plot the graph
vegan::ordisurf((example_NMDS),CToperation_elev_sf$elevation,main="",col="forestgreen", trymax=100) # bubble = 2
#> 
#> Family: gaussian 
#> Link function: identity 
#> 
#> Formula:
#> y ~ s(x1, x2, k = 10, bs = "tp", fx = FALSE)
#> 
#> Estimated degrees of freedom:
#> 6.06  total = 7.06 
#> 
#> REML score: 714.7977
vegan::orditorp(example_NMDS,display="species",col="blue",air=0.1,
   cex=0.5)

Podemos hacer una gráfica similar usando gg_ordisurf del paquete ggordiplots pero incorporando también el tipo de hábitat.

Code
# ggordiplots::gg_ordisurf()
# To fit a surface with ggordiplots:

 
ordiplot <- gg_ordisurf(ord = example_NMDS, 
                        env.var = CToperation_elev_sf$elevation,
                        var.label = "Elevation",
                        pt.size = 2,
                        groups = CToperation_elev_sf$hab_code,
                        binwidth = 50)

Code

# ggplotly(ordiplot$plot) # see interactive

# # alternative using biodiversityR
# 
# A1.surface <- ordisurf( y=example_NMDS)
# A1.grid <- ordisurfgrid.long(A1.surface)
# # Preparing the plot
# 
# plotgg4 <- ggplot() + 
#     geom_contour_filled(data=A1.grid, 
#                         aes(x=x, y=y, z=z)) +
#     geom_vline(xintercept = c(0), color = "grey70", linetype = 2) +
#     geom_hline(yintercept = c(0), color = "grey70", linetype = 2) +  
#     xlab(axis.long2[1, "label"]) +
#     ylab(axis.long2[2, "label"]) +  
#     scale_x_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
#     scale_y_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
#     geom_point(data=sites.long2, 
#                aes(x=axis1, y=axis2, shape=Management), 
#                colour="red", size=4) +
#     BioR.theme +
#     scale_fill_viridis_d() +
#     labs(fill="A1") +
#     coord_fixed(ratio=1)
# # and seeing the plot.
# 
# plotgg4

Los contornos conectan especies en el espacio de ordenación que se predice que tendrán la misma elevación.

Rarefaction using iNEXT

Code



out <- iNEXT(incidence_cesar, # The data frame
             q=0,# The type of diversity estimator 
             datatype="incidence_freq",   # The type of analysis
             knots=40,                    # The number of data points 
             se=TRUE,                     # confidence intervals
             conf=0.95,                   # The level of confidence intervals
             nboot=100)                    # The number of bootstraps 

ggiNEXT(out, type=1)

Code
ggiNEXT(out, type=2)

Code
ggiNEXT(out, type=3)

Code

p1 <- ggiNEXT(out, type=1)+ theme_classic() +   #  type 1 = the diversity estimator
        labs(x = "Survey sites", y = "Richness")
  
p2 <- ggiNEXT(out, type=2)+ theme_classic() +    #  type 2 = the survey coverage
        labs(x = "Survey sites")
    
grid.arrange(p1, p2, nrow = 2)

Code
##############
out2 <- iNEXT(incidence_cesar, q=c(0,1,2) ,datatype="incidence_freq" )

ggiNEXT(out2, type=1, facet.var="Order.q", color.var="Assemblage") + theme_classic() 

El paquete iNEXT es adecuado para comparaciones de índices de diversidad mediante el uso de números de Hill, de los cuales el valor q = 1 representa los índices de diversidad tradicionales: La riqueza de especies es q = 0. El índice de Shannon es (q=1) y el de Simpson es (q=2). Nota: el aumento de los valores de q reduce la influencia de las especies raras en nuestra estimación de la diversidad de la comunidad.

Package Citation

Code
pkgs <- cite_packages(output = "paragraph", out.dir = ".") #knitr::kable(pkgs)
pkgs

We used R version 4.4.2 (R Core Team 2024) and the following R packages: camtrapR v. 2.3.0 (Niedballa et al. 2016), devtools v. 2.4.5 (Wickham et al. 2022), DT v. 0.33 (Xie, Cheng, and Tan 2024), eks v. 1.0.5 (Duong 2024), elevatr v. 0.99.0 (Hollister et al. 2023), ggforce v. 0.4.2 (Pedersen 2024a), ggordiplots v. 0.4.3 (Quensen, Simpson, and Oksanen 2024), ggvegan v. 0.1.999 (Simpson and Oksanen 2023), gridExtra v. 2.3 (Auguie 2017), iNEXT v. 3.0.1 (Chao et al. 2014; Hsieh, Ma, and Chao 2024), kableExtra v. 1.4.0 (Zhu 2024), knitr v. 1.49 (Xie 2014, 2015, 2024), mapview v. 2.11.2 (Appelhans et al. 2023), MeanRarity v. 0.0.1.5 (Roswell and Dushoff 2023), patchwork v. 1.3.0 (Pedersen 2024b), plotly v. 4.10.4 (Sievert 2020), plyr v. 1.8.9 (Wickham 2011), reshape2 v. 1.4.4 (Wickham 2007), rmarkdown v. 2.29 (Xie, Allaire, and Grolemund 2018; Xie, Dervieux, and Riederer 2020; Allaire et al. 2024), scales v. 1.3.0 (Wickham, Pedersen, and Seidel 2023), sf v. 1.0.19 (Pebesma 2018; Pebesma and Bivand 2023), SpadeR v. 0.1.1 (Chao et al. 2016), tidyverse v. 2.0.0 (Wickham et al. 2019), tmap v. 3.3.4 (Tennekes 2018), vegan v. 2.6.8 (Oksanen et al. 2024).

Sesion info

Session info
#> ─ Session info ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.4.2 (2024-10-31 ucrt)
#>  os       Windows 10 x64 (build 19045)
#>  system   x86_64, mingw32
#>  ui       RTerm
#>  language (EN)
#>  collate  Spanish_Colombia.utf8
#>  ctype    Spanish_Colombia.utf8
#>  tz       America/Bogota
#>  date     2024-12-15
#>  pandoc   3.2 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)
#> 
#> ─ Packages ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#>  ! package           * version    date (UTC) lib source
#>    abind               1.4-8      2024-09-12 [1] CRAN (R 4.4.1)
#>    base64enc           0.1-3      2015-07-28 [1] CRAN (R 4.4.0)
#>    brew                1.0-10     2023-12-16 [1] CRAN (R 4.4.2)
#>    bslib               0.8.0      2024-07-29 [1] CRAN (R 4.4.2)
#>    cachem              1.1.0      2024-05-16 [1] CRAN (R 4.4.2)
#>    camtrapR          * 2.3.0      2024-02-26 [1] CRAN (R 4.4.2)
#>    cellranger          1.1.0      2016-07-27 [1] CRAN (R 4.4.2)
#>    class               7.3-22     2023-05-03 [2] CRAN (R 4.4.2)
#>    classInt            0.4-10     2023-09-05 [1] CRAN (R 4.4.2)
#>    cli                 3.6.3      2024-06-21 [1] CRAN (R 4.4.2)
#>    cluster             2.1.6      2023-12-01 [2] CRAN (R 4.4.2)
#>    codetools           0.2-20     2024-03-31 [2] CRAN (R 4.4.2)
#>    colorspace          2.1-1      2024-07-26 [1] CRAN (R 4.4.2)
#>    crayon              1.5.3      2024-06-20 [1] CRAN (R 4.4.2)
#>    crosstalk           1.2.1      2023-11-23 [1] CRAN (R 4.4.2)
#>    curl                6.0.0      2024-11-05 [1] CRAN (R 4.4.2)
#>    data.table          1.16.4     2024-12-06 [1] CRAN (R 4.4.2)
#>    DBI                 1.2.3      2024-06-02 [1] CRAN (R 4.4.2)
#>    devtools            2.4.5      2022-10-11 [1] CRAN (R 4.4.2)
#>    dichromat           2.0-0.1    2022-05-02 [1] CRAN (R 4.4.0)
#>    digest              0.6.37     2024-08-19 [1] CRAN (R 4.4.2)
#>    dplyr             * 1.1.4      2023-11-17 [1] CRAN (R 4.4.2)
#>    DT                * 0.33       2024-04-04 [1] CRAN (R 4.4.2)
#>    e1071               1.7-16     2024-09-16 [1] CRAN (R 4.4.2)
#>    eks               * 1.0.5      2024-05-01 [1] CRAN (R 4.4.2)
#>    elevatr           * 0.99.0     2023-09-12 [1] CRAN (R 4.4.2)
#>    ellipsis            0.3.2      2021-04-29 [1] CRAN (R 4.4.2)
#>    evaluate            1.0.1      2024-10-10 [1] CRAN (R 4.4.2)
#>    fansi               1.0.6      2023-12-08 [1] CRAN (R 4.4.2)
#>    farver              2.1.2      2024-05-13 [1] CRAN (R 4.4.2)
#>    fastmap             1.2.0      2024-05-15 [1] CRAN (R 4.4.2)
#>    forcats           * 1.0.0      2023-01-29 [1] CRAN (R 4.4.2)
#>    fs                  1.6.5      2024-10-30 [1] CRAN (R 4.4.2)
#>    generics            0.1.3      2022-07-05 [1] CRAN (R 4.4.2)
#>    ggforce           * 0.4.2      2024-02-19 [1] CRAN (R 4.4.2)
#>    ggordiplots       * 0.4.3      2024-01-14 [1] CRAN (R 4.4.2)
#>    ggplot2           * 3.5.1      2024-04-23 [1] CRAN (R 4.4.2)
#>    ggrepel             0.9.6      2024-09-07 [1] CRAN (R 4.4.2)
#>    ggvegan           * 0.1.999    2024-12-15 [1] Github (gavinsimpson/ggvegan@058c08c)
#>    glue              * 1.8.0      2024-09-30 [1] CRAN (R 4.4.2)
#>    grateful          * 0.2.10     2024-09-04 [1] CRAN (R 4.4.2)
#>    gridExtra         * 2.3        2017-09-09 [1] CRAN (R 4.4.2)
#>    gtable              0.3.6      2024-10-25 [1] CRAN (R 4.4.2)
#>    hms                 1.1.3      2023-03-21 [1] CRAN (R 4.4.2)
#>    htmltools           0.5.8.1    2024-04-04 [1] CRAN (R 4.4.2)
#>    htmlwidgets         1.6.4      2023-12-06 [1] CRAN (R 4.4.2)
#>    httpuv              1.6.15     2024-03-26 [1] CRAN (R 4.4.2)
#>    httr                1.4.7      2023-08-15 [1] CRAN (R 4.4.2)
#>    iNEXT             * 3.0.1      2024-03-24 [1] CRAN (R 4.4.2)
#>    isoband             0.2.7      2022-12-20 [1] CRAN (R 4.4.2)
#>    jquerylib           0.1.4      2021-04-26 [1] CRAN (R 4.4.2)
#>    jsonlite            1.8.9      2024-09-20 [1] CRAN (R 4.4.2)
#>    kableExtra        * 1.4.0      2024-01-24 [1] CRAN (R 4.4.2)
#>    KernSmooth          2.23-24    2024-05-17 [2] CRAN (R 4.4.2)
#>    knitr             * 1.49       2024-11-08 [1] CRAN (R 4.4.2)
#>    ks                  1.14.3     2024-09-20 [1] CRAN (R 4.4.2)
#>    labeling            0.4.3      2023-08-29 [1] CRAN (R 4.4.0)
#>    later               1.3.2      2023-12-06 [1] CRAN (R 4.4.2)
#>    lattice           * 0.22-6     2024-03-20 [2] CRAN (R 4.4.2)
#>    lazyeval            0.2.2      2019-03-15 [1] CRAN (R 4.4.2)
#>    leafem              0.2.3      2023-09-17 [1] CRAN (R 4.4.2)
#>    leaflet             2.2.2      2024-03-26 [1] CRAN (R 4.4.2)
#>    leaflet.providers   2.0.0      2023-10-17 [1] CRAN (R 4.4.2)
#>    leafpop             0.1.0      2021-05-22 [1] CRAN (R 4.4.2)
#>    leafsync            0.1.0      2019-03-05 [1] CRAN (R 4.4.2)
#>    lifecycle           1.0.4      2023-11-07 [1] CRAN (R 4.4.2)
#>    lubridate         * 1.9.4      2024-12-08 [1] CRAN (R 4.4.2)
#>    lwgeom              0.2-14     2024-02-21 [1] CRAN (R 4.4.2)
#>    magrittr            2.0.3      2022-03-30 [1] CRAN (R 4.4.2)
#>    maplegend           0.2.0      2024-11-12 [1] CRAN (R 4.4.2)
#>    mapsf               0.12.0     2024-10-22 [1] CRAN (R 4.4.2)
#>    mapview           * 2.11.2     2023-10-13 [1] CRAN (R 4.4.2)
#>    MASS                7.3-61     2024-06-13 [2] CRAN (R 4.4.2)
#>    Matrix              1.7-1      2024-10-18 [2] CRAN (R 4.4.2)
#>    mclust              6.1.1      2024-04-29 [1] CRAN (R 4.4.2)
#>    MeanRarity        * 0.0.1.0005 2024-12-15 [1] Github (mikeroswell/MeanRarity@a8b518d)
#>    memoise             2.0.1      2021-11-26 [1] CRAN (R 4.4.2)
#>    mgcv                1.9-1      2023-12-21 [2] CRAN (R 4.4.2)
#>    mime                0.12       2021-09-28 [1] CRAN (R 4.4.0)
#>    miniUI              0.1.1.1    2018-05-18 [1] CRAN (R 4.4.2)
#>    munsell             0.5.1      2024-04-01 [1] CRAN (R 4.4.2)
#>    mvtnorm             1.3-2      2024-11-04 [1] CRAN (R 4.4.2)
#>    nlme                3.1-166    2024-08-14 [2] CRAN (R 4.4.2)
#>    patchwork         * 1.3.0      2024-09-16 [1] CRAN (R 4.4.2)
#>    permute           * 0.9-7      2022-01-27 [1] CRAN (R 4.4.2)
#>    pillar              1.9.0      2023-03-22 [1] CRAN (R 4.4.2)
#>    pkgbuild            1.4.5      2024-10-28 [1] CRAN (R 4.4.2)
#>    pkgconfig           2.0.3      2019-09-22 [1] CRAN (R 4.4.2)
#>    pkgload             1.4.0      2024-06-28 [1] CRAN (R 4.4.2)
#>    plotly            * 4.10.4     2024-01-13 [1] CRAN (R 4.4.2)
#>    plyr              * 1.8.9      2023-10-02 [1] CRAN (R 4.4.2)
#>    png                 0.1-8      2022-11-29 [1] CRAN (R 4.4.0)
#>    polyclip            1.10-7     2024-07-23 [1] CRAN (R 4.4.1)
#>    pracma              2.4.4      2023-11-10 [1] CRAN (R 4.4.2)
#>    prettyunits         1.2.0      2023-09-24 [1] CRAN (R 4.4.2)
#>    profvis             0.4.0      2024-09-20 [1] CRAN (R 4.4.2)
#>    progress            1.2.3      2023-12-06 [1] CRAN (R 4.4.2)
#>    progressr           0.15.0     2024-10-29 [1] CRAN (R 4.4.2)
#>    promises            1.3.0      2024-04-05 [1] CRAN (R 4.4.2)
#>    proxy               0.4-27     2022-06-09 [1] CRAN (R 4.4.2)
#>    purrr             * 1.0.2      2023-08-10 [1] CRAN (R 4.4.2)
#>    R6                  2.5.1      2021-08-19 [1] CRAN (R 4.4.2)
#>    raster              3.6-30     2024-10-02 [1] CRAN (R 4.4.2)
#>    rbibutils           2.3        2024-10-04 [1] CRAN (R 4.4.2)
#>    RColorBrewer        1.1-3      2022-04-03 [1] CRAN (R 4.4.0)
#>    Rcpp                1.0.13-1   2024-11-02 [1] CRAN (R 4.4.2)
#>    RcppNumerical       0.6-0      2023-09-06 [1] CRAN (R 4.4.2)
#>  D RcppParallel        5.1.9      2024-08-19 [1] CRAN (R 4.4.2)
#>    Rdpack              2.6.2      2024-11-15 [1] CRAN (R 4.4.2)
#>    readr             * 2.1.5      2024-01-10 [1] CRAN (R 4.4.2)
#>    readxl            * 1.4.3      2023-07-06 [1] CRAN (R 4.4.2)
#>    remotes             2.5.0      2024-03-17 [1] CRAN (R 4.4.2)
#>    renv                1.0.11     2024-10-12 [1] CRAN (R 4.4.2)
#>    reshape2          * 1.4.4      2020-04-09 [1] CRAN (R 4.4.2)
#>    rlang               1.1.4      2024-06-04 [1] CRAN (R 4.4.2)
#>    rmarkdown           2.29       2024-11-04 [1] CRAN (R 4.4.2)
#>    rstudioapi          0.17.1     2024-10-22 [1] CRAN (R 4.4.2)
#>    s2                  1.1.7      2024-07-17 [1] CRAN (R 4.4.2)
#>    sass                0.4.9      2024-03-15 [1] CRAN (R 4.4.2)
#>    satellite           1.0.5      2024-02-10 [1] CRAN (R 4.4.2)
#>    scales            * 1.3.0      2023-11-28 [1] CRAN (R 4.4.2)
#>    secr                5.1.0      2024-11-04 [1] CRAN (R 4.4.2)
#>    sessioninfo         1.2.2      2021-12-06 [1] CRAN (R 4.4.2)
#>    sf                * 1.0-19     2024-11-05 [1] CRAN (R 4.4.2)
#>    shiny               1.9.1      2024-08-01 [1] CRAN (R 4.4.2)
#>    slippymath          0.3.1      2019-06-28 [1] CRAN (R 4.4.2)
#>    sp                  2.1-4      2024-04-30 [1] CRAN (R 4.4.2)
#>    SpadeR            * 0.1.1      2016-09-06 [1] CRAN (R 4.4.0)
#>    stars               0.6-7      2024-11-07 [1] CRAN (R 4.4.2)
#>    stringi             1.8.4      2024-05-06 [1] CRAN (R 4.4.0)
#>    stringr           * 1.5.1      2023-11-14 [1] CRAN (R 4.4.2)
#>    svglite             2.1.3      2023-12-08 [1] CRAN (R 4.4.2)
#>    systemfonts         1.1.0      2024-05-15 [1] CRAN (R 4.4.2)
#>    terra               1.8-5      2024-12-12 [1] CRAN (R 4.4.2)
#>    tibble            * 3.2.1      2023-03-20 [1] CRAN (R 4.4.2)
#>    tidyr             * 1.3.1      2024-01-24 [1] CRAN (R 4.4.2)
#>    tidyselect          1.2.1      2024-03-11 [1] CRAN (R 4.4.2)
#>    tidyverse         * 2.0.0      2023-02-22 [1] CRAN (R 4.4.2)
#>    timechange          0.3.0      2024-01-18 [1] CRAN (R 4.4.2)
#>    tmap              * 3.3-4      2023-09-12 [1] CRAN (R 4.4.2)
#>    tmaptools           3.1-1      2021-01-19 [1] CRAN (R 4.4.2)
#>    tweenr              2.0.3      2024-02-26 [1] CRAN (R 4.4.2)
#>    tzdb                0.4.0      2023-05-12 [1] CRAN (R 4.4.2)
#>    units               0.8-5      2023-11-28 [1] CRAN (R 4.4.2)
#>    urlchecker          1.0.1      2021-11-30 [1] CRAN (R 4.4.2)
#>    usethis             3.0.0      2024-07-29 [1] CRAN (R 4.4.1)
#>    utf8                1.2.4      2023-10-22 [1] CRAN (R 4.4.2)
#>    uuid                1.2-1      2024-07-29 [1] CRAN (R 4.4.1)
#>    vctrs               0.6.5      2023-12-01 [1] CRAN (R 4.4.2)
#>    vegan             * 2.6-8      2024-08-28 [1] CRAN (R 4.4.2)
#>    viridisLite         0.4.2      2023-05-02 [1] CRAN (R 4.4.2)
#>    withr               3.0.2      2024-10-28 [1] CRAN (R 4.4.2)
#>    wk                  0.9.4      2024-10-11 [1] CRAN (R 4.4.2)
#>    xfun                0.49       2024-10-31 [1] CRAN (R 4.4.2)
#>    XML                 3.99-0.17  2024-06-25 [1] CRAN (R 4.4.1)
#>    xml2                1.3.6      2023-12-04 [1] CRAN (R 4.4.2)
#>    xtable              1.8-4      2019-04-21 [1] CRAN (R 4.4.2)
#>    yaml                2.3.10     2024-07-26 [1] CRAN (R 4.4.1)
#> 
#>  [1] C:/Users/usuario/AppData/Local/R/win-library/4.4
#>  [2] C:/Program Files/R/R-4.4.2/library
#> 
#>  D ── DLL MD5 mismatch, broken installation.
#> 
#> ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

References

Allaire, JJ, Yihui Xie, Christophe Dervieux, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, et al. 2024. rmarkdown: Dynamic Documents for r. https://github.com/rstudio/rmarkdown.
Appelhans, Tim, Florian Detsch, Christoph Reudenbach, and Stefan Woellauer. 2023. mapview: Interactive Viewing of Spatial Data in r. https://CRAN.R-project.org/package=mapview.
Auguie, Baptiste. 2017. gridExtra: Miscellaneous Functions for Grid Graphics. https://CRAN.R-project.org/package=gridExtra.
Chao, Anne, Nicholas J. Gotelli, T. C. Hsieh, Elizabeth L. Sander, K. H. Ma, Robert K. Colwell, and Aaron M. Ellison. 2014. “Rarefaction and Extrapolation with Hill Numbers: A Framework for Sampling and Estimation in Species Diversity Studies.” Ecological Monographs 84: 45–67.
Chao, Anne, K. H. Ma, T. C. Hsieh, and Chun-Huo Chiu. 2016. SpadeR: Species-Richness Prediction and Diversity Estimation with r. https://CRAN.R-project.org/package=SpadeR.
Duong, Tarn. 2024. eks: Tidy and Geospatial Kernel Smoothing. https://CRAN.R-project.org/package=eks.
Hollister, Jeffrey, Tarak Shah, Jakub Nowosad, Alec L. Robitaille, Marcus W. Beck, and Mike Johnson. 2023. elevatr: Access Elevation Data from Various APIs. https://doi.org/10.5281/zenodo.8335450.
Hsieh, T. C., K. H. Ma, and Anne Chao. 2024. iNEXT: Interpolation and Extrapolation for Species Diversity. http://chao.stat.nthu.edu.tw/wordpress/software_download/.
Niedballa, Jürgen, Rahel Sollmann, Alexandre Courtiol, and Andreas Wilting. 2016. camtrapR: An r Package for Efficient Camera Trap Data Management.” Methods in Ecology and Evolution 7 (12): 1457–62. https://doi.org/10.1111/2041-210X.12600.
Oksanen, Jari, Gavin L. Simpson, F. Guillaume Blanchet, Roeland Kindt, Pierre Legendre, Peter R. Minchin, R. B. O’Hara, et al. 2024. vegan: Community Ecology Package. https://CRAN.R-project.org/package=vegan.
Pebesma, Edzer. 2018. Simple Features for R: Standardized Support for Spatial Vector Data.” The R Journal 10 (1): 439–46. https://doi.org/10.32614/RJ-2018-009.
Pebesma, Edzer, and Roger Bivand. 2023. Spatial Data Science: With applications in R. Chapman and Hall/CRC. https://doi.org/10.1201/9780429459016.
Pedersen, Thomas Lin. 2024a. ggforce: Accelerating ggplot2. https://CRAN.R-project.org/package=ggforce.
———. 2024b. patchwork: The Composer of Plots. https://CRAN.R-project.org/package=patchwork.
Quensen, John, Gavin Simpson, and Jari Oksanen. 2024. ggordiplots: Make ggplot2 Versions of Vegan’s Ordiplots. https://CRAN.R-project.org/package=ggordiplots.
R Core Team. 2024. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Roswell, Michael, and Joanathan Dushoff. 2023. MeanRarity: Hill Diversity Estimation and Visualization. https://github.com/mikeroswell/MeanRarity.
Sievert, Carson. 2020. Interactive Web-Based Data Visualization with r, Plotly, and Shiny. Chapman; Hall/CRC. https://plotly-r.com.
Simpson, Gavin L., and Jari Oksanen. 2023. ggvegan: ggplot2 Plots for the vegan Package. https://github.com/gavinsimpson/ggvegan.
Tennekes, Martijn. 2018. tmap: Thematic Maps in R.” Journal of Statistical Software 84 (6): 1–39. https://doi.org/10.18637/jss.v084.i06.
Wickham, Hadley. 2007. “Reshaping Data with the reshape Package.” Journal of Statistical Software 21 (12): 1–20. http://www.jstatsoft.org/v21/i12/.
———. 2011. “The Split-Apply-Combine Strategy for Data Analysis.” Journal of Statistical Software 40 (1): 1–29. https://www.jstatsoft.org/v40/i01/.
Wickham, Hadley, Mara Averick, Jennifer Bryan, Winston Chang, Lucy D’Agostino McGowan, Romain François, Garrett Grolemund, et al. 2019. “Welcome to the tidyverse.” Journal of Open Source Software 4 (43): 1686. https://doi.org/10.21105/joss.01686.
Wickham, Hadley, Jim Hester, Winston Chang, and Jennifer Bryan. 2022. devtools: Tools to Make Developing r Packages Easier. https://CRAN.R-project.org/package=devtools.
Wickham, Hadley, Thomas Lin Pedersen, and Dana Seidel. 2023. scales: Scale Functions for Visualization. https://CRAN.R-project.org/package=scales.
Xie, Yihui. 2014. knitr: A Comprehensive Tool for Reproducible Research in R.” In Implementing Reproducible Computational Research, edited by Victoria Stodden, Friedrich Leisch, and Roger D. Peng. Chapman; Hall/CRC.
———. 2015. Dynamic Documents with R and Knitr. 2nd ed. Boca Raton, Florida: Chapman; Hall/CRC. https://yihui.org/knitr/.
———. 2024. knitr: A General-Purpose Package for Dynamic Report Generation in r. https://yihui.org/knitr/.
Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown.
Xie, Yihui, Joe Cheng, and Xianying Tan. 2024. DT: A Wrapper of the JavaScript Library DataTables. https://CRAN.R-project.org/package=DT.
Xie, Yihui, Christophe Dervieux, and Emily Riederer. 2020. R Markdown Cookbook. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown-cookbook.
Zhu, Hao. 2024. kableExtra: Construct Complex Table with kable and Pipe Syntax. https://CRAN.R-project.org/package=kableExtra.

Citation

BibTeX citation:
@online{j._lizcano2024,
  author = {J. Lizcano, Diego},
  title = {Riqueza de Especies},
  date = {2024-06-25},
  url = {https://dlizcano.github.io/cametrap/posts/2024-12-15-riqueza/},
  langid = {en}
}
For attribution, please cite this work as:
J. Lizcano, Diego. 2024. “Riqueza de Especies.” June 25, 2024. https://dlizcano.github.io/cametrap/posts/2024-12-15-riqueza/.