Actualmente las cámaras-trampa son uno de los métodos más populares para obtener diferente información de la fauna, principalmente de mamíferos y aves de talla mediana y grande. En particular, con el fototrampeo es muy frecuente calcular el IAR (O’Brien 2011). En el Capítulo 8 del libro “Fototrampeo en R: Vol.I”, Mandujano (2019) describe el paquete RAI
para calcular este índice de la manera tradicional donde se agrupan todos los datos de las cámaras; y de una manera alternativa donde el IAR se estima para cada especie en cada cámara. Esto permite probar estadísticamente posibles diferencias en el IAR entre especies. Sin embargo, para analizar los datos, el paquete RAI
requiere que la información se ingrese con un formato definido. En esta viñeta describimos un procedimiento muy sencillo para preparar la base de datos para luego ser empleada con la función RAI()
. El procedimiento aquí descrito se basa en el empleo de camtrapR
para etiquetar, organizar y realizar análisis preliminares (Niedballa et al. 2016).
Se carga la librería:
library(camtrapR)
Luego se leen los archivos previamente guardados en formato .csv
que contienen los regitros independientes y la operatividad de las cámaras, por ejemplo:
registros <- read.csv("datos.csv", header = T)
head(registros)
## Station Tipo_monitoreo Species DateTimeOriginal Date Time
## 1 B1C2 Monitoreo Conejo 15/06/2018 21:14 15/06/2018 21:14:35
## 2 B1C2 Monitoreo Conejo 16/06/2018 02:14 16/06/2018 02:14:50
## 3 B1C3 Monitoreo Conejo 28/02/2018 23:26 28/02/2018 23:26:38
## 4 B1C3 Monitoreo Conejo 03/03/2018 00:20 03/03/2018 00:20:30
## 5 B1C3 Monitoreo Conejo 04/03/2018 05:05 04/03/2018 05:05:21
## 6 B1C3 Monitoreo Conejo 04/03/2018 21:28 04/03/2018 21:28:37
## delta.time.secs delta.time.mins delta.time.hours delta.time.days
## 1 534158 8903 148.4 6.2
## 2 17634 294 4.9 0.2
## 3 0 0 0.0 0.0
## 4 176028 2934 48.9 2.0
## 5 103464 1724 28.7 1.2
## 6 58602 977 16.3 0.7
## metadata_Species
## 1 Sylvilagus floridanus
## 2 Sylvilagus floridanus
## 3 Sylvilagus floridanus
## 4 Sylvilagus floridanus
## 5 Sylvilagus floridanus
## 6 Sylvilagus floridanus
operatividad_cam <- read.csv("Operatividad_Camaras.csv", header = T)
head(operatividad_cam)
## X Y Station Tipo_Monitoreo Localidad Fecha_colocacion
## 1 692889 2007473 CB41 Monitoreo CB 01/01/2014
## 2 692190 2007979 CB42 Monitoreo CB 01/02/2014
## 3 692339 2007458 CB43 Monitoreo CB 01/02/2014
## 4 692187 2007655 CB44 Monitoreo CB 01/01/2014
## 5 692102 2007846 CB45 Monitoreo CB 01/02/2014
## 6 693065 2007297 CB46 Monitoreo CB 01/09/2015
## Fecha_retiro Problem1_from Problem1_to
## 1 31/08/2014
## 2 31/05/2016 01/09/2014 08/02/2016
## 3 09/06/2016 01/09/2014 08/02/2016
## 4 31/08/2014
## 5 09/06/2016 01/09/2014 31/08/2015
## 6 02/06/2016 01/12/2015 31/01/2016
Para obtener el número de registros y el esfuerzo de muestreo por cámara, se emplea la función surveyReport
como:
reporte <- surveyReport (recordTable = registros,
CTtable = operatividad_cam,
speciesCol = "Species",
stationCol = "Station",
setupCol = "Fecha_colocacion",
retrievalCol = "Fecha_retiro",
CTDateFormat = "%d/%m/%Y",
recordDateTimeCol = "DateTimeOriginal",
recordDateTimeFormat = "%d/%m/%Y %H:%M",
CTHasProblems = T)
##
## -------------------------------------------------------
## [1] "Total number of stations: 24"
##
## -------------------------------------------------------
## [1] "Number of operational stations: 24"
##
## -------------------------------------------------------
## [1] "n nights with cameras set up (operational or not. NOTE: only correct if 1 camera per station): 5678"
##
## -------------------------------------------------------
## [1] "n nights with cameras set up and active (trap nights. NOTE: only correct if 1 camera per station): 4138"
##
## -------------------------------------------------------
## [1] "total trapping period: 2014-01-01 - 2018-06-17"
Los datos del esfuerzo de muestreo se pueden extraer como:
head(esfuerzo_muestreo <- reporte [[1]])
## Station setup_date first_image_date last_image_date retrieval_date
## 1 B1C1 2018-02-23 <NA> <NA> 2018-03-20
## 2 B1C2 2018-02-23 2018-02-24 2018-06-16 2018-06-17
## 3 B1C3 2018-02-23 2018-02-28 2018-06-10 2018-06-17
## 4 B1C4 2018-02-23 2018-02-24 2018-06-17 2018-06-17
## 5 B1C5 2018-02-23 2018-03-23 2018-06-15 2018-06-17
## 6 B1C6 2018-03-20 2018-03-22 2018-06-14 2018-06-17
## n_nights_total n_nights_active n_cameras
## 1 25 25 1
## 2 114 114 1
## 3 114 114 1
## 4 114 114 1
## 5 114 93 1
## 6 89 89 1
Asimismo podemos extraer información como:
n_activas <- esfuerzo_muestreo [c("Station", "n_nights_active")]
head(n_activas)
## Station n_nights_active
## 1 B1C1 25
## 2 B1C2 114
## 3 B1C3 114
## 4 B1C4 114
## 5 B1C5 93
## 6 B1C6 89
registros_especies <- reporte[[4]]
head(registros_especies)
## Station Species n_events
## 1 B1C2 Conejo 2
## 2 B1C2 Lince 3
## 3 B1C2 Mephitis 8
## 4 B1C2 Venado 7
## 5 B1C2 Zorra 13
## 6 B1C3 Conejo 15
Luego unimos las columnas en una sola data.frame
como:
wildlife.data <- merge(registros_especies, n_activas, all.y = T)
head(wildlife.data)
## Station Species n_events n_nights_active
## 1 B1C1 <NA> NA 25
## 2 B1C2 Conejo 2 114
## 3 B1C2 Lince 3 114
## 4 B1C2 Mephitis 8 114
## 5 B1C2 Venado 7 114
## 6 B1C2 Zorra 13 114
De acuerdo al paquete RAI
se debe nombrar cada columna de una manera específica, esto lo hacemos con el siguiente código:
colnames(wildlife.data)
## [1] "Station" "Species" "n_events" "n_nights_active"
names(wildlife.data)[names(wildlife.data) == "Station"] <- "Camera"
names(wildlife.data)[names(wildlife.data) == "n_events"] <- "Events"
names(wildlife.data)[names(wildlife.data) == "n_nights_active"] <- "Effort"
colnames(wildlife.data)
## [1] "Camera" "Species" "Events" "Effort"
head(wildlife.data)
## Camera Species Events Effort
## 1 B1C1 <NA> NA 25
## 2 B1C2 Conejo 2 114
## 3 B1C2 Lince 3 114
## 4 B1C2 Mephitis 8 114
## 5 B1C2 Venado 7 114
## 6 B1C2 Zorra 13 114
Finalmente, debemos guardar el objeto nuevo para posteriormente utilizarlo en el paquete RAI
, como:
write.csv(wildlife.data, "wildlife.data.csv")
RAI
Una vez preparados los datos y de acuerdo a las instrucciones detalladas en el Capítulo 8 del libro “Fototrampeo en R: Vol.I”, se puede calcular el IAR primero cargando el paquete y los datos como:
source("pkgRAI_1.R")
wildlife.data <- read.csv("wildlife.data.csv", header = T)
IAR clásico, es decir el que se calcula agrupando toda la información de las cámaras por especie, se obtiene con la función RAIgral()
como:
RAIgral <- (n/days)*100
La cual genera en automático la siguiente tabla con los datos específicos para cada especie, incluido la estimación del IAR y de la ocupación naive:
## cameras days n RAIgral OccNaive
## Spilogale 3 302 9 2.98 1
## Lince 11 1060 52 4.91 1
## Conepatus 8 718 48 6.69 1
## Coyote 3 299 13 4.35 1
## Venado 5 524 30 5.73 1
## Tlacuache 1 99 1 1.01 1
## Mephitis 6 616 17 2.76 1
## Conejo 6 641 176 27.46 1
## Pecari 1 111 1 0.90 1
## Mapache 1 111 1 0.90 1
## Zorra 10 952 300 31.51 1
Conviene guardar esta tabla como:
write.csv(table1, "Tabla_IARgral.csv")
Observe que en esta tabla además se presenta lo que se conoce como ocupación naive (OccNaive
) la cual simplemente se refiere a la proporción de sitios (cámaras) donde aparece al menos una vez la especie.
También se puede calcular el IAR alternativo, es decir el que considera el número de registros de cada especie por cámara, con la función RAIalt()
el cual genera la siguiente tabla la cual difiere de la previa respecto a que en este caso se calcula el IAR para para cada especie en cada cámara. Por ejemplo, a continuación se presentan los primeros 25 renglones (de un total de 68), se obtiene:
## Camera Species Events Effort RAIalt
## 1 B1C1 <NA> NA 25 NA
## 2 B1C2 Conejo 2 114 1.75
## 3 B1C2 Lince 3 114 2.63
## 4 B1C2 Mephitis 8 114 7.02
## 5 B1C2 Venado 7 114 6.14
## 6 B1C2 Zorra 13 114 11.40
## 7 B1C3 Conejo 15 114 13.16
## 8 B1C3 Lince 2 114 1.75
## 9 B1C3 Venado 4 114 3.51
## 10 B1C3 Zorra 29 114 25.44
## 11 B1C4 Lince 4 114 3.51
## 12 B1C4 Mephitis 1 114 0.88
## 13 B1C4 Venado 7 114 6.14
## 14 B1C4 Zorra 51 114 44.74
## 15 B1C5 Conepatus 10 93 10.75
## 16 B1C5 Lince 2 93 2.15
## 17 B1C5 Venado 8 93 8.60
## 18 B1C5 Zorra 80 93 86.02
## 19 B1C6 Conepatus 16 89 17.98
## 20 B1C6 Lince 7 89 7.87
## 21 B1C6 Mephitis 5 89 5.62
## 22 B1C6 Venado 4 89 4.49
## 23 B1C6 Zorra 63 89 70.79
## 24 B2C1 Conepatus 5 108 4.63
## 25 B2C1 Coyote 5 108 4.63
Nuevamente, se sugiere guardar la tabla como:
write.csv(table2, "Tabla_IARalt.csv")
En la Figura 1 se presenta la estimación del IAR para cada especie en formato bloxplot. Observe que con el procedimiento alternativo de calcular el IAR para cada especie por cámara, se puede generar intervalos de confianza sobre la estimación del IAR. En ese sentido, el paquete RAI
tiene otras funciones para probar y graficar las posibles diferencias estadísticas del IAR entre especies.
Figura 1. Gráfico del índice de abundancia relativa (RAI) para cada especie a partir de la estimación del IAR por especie en cada cámara.
Es muy común calcular el IAR e interpretarlo de manera simple considerando que a mayor valor del índice la especie será más abundante. En sentido estricto, esta interpretación es incorrecta pues se basa en el supuesto de que la probabilidad de detección es la misma para todas las especies, o bien para la misma especie en diferente época del año, hábitats, sexo, edad u otro). Por tal motivo, los IAR se deben nombrar como tasa de captura de fotos, no como índice de abundancia.
Afortunadamente, alternativo al IAR existen otras aproximaciones las cuales consideran simultáneamente los datos de conteo (tasa de captura de fotos) calibrados por la probabilidad de detección. Los más populares y recientes son los modelos de ocupación, modelos N-mixtos y el modelo de Royle-Nichols (Kéry y Royle 2015). Además si simultáneamente se obtiene otra información para cada avistamiento, como por ejemplo la distancia, se pueden emplear los métodos y modelos de distancia (para cámaras trampa se están desarrollando algunos modelos) (Howe et al. 2017). Otra variable asociada al avistamiento (o foto) es la identidad del individuo para aquellas especies donde esto es posible y entonces se pueden emplear modelos de captura-recaptura (Royle et al. 2014). Es decir, con las cámaras-trampa se obtiene información que puede ser analizada de una manera más robusta para calcular el tamaño poblacional, más allá del simple y sesgado IAR.
En esta viñeta se describe un procedimiento sencillo para preparar la base de datos empleando el paquete camtrapR
y luego calcular el índice de abundancia relativo (IAR) con el paquete RAI
. Sin embargo, es conveniente comentar que un procedimiento distinto al aquí presentado, es a partir de una base generada con el programa Wild.ID
descrito por Rovero y Spitale (2016). En cualquier caso, se sugiere consultar las viñetas y actualizaciones de camtrapR
y Wild.ID
. Una descripción general y sencilla de éstos, se puede consultar en los capítulos 3 y 4 en “Fototrampeo en R: Vol.I”.
Kéry, M., and J. A. Royle. 2015. Applied Hierarchical Modeling in Ecology: Analysis of Distribution, Abundance and Species Richness in R and Bugs: Volume 1: Prelude and Static Models. Academic Press.
Howe, E.J., S.T. Buckland, M.-L. Despres-Einspenner, and H.S. Kuhl. 2017. Distance sampling with camera traps. Methods in Ecology and Evolution, doi: 10.1111/2041-210X.12790
Mandujano, S. 2019. Índice de abundancia relativa: RAI. Pp. 131-144, in: S. Mandujano & L. A. Pérez-Solano (eds.), Foto-trampeo en R: Organización y análisis de datos, Volumen I. Instituto de Ecología A. C., Xalapa, Ver., México.
Niedballa, J., R. Sollmann, A. Courtiol, and A. Wilting. 2016. CamtrapR: An R Package for Efficient Camera Trap Data Management. Methods in Ecology and Evolution 7(12): 1457–62.
O’Brien, T. G. 2011. Abundance, density and relative abundance: a conceptual framework. Pages 71–96, Camera Traps in Animal Ecology, Springer.
Rovero, F., and Spitale, D. 2016. Presence/absence and species inventory. Pp. xx-xx, in Rovero, F. & Zimmermann, F. (eds.), Camera Trapping for Wildlife Research. Pelagic Publishing, Exeter, UK.
Royle, J. A., R.B. Chandler, R. Sollmann and B. Gardner. 2014. Spatial capture-recapture. Elsevier, MA. 577pp.
sessionInfo()
## R version 3.6.0 (2019-04-26)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS Sierra 10.12.6
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] camtrapR_1.1
##
## loaded via a namespace (and not attached):
## [1] Rcpp_1.0.1 highr_0.8 pillar_1.3.1
## [4] compiler_3.6.0 plyr_1.8.4 ritis_0.7.6
## [7] iterators_1.0.10 tools_3.6.0 digest_0.6.18
## [10] tibble_2.1.1 jsonlite_1.6 evaluate_0.13
## [13] nlme_3.1-139 lattice_0.20-38 mgcv_1.8-28
## [16] pkgconfig_2.0.2 rlang_0.4.1 Matrix_1.2-17
## [19] foreach_1.4.4 crul_0.7.4 curl_3.3
## [22] yaml_2.2.0 rgdal_1.4-3 parallel_3.6.0
## [25] xfun_0.6 dplyr_0.8.0.1 secr_3.2.0
## [28] stringr_1.4.0 raster_2.8-19 knitr_1.22
## [31] xml2_1.2.0 tidyselect_0.2.5 grid_3.6.0
## [34] glue_1.3.1 reshape_0.8.8 httpcode_0.2.0
## [37] data.table_1.12.2 R6_2.4.0 solrium_1.0.2
## [40] rmarkdown_1.12 sp_1.3-1 overlap_0.3.2
## [43] purrr_0.3.2 reshape2_1.4.3 magrittr_1.5
## [46] codetools_0.2-16 htmltools_0.3.6 MASS_7.3-51.4
## [49] splines_3.6.0 assertthat_0.2.1 abind_1.4-5
## [52] bold_0.8.6 taxize_0.9.6 ape_5.3
## [55] stringi_1.4.3 crayon_1.3.4 zoo_1.8-5