library(camtrapR) # Camera Trap Data Management and Preparation of Occupancy and Spatial Capture-Recapture Analyses
library(tidyverse) # Easily Install and Load the 'Tidyverse'
library(leaflet) # Create Interactive Web Maps with the JavaScript 'Leaflet' Library
library(sp) # Classes and Methods for Spatial Data
library(ggtext) # Improved Text Rendering Support for 'ggplot2'
library(AICcmodavg) # Model Selection and Multimodel Inference Based on (Q)AIC(c)
library(broom) # Convert Statistical Objects into Tidy Tibbles
library(ggeffects) # Create Tidy Data Frames of Marginal Effects for 'ggplot' from Model Outputs
library(performance) # Assessment of Regression Models Performance
Indice de ¿abundancia? relativa (RAI)
Introducción al uso y limitaciones del índice de abundancia relativa en estudios de fototrampeo.
La abundancia y las cámaras trampa
La estimación de la abundancia de poblaciones es de vital importancia para la conservación de la vida silvestre. En el caso de los mamíferos, las cámaras trampa son una de las métodos de muestreo más usados (Burton et al. 2015).
Especies marcadas y no marcadas
En especies marcadas o con marcas naturales es posible usar modelos de captura recaptura para estimar la abundancia (Wearn y Glover-Kapfer 2017).
Pero en especies que no tienen marcas es difícil o imposible reconocer individuos a partir de fotografías, lo que no permite usar modelos de captura recaptura.
En estos casos muchas veces se usan índices para realizar inferencias sobre la abundancia de especies (O’Connell, Nichols, y Karanth 2010; Timothy G. O’Brien, Kinnaird, y Wibisono 2003).
Índice de ¿abundancia? relativa
El índice más usado en fototrampeo es el número de fotos de especies por día de cámara trampa (la verdad no conozco otro), también conocido como índice de abundancia relativo (Relative abundance index ; RAI), es nombrado como RAI2 por Timothy G. O’Brien, Kinnaird, y Wibisono (2003) .
\[ RAI= \frac{Número-de-registros}{días-cámara}* 100 \]
la multiplicación por 100 es simplemente para estandarizar el cálculo y hacer más sencilla cualquier comparación que se desee.
Del RAI a la abundancia
Cómo cualquier otro índice, la utilidad del RAI para realizar inferencias sobre la abundancia de especies depende de que cumpla con ciertos supuestos generales.
Los registros fotográficos deben ser independientes en el tiempo
Población cerrada, el RAI no cambia durante el muestreo
Todos los animales/individuos son detectados si están presentes
Sí todo esto es cierto para el RAI, entonces se espera que teóricamente tenga una correlación con la abundancia poblacional “real” (O’Connell, Nichols, y Karanth 2010; Timothy G. O’Brien, Kinnaird, y Wibisono 2003).
Registros independientes ⏲️
Seguramente en tus proyectos o tesis te han dicho que debes considerar solamente los registros independientes para calcular el RAI. Pero, ¿qué es un registro independiente?
Muchas personas intuyen que un registro independiente es aquel donde se tiene cierta certeza de que el mismo individuo no es fotografiado de manera consecutiva. Entonces, muy inocentemente definen en su tesis o artículo 30/60/1440 minutos como el umbral mágico, en el cual dos registros no pertenecen al mismo individuo. Citando seguramente a otra persona que también ha hecho lo mismo (R. Sollmann 2018).
Estamos olvidando algo crucial y es que usamos el RAI porque no podemos reconocer individuos y por lo tanto no tenemos la certeza de que un individuo diferente pasa en la cámara después de xx cantidad de tiempo.
Realmente definimos los registros “independientes” para evitar las pseudo-replicas temporales. Es decir, registros que nos dan la misma información debido a que están muy cercanos entre sí. Pero, elegir un intervalo no es una tarea trivial, ya que: un intervalo muy pequeño puede hacer que tengamos registros dependientes, lo que resulta en que sobre-estimemos el índice o que se invaliden muchas pruebas estadísticas (Carroll y Pearson 2000). Pero escoger un intervalo muy grande puede hacer que perdamos información, lo cual no es algo deseable para especies poco comunes.
¿ Cómo escoger un intervalo adecuado? sigue siendo una pregunta difícil. Lo mejor que podemos hacer es definir ese intervalo con base en el conocimiento ecológico y del movimiento de la especie objetivo (R. Sollmann 2018). Existe también la posibilidad de definir el umbral de independencia de manera más formal explorando la autocorrelación temporal de los registros (Kays y Parsons 2014; F. Iannarilli et al. 2019) o la inspección de los intervalos de registros subsecuentes (Yasuda 2004).
Por lo general las técnicas estadísticas formales para definir independencia temporal son poco usadas por la falta de información y herramientas que sean relativamente difíciles de aplicar. Aunque en este campo el paquete lorelogram
(F. Iannarilli et al. 2019) parece ser muy promisorio. En todo caso las primeras aplicaciones del paquete muestran que para la mayoría de los casos la dependencia espacial se pierde con tan solo 3 minutos y en casos extremos 15 min (con atrayentes) (Fabiola Iannarilli et al. 2021).
Población cerrada
Seguramente la mayoría también ha escuchado hablar del supuesto de población cerrada. De manera general una población cerrada se da idealmente en determinado periodo de tiempo donde no sucedan muertes, nacimientos, migración o emigración de individuos (Schoen y Kim 1991). Esto es particularmente importante cuando intentamos hacer inferencias sobre el parámetros poblacionales de una especie, en este caso abundancia.
Vamos a verlo con un ejemplo exagerado, pero espero que ilustre lo importante que puede ser el supuesto. Imaginemos que tenemos tres años de conteos de una población de un cánido en un área determinada. Por algún motivo esta población esta disminuyendo cada año. Sin embargo, sí yo defino mi temporada de muestreo como los 3 años, no será posible evidenciar la disminución de la población. Al realizar cada conteo por año si sera posible. Esto mismo puede suceder a escala de meses o de temporadas climáticas, pero claro todo va a depender del sistema de estudio y el conocimiento que tengamos del mismo.
¿ Detectamos todo los que existe ?
El RAI supone que todos los individuos que se encuentren en el área serán fotografiados, es decir que la probabilidad de detección es perfecta. En otras palabras, si tenemos la total seguridad de registrar todos los individuos que pasen en frente de la cámara trampa, tendremos la certeza de que los cambios en la tasa fotográfica se deban a los cambios en la abundancia de la especie. Básicamente que la relación de la abundancia real y el RAI sea monotónica (Timothy G. O’Brien 2011).
Autores cómo Palmer et al. (2018) han demostrado que bajo ciertas circunstancias el RAI puede ser un buen reflejo de la abundancia. No obstante, en la mayoría de los casos la probabilidad de detección de las especies no es perfecta (Kéry et al. 2009; Burton et al. 2015). Esto quiere decir que es bastante probable que pese a que no detectemos a una especie en una unidad y día determinado, es difícil llegar a concluir que en efecto esta ausente. Lo cual termina por generar que subestimemos el parámetro de interés (Martin-Garcia et al. 2022).
En cámaras trampa la detección imperfecta es un fenómeno muy común. Recordemos que como herramientas de monitoreo pasivo las cámaras tienen un área efectiva de muestreo bastante pequeña (Andrade-Ponce et al. 2021; Moeller et al. 2022). En otras palabras, la probabilidad de que una especie pase frente al área donde el sensor de la cámara se active y sea registrada, realmente es baja (Moeller et al. 2022).
Existen diversos factores que pueden llegar a afectar la detección de las especies, desde su abundancia natural, el tamaño del ámbito hogareño, el tipo de hábitat, el lugar en que ubiquemos la cámara, entre otras (Burton et al. 2015; Andrade-Ponce et al. 2021; Guillera-Arroita 2016). Lo cierto es que se ha demostrado que llegar a ignorar la detección imperfecta de las especies puede hacernos llegar a conclusiones totalmente contrarias sobre la abundancia de las mismas (Rahel Sollmann et al. 2013).
El uso del espacio afecta la interpretación
Si en algún mundo idílico cumplimos con los supuestos que ya mencionamos, podríamos llegar a pensar que los cambios en el RAI son un buen reflejo de los cambios en la abundancia de poblacional. No obstante, el uso del hábitat o del espacio también puede afectar la tasa de registro (Stewart et al. 2018). Por ejemplo, especies que se mueven rápido a lo largo de su territorio pueden ser detectadas mayor número de veces, mientras que una especie de movimiento “lento” no. De manera, similar especies con ámbitos hogareños más amplios, pueden ser detectadas en distintas estaciones, aumentando el número de detecciones totales (Broadley et al. 2019).
Creo que una manera sensata de usar el RAI es como una medida de actividad o intensidad de uso (Timothy G. O’Brien 2011). Por supuesto seguimos teniendo el problema de la detección imperfecta, pero al menos no hacemos inferencia sobre una abundancia, sino sobre la relación entre la tasa de detección y alguna covariable como el hábitat o un disturbio. Precisamente, en este ejemplo vamos a usar el RAI para explicar la relación de la especie con algunas covariables y para ello usaremos modelos lineales. Manos a la obra:
Script
PAquetes
Usaremos las siguientes librerías en R
Datos
Vamos a cargar unos datos de cámaras trampa del año 2020. Seguiremos el flujo de trabajo que emplea camtrapR, por lo cual cargaremos las tablas que generamos a partir del paquete: la tabla de funcionamiento de cámaras y la de registros.
Vamos a cargar la tabla de operación de cámaras
# Usaré la función read.delim debido a que mi tabla esta en formato txt, pero generalmente camtrapR genera csv. En ese caso se usa read.csv
<- read.delim("Data/CT_cams.txt") CT_table
Station | utm_y | utm_x | Setup_date | Retrieval_date |
---|---|---|---|---|
CBG01 | 2007508 | 696396 | 22/02/2020 | 22/04/2020 |
CBG02 | 2008327 | 695788 | 22/02/2020 | 22/04/2020 |
CBG03 | 2009568 | 695414 | 21/02/2020 | 22/04/2020 |
CBG04 | 2010475 | 695052 | 21/02/2020 | 22/04/2020 |
CBG05 | 2011016 | 694286 | 21/02/2020 | 22/04/2020 |
CBG06 | 2007026 | 695603 | 22/02/2020 | 22/04/2020 |
Un paso muy importante es verificar que las coordenadas sean las correctas, y la manera más sencilla de saberlo es mediante gráficos. Nosotros haremos un mapa interactivo para verificar que todo esté en orden
# Generar objeto espacial para el mapa
<- SpatialPoints(cbind(CT_table$utm_x,
CT_points $utm_y),
CT_tableproj4string = CRS('+proj=utm +datum=WGS84 +zone=14 +towgs84=0,0,0'))
# Proyectar a WGS solo para este paso
<- spTransform(CT_points, "+proj=longlat +datum=WGS84")
CT_points
# Generar el mapa
<- leaflet() %>%
m addProviderTiles(providers$Esri.WorldImagery, group="Satellite") %>% # Imagen satelital
addProviderTiles(providers$Esri.WorldTopoMap, group="Base") %>%
addCircleMarkers(lng=sp::coordinates(CT_points)[,1], lat=sp::coordinates(CT_points)[,2],
popup= paste(CT_table$Station)) %>%
# Layers control
addLayersControl(
baseGroups = c("Satellite", "Base"),
options = layersControlOptions(collapsed = FALSE)
) m
Ahora vamos a cargar los registros de las especies. Usaremos la base de datos que genera la función surveReport
de CamtrapR, específicamente la del conteo de detección de las especies y la del esfuerzo de muestreo de las cámaras
# Registros sin delta de independencia
<- read.csv("Data/events_by_station_d0.csv")
registrosD0
# Registros con independencia de 15 min
<- read.csv("Data/events_by_station_d15.csv")
registrosD15
# Registros con independencia de 30 min
<- read.csv("Data/events_by_station_d30.csv")
registrosD30
# Registros con independencia de 60 min
<- read.csv("Data/events_by_station_d60.csv") registrosD60
Cada tabla de registros se ve así:
Station | Species | n_events |
---|---|---|
CBG01 | Bassariscus astutus | 0 |
CBG01 | Bird | 1 |
CBG01 | Bug | 0 |
CBG01 | Canis latrans | 0 |
CBG01 | Canis lupus familiaris | 2 |
CBG01 | Capra aegagrus hircus | 15 |
Para calcular el RAI ahora necesitamos el dato de funcionamiento de cámaras, el cual también podemos obtener de las salidas del surveReport
<- read.csv2("Data/survey_dates.csv") %>%
Cam_esf select(Station, n_nights_active) # Selecciono las columnas que voy a usar
# NOTA: uso read.csv2 porque mi compu guarda los csv usando el ; como separador
Station | n_nights_active |
---|---|
CBG01 | 60 |
CBG02 | 60 |
CBG03 | 61 |
CBG04 | 61 |
CBG05 | 61 |
CBG06 | 60 |
Cálculo del RAI
Ya cargué toda la información que necesito para calcular el RAI, ahora solo tengo que unirla en una base y hacer las operaciones.
Para ello vamos a aprovecharnos de la capacidad de dplyr para el manejo de bases de datos.
<- registrosD0 %>% #Base de datos de registros
IAR_D0 left_join(Cam_esf) %>% #Unimos con la base de esfuerzo
group_by(Station, Species) %>% # Agrupamos por cada estación y especie
summarise(IAR= (n_events/n_nights_active)*100) # Aplicamos la formula para cálcular el RAI y listo
Joining with `by = join_by(Station)`
`summarise()` has grouped output by 'Station'. You can override using the
`.groups` argument.
De esta manera relativamente sencilla podemos obtener el valor de RAI, para cada especie y cada estación de muestreo. Tenemos que repetir este procedimiento para cada base de datos de distinto umbral de “independencia”. Para hacer todo más eficiente voy a crear una pequeña función que me ahorre algo de código
#Función para RAI rápido
<- function(registros, esfuerzo, delta){
Rai_fun
<- registros %>% # registros
df_RAI left_join(esfuerzo) %>% # unir con esfuerzo
group_by(Station, Species) %>% #agrupar por estacion y sp
summarise(IAR = (n_events/n_nights_active)*100) %>% #Calcular IAR
rename_at(., vars(contains("IAR")),list(~paste("IAR_D", delta, sep = "") )) # renombrar la columna con el delta adecuado
return(df_RAI)
}
# Usemos la pequeña función
<- Rai_fun(registros = registrosD15,
IAR_D15 esfuerzo = Cam_esf,
delta = "15")
<- Rai_fun(registros = registrosD30,
IAR_D30 esfuerzo = Cam_esf,
delta = "30")
<- Rai_fun(registros = registrosD60,
IAR_D60 esfuerzo = Cam_esf,
delta = "60")
Ahora juntemos todo en una sola base de datos
# Como todos comparten la columna de especies y de Estacion podemos usar un left_join
<- IAR_D0 %>%
IAR_delta left_join(IAR_D15) %>%
left_join(IAR_D30) %>%
left_join(IAR_D60) %>%
filter(Species %in% c("Bassariscus astutus", #filtro de especies
"Canis latrans",
"Conepatus leuconotus",
"Dicotyles angulatus",
"Herpailurus yagouaroundi",
"Lynx rufus",
"Mephitis macroura",
"Nasua narica",
"Odocoileus virginianus",
"Procyon lotor",
"Puma concolor",
"Spilogale angustifrons",
"Sylvilagus floridanus",
"Urocyon cinereoargenteus"
))
Joining with `by = join_by(Station, Species)`
Joining with `by = join_by(Station, Species)`
Joining with `by = join_by(Station, Species)`
Station | Species | IAR | IAR_D15 | IAR_D30 | IAR_D60 |
---|---|---|---|---|---|
CBG01 | Bassariscus astutus | 0 | 0 | 0 | 0 |
CBG01 | Canis latrans | 0 | 0 | 0 | 0 |
CBG01 | Conepatus leuconotus | 0 | 0 | 0 | 0 |
CBG01 | Dicotyles angulatus | 0 | 0 | 0 | 0 |
CBG01 | Herpailurus yagouaroundi | 0 | 0 | 0 | 0 |
CBG01 | Lynx rufus | 0 | 0 | 0 | 0 |
Tenemos el RAI por estación, pero para evaluarlo gráficamente quiero tener un RAI promedio de especie para todas las cámaras en cada delta. De nuevo usaremos el poder de dplyr
<- IAR_delta %>%
IAR_mean pivot_longer(cols = IAR:IAR_D60, #Pasaran a una columna
names_to = "Delta", # Esa columna se llamara Delta
values_to = "IAR") %>% # los valores pasaran a columna llamada IAR
group_by(Species, Delta) %>%
summarise(mean_IAR= mean(IAR), sd_IAR= sd(IAR)) %>%
mutate(Delta= str_remove(Delta, "IAR_")) # Solo para quitar ese pedazo de la columna
`summarise()` has grouped output by 'Species'. You can override using the
`.groups` argument.
::kable(IAR_mean) knitr
Species | Delta | mean_IAR | sd_IAR |
---|---|---|---|
Bassariscus astutus | IAR | 1.5703701 | 4.4072450 |
Bassariscus astutus | D15 | 0.8367877 | 2.2802318 |
Bassariscus astutus | D30 | 0.8367877 | 2.2802318 |
Bassariscus astutus | D60 | 0.8367877 | 2.2802318 |
Canis latrans | IAR | 8.0592564 | 17.5807228 |
Canis latrans | D15 | 2.3824795 | 3.6637466 |
Canis latrans | D30 | 2.3824795 | 3.6637466 |
Canis latrans | D60 | 2.3824795 | 3.6637466 |
Conepatus leuconotus | IAR | 10.3393551 | 16.2213332 |
Conepatus leuconotus | D15 | 4.0620540 | 6.2208638 |
Conepatus leuconotus | D30 | 4.0620540 | 6.2208638 |
Conepatus leuconotus | D60 | 4.0620540 | 6.2208638 |
Dicotyles angulatus | IAR | 64.9250553 | 214.2476146 |
Dicotyles angulatus | D15 | 8.1093806 | 20.4975724 |
Dicotyles angulatus | D30 | 7.9532932 | 20.1021754 |
Dicotyles angulatus | D60 | 7.6411184 | 18.7172377 |
Herpailurus yagouaroundi | IAR | 0.0537634 | 0.2993422 |
Herpailurus yagouaroundi | D15 | 0.0537634 | 0.2993422 |
Herpailurus yagouaroundi | D30 | 0.0537634 | 0.2993422 |
Herpailurus yagouaroundi | D60 | 0.0537634 | 0.2993422 |
Lynx rufus | IAR | 9.7637365 | 10.8491509 |
Lynx rufus | D15 | 3.5860869 | 4.1277275 |
Lynx rufus | D30 | 3.5860869 | 4.1277275 |
Lynx rufus | D60 | 3.5860869 | 4.1277275 |
Mephitis macroura | IAR | 3.9431262 | 10.9053848 |
Mephitis macroura | D15 | 1.7348732 | 4.8169767 |
Mephitis macroura | D30 | 1.7348732 | 4.8169767 |
Mephitis macroura | D60 | 1.7348732 | 4.8169767 |
Nasua narica | IAR | 2.6416870 | 8.0925764 |
Nasua narica | D15 | 0.6337888 | 1.5066796 |
Nasua narica | D30 | 0.6337888 | 1.5066796 |
Nasua narica | D60 | 0.5809067 | 1.3074359 |
Odocoileus virginianus | IAR | 112.3386386 | 166.1376550 |
Odocoileus virginianus | D15 | 24.8437420 | 29.3813070 |
Odocoileus virginianus | D30 | 24.6868017 | 29.1136012 |
Odocoileus virginianus | D60 | 24.1639515 | 28.3367513 |
Procyon lotor | IAR | 3.4143907 | 6.9878003 |
Procyon lotor | D15 | 1.2615218 | 2.5180577 |
Procyon lotor | D30 | 1.2615218 | 2.5180577 |
Procyon lotor | D60 | 1.2615218 | 2.5180577 |
Puma concolor | IAR | 0.1040583 | 0.5793719 |
Puma concolor | D15 | 0.0520291 | 0.2896860 |
Puma concolor | D30 | 0.0520291 | 0.2896860 |
Puma concolor | D60 | 0.0520291 | 0.2896860 |
Spilogale angustifrons | IAR | 1.1705703 | 3.0083526 |
Spilogale angustifrons | D15 | 0.6919591 | 1.7586044 |
Spilogale angustifrons | D30 | 0.6919591 | 1.7586044 |
Spilogale angustifrons | D60 | 0.6919591 | 1.7586044 |
Sylvilagus floridanus | IAR | 77.1753865 | 127.3977146 |
Sylvilagus floridanus | D15 | 25.7727890 | 37.6388927 |
Sylvilagus floridanus | D30 | 24.8702399 | 36.3065493 |
Sylvilagus floridanus | D60 | 23.8064289 | 34.2677516 |
Urocyon cinereoargenteus | IAR | 60.8450896 | 95.2375287 |
Urocyon cinereoargenteus | D15 | 23.5004236 | 37.8858901 |
Urocyon cinereoargenteus | D30 | 23.3417774 | 37.7066157 |
Urocyon cinereoargenteus | D60 | 23.0209311 | 36.5509971 |
Ahora vamos a verlo de manera gráfica
<- IAR_mean %>% # base de datos
(IARmean_plot filter(Delta != "IAR") %>% # Quitar delta 0 para gráfica
ggplot(aes(x= reorder(Delta, -mean_IAR) , y= mean_IAR, group=1))+ # Datos de los ejes
geom_line()+ # Linea
geom_point(aes(col= Delta),
size= 3)+ # Puntos
facet_wrap(.~Species, scales = "free")+ # Hacerlo por especie
labs(y= "Media de IAR",
x= "Delta de de tiempo de registros",
caps= "Sin D0")+
theme_bw()) # Tema
Como ven no a todas las especies las afecta igual el umbral de independencia. Hay algunas especies cuyos registros son tan dispersos en el muestreo, que el RAI no cambia con ningún umbral de independencia.
Claro, esta gráfica te ayudará a guiarte, pero debe ir acompañada de una observación de los registros o el cálculo de la autocorrelación temporal para definir el “delta” de tiempo que usaras. Ya estamos trabajando en este último punto y espero en algún futuro cercano poner en linea un tutorial para estimar el umbral de independencia temporal. Por ahora me quedaré con los registros con un delta de 15 minutos.
Ahora veamos los valores de RAI por especie
<- IAR_mean %>%
plot_IAR filter(Delta == "D15") %>%
mutate(Sp_n= paste("*",Species,"*", " (IAR= ",round(mean_IAR, 3) , " ) ", sep = "") ) %>% # Truco para italica de especies
ggplot(aes(x= reorder(Sp_n,mean_IAR), #Ordenar sp
y= mean_IAR))+ # No. eventos
geom_bar(stat= "identity")+ # Geometria
coord_flip()+ # Girar ejes
labs(title = "IAR de especies", # Título
y= "IAR calculado",
x= NULL,
caption = "Registros independencia temporal de 15 minutos año 2020")+ # Sin eje x
theme_minimal()+ # Tema
theme(axis.text.y= element_markdown()) # Itálica nombre de especies
plot_IAR
Recordemos que este gráfico es informativo y que no es recomendable comparar el RAI de diferentes especies. Por ejemplo, no sabemos si hay más venados que zorras grises (probablemente no), solo sabemos que los venados son más frecuentemente fotografiados. Hablando de venados, aprovechemos que es una especie con bastantes datos y evaluemos por medio de modelos la relación de su RAI con algunas variables.
Modelando el RAI 🦌
En este caso lo que nos interesa conocer es cómo la variación del RAI es explicada por distintas condiciones del sitio, vamos a usar nuestra base cruda de delta 15, no la del promedio.
<- IAR_D15 %>% # Llamamos la base de datos
venado filter(Species == "Odocoileus virginianus") # Filtramos la especie que nos interesa
Ahora vamos a cargar las variables, escalarlas y finalmente unirlas a la base de IAR
<- read_csv2("Data/selectedcov_nostd190821.csv") covs.data
i Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
Rows: 31 Columns: 12
-- Column specification --------------------------------------------------------
Delimiter: ";"
chr (5): Station, Cam, MSAVI, Slope, Habitat
dbl (4): utm_y, utm_x, Cluster, Effort
num (3): Vertcover_50, Dcrops, Dpop_G
i Use `spec()` to retrieve the full column specification for this data.
i Specify the column types or set `show_col_types = FALSE` to quiet this message.
# UPS hay dos variables numericas que R las lee como caracteres
$MSAVI <- as.numeric(covs.data$MSAVI)
covs.data$Slope <- as.numeric(covs.data$Slope)
covs.data
### Separar las variables numéricas y categóricas
<- covs.data %>%
cov.num ::select(where(is.numeric)) %>% # Seleccionar columnas numéricas
dplyrscale() %>% # estandarizar
as.data.frame()
<- covs.data %>%
cov.fac ::select(where(is.character)) # Seleccionar variables de caracter
dplyr<- data.frame(cov.fac, cov.num) %>% # Unir covariables
sp_lmdata right_join(venado, by= "Station")# Unir con la base de registros
Veamos el mapa
# estaría bien darle un vistazo espacial a los registros de la especie.
ggplot(sp_lmdata, aes(x= utm_x, y= utm_y, col= IAR_D15))+
geom_point(aes(size= IAR_D15))+
scale_colour_gradient(low= "black", high = "red")+
scale_size(range = c(3,15))+
theme_bw()
Al tomar el IAR valores continuos suponemos que seguirá un error tipo gaussiano, por lo cual usaremos modelos lineales simples para modelarlo. NOTA: Al no tomar valores negativos quizás pueda ser error tipo gamma pero depende de cada caso probarlo.
# Modelos lineales
# sin variables
<- lm(IAR_D15~ 1, data = sp_lmdata)
m0 # la IAR afectada por la distancia a cultivo
<- lm(IAR_D15~ Dcrops, data = sp_lmdata)
m1 # la IAR afectada por el verdor de la vegetación
<- lm(IAR_D15~ MSAVI, data = sp_lmdata)
m2 # la IAR afectada por la pendiente
<- lm(IAR_D15~ Slope, data = sp_lmdata)
m3 # la IAR afectada por la distancia a poblados
<- lm(IAR_D15~ Dpop_G, data = sp_lmdata)
m4 # la IAR afectada por el tipo de habitat
<- lm(IAR_D15~ Habitat, data = sp_lmdata) m5
Usaremos el criterio de información de Akaike (AIC) para seleccionar el “mejor” modelo. Consiedaremos modelos con un delta AIC menor a dos como igualmente plausibles (Burnham y Anderson 2002).
<- list(m0, m1, m2, m3, m4, m5)
lista_mods <- c("IAR~ 1",
mod_names "IAR~ D_cultivos",
"IAR~ MSAVI",
"IAR~ Slope",
"IAR~ D_poblado",
"IAR~ Habitat"
)<- aictab(lista_mods,
AIC modnames = mod_names,
second.ord = F, sort = T)
::kable(AIC, 'html', digits = 3) knitr
Modnames | K | AIC | Delta_AIC | ModelLik | AICWt | LL | Cum.Wt | |
---|---|---|---|---|---|---|---|---|
4 | IAR~ Slope | 3 | 290.904 | 0.000 | 1.000 | 0.952 | -142.452 | 0.952 |
6 | IAR~ Habitat | 3 | 298.255 | 7.351 | 0.025 | 0.024 | -146.128 | 0.976 |
2 | IAR~ D_cultivos | 3 | 300.058 | 9.154 | 0.010 | 0.010 | -147.029 | 0.986 |
1 | IAR~ 1 | 2 | 300.540 | 9.636 | 0.008 | 0.008 | -148.270 | 0.994 |
3 | IAR~ MSAVI | 3 | 302.066 | 11.162 | 0.004 | 0.004 | -148.033 | 0.997 |
5 | IAR~ D_poblado | 3 | 302.535 | 11.632 | 0.003 | 0.003 | -148.268 | 1.000 |
Según el AIC la pendiente es la variable que mejor explica los cambios en RAI del venado en nuestra área de estudio. Veamos los coeficientes del modelo.
<- m3 %>%
modelo tidy()
::kable(modelo, digits = 3) knitr
term | estimate | std.error | statistic | p.value |
---|---|---|---|---|
(Intercept) | 24.844 | 4.449 | 5.584 | 0.000 |
Slope | 16.437 | 4.522 | 3.635 | 0.001 |
<- ggeffect(m3, terms= "Slope")
pred plot(pred)
Alto ahí vaquero. El AIC no te indica que tu modelo se adecuado, así que es deber de nosotros verificar que cumple con todos los supuestos.
check_model(m3)
Parece que nuestro modelito no cumple del todo con el supuesto de normalidad en los residuales, tiene heterogeneidad en su varianza y también una posible outlier. Por ahora no nos preocuparemos mucho por esto; primero porque es un ejemplo y segundo porque para serles sincero yo inventé las covariables 😝🤪. Lo que quiero que vean es que a pesar de todo el RAI te puede dar una idea de la relación del hábitat con las especies. Claro, estamos subestimando la relación por el hecho de no considerar la detección imperfecta, pero mientras seamos conscientes de ello y lo discutamos, personalmente creo que sigue siendo valioso.
Conclusiones
El RAI es uno de los indices más usados y probablemente se siga usando mucho en estudios de cámaras trampa. Principalmente porque es sencillo de entender y fácil de calcular. El problema, como vimos, es que para realizar inferencias sobre la abundancia poblacional de las especies es una métrica muy susceptible al sesgo (Gilbert et al. 2020). Esto quiere decir que, la mayoría de las veces el RAI no será un buen reflejo de la abundancia “real” de las especies, por lo cual es peligroso basarnos en él para tomar decisiones sobre el manejo poblacional de las especies, o al menos hay que ser muy muy cuidadosos con lo que podemos concluir. En ese mismo sentido, el RAI tampoco es muy útil para hacer comparaciones entre localidades, temporadas o entre especies, porque como ya vimos, la tasa fotográfica de cada especie puede variar conforme su detección (Anile y Devillard 2015; Fabiola Iannarilli et al. 2021; Rahel Sollmann et al. 2013).
Yo sé, justo ahora parece que estimar la abundancia de especies sin marcas naturales con cámaras trampa es una tarea Quijotesca. Pero no desfallezcan, en éste momento ustedes acaban de salir de la matrix y van a empezar a ser mucho más críticos con sus conclusiones. Además, la estimación de la abundancia de especies es un campo en constante evolución y probablemente sean ustedes quienes empiecen a hacer uso de otras herramientas analíticas mas fuertes que permitan generar estimaciones confiables para responder preguntas ecológicas o determinar la pertinencia de una acción de conservación. Como primer consejo yo les recomiendo tomarse un buen tiempo leyendo a Gilbert et al. (2020) para una introducción general a éste tipo de aproximaciones.