Objetivo
En este artículo se presentan los pasos principales para editar la base de datos fotográfica obtenida con las cámaras-trampa. El código del presente ejemplo está basado en el capítulo de Rovero y Spitale (2016). Para ejemplificar, se emplean una base de datos de foto-trampeo obtenidos en una localidad de la Reserva de Biósfera Tehuacán-Cuicatlán.
Paquete R
TEAM library 1.7.R
por TEAM Network (2009).
Página oficial en:
Introducción
El empleo de cámaras-trampa para obtener diferente información biológica de los animales se ha aplicado desde hace algunas décadas pero actualmente está en auge debido al desarrollo tecnológico y a la reducción de costos.
Con el foto-trampeo se puede obtener mucha información en poco tiempo y con poco personal, lo que hace que sea un método muy atractivo para monitoreos de fauna a largo plazo en diferentes tipos de hábitat. En particular, el foto-trampeo se ha utilizado para:
- realizar inventarios,
- estimar la abundancia de diferentes especies,
- calcular índices de abundancia relativa,
- estimar la ocupación,
- evaluar el uso de hábitat,
- conocer patrones de actividad,
- entre las principales aplicaciones.
Preparación de datos
PASO 1: Se deben cargar las siguientes paqueterias previamente instaladas en R:
library(chron)
library(reshape)
library (vegan)
library(plotrix)
library(ggplot2)
library(maptools)
Luego se debe cargar el siguiente recurso el cual debe estar guardado previamente en la carpeta en el mismo proyecto en RStudio
:
source("TEAM library 1.7.R")
PASO 2: Se pueden cargar datos generados previamente en camtrapR
, en Wild.ID
, Excel
u otro.
Por ejemplo:
datos <- read.csv(file="mamiferos.csv", sep= ",",h= T, stringsAsFactors= F)
Tabla 1. Se pueden observar los primeros 20 datos como (si se quieren ver todos los datos se podr´ía ejecutar la función View()
:
Sampling.Unit.Name | Latitude | Longitude | Sampling.Event | Photo.Date | Photo.Time | Genus | Species | Number.of.Animals | Camera.Start.Date.and.Time | Camera.End.Date.and.Time |
---|---|---|---|---|---|---|---|---|---|---|
C1 | 477801 | 1720489 | 2015 | 2015/08/27 | 04:12:00 | Philander | opossum | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/08/28 | 21:33:00 | Didelphis | marsupialis | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/08/29 | 22:06:00 | Philander | opossum | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/08/30 | 20:54:00 | Procyon | lotor | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/08/31 | 06:09:00 | Puma | yagouaroundi | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/01 | 18:15:00 | Puma | yagouaroundi | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/02 | 22:00:00 | Procyon | lotor | 3 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/03 | 20:41:00 | Didelphis | marsupialis | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/04 | 03:59:00 | Conepatus | leuconotus | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/05 | 05:12:00 | Conepatus | leuconotus | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/06 | 20:47:00 | Philander | opossum | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/07 | 00:48:00 | Didelphis | marsupialis | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/08 | 20:49:00 | Philander | opossum | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/09 | 22:18:00 | Philander | opossum | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/10 | 22:21:00 | Philander | opossum | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/11 | 14:53:00 | Nasua | narica | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/12 | 01:56:00 | Philander | opossum | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/13 | 01:55:00 | Conepatus | leuconotus | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/14 | 20:21:00 | Procyon | lotor | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
C1 | 477801 | 1720489 | 2015 | 2015/09/15 | 04:19:00 | Conepatus | leuconotus | 1 | 2015/08/26 12:35:00 | 2015/12/04 08:55:00 |
El formato de fecha debe ser “año/mes/dia” y la hora “hora:minuto:segundo”
NOTA: Al abrir la base en Excel, se modifica en automático el formato
datos <- fix.dta(datos) # fijar formato de datos
PASO 3: Se emplean las siguientes funciones para editar la base.
Por ejemplo, si en las fotos aparecieron personas o animales domésticos y se quieren eliminar de los análisis, se puede emplear la siguiente función:
datos <- droplevels(datos[datos$bin!="Homo sapiens", ])
Por ejemplo, si la base de datos contiene varios años y solo se quiere analizar uno en particular, por ejemplo el 2015, se pueden seleccionar con la siguiente función:
datos2015 <- datos[datos$Sampling.Event =="2015",]
Si se quiere ver la identidad o nombre de las cámaras:
unique(datos2015$Sampling.Unit.Name)
## [1] "C1" "C2" "C3" "C4" "C5"
Si se quiere ver las especies de animales que aparecieron en las cámaras:
unique(datos2015$bin)
## [1] Philander opossum Didelphis marsupialis
## [3] Procyon lotor Puma yagouaroundi
## [5] Conepatus leuconotus Nasua narica
## [7] Canis latrans Dasypus novemcinctus
## [9] Tamandua mexicana Urocyon cinereoargenteus
## [11] Cuniculus paca Panthera onca
## 12 Levels: Canis latrans Conepatus leuconotus ... Urocyon cinereoargenteus
Si se quiere ver las fechas de inicio de actividad de las cámaras:
unique(datos2015$Camera.Start.Date.and.Time)
## [1] (15-08-26 12:35:00) (15-10-12 09:33:00) (15-08-25 11:15:00)
## [4] (15-10-10 11:19:00) (15-08-25 12:07:00)
PASO 4: Es muy útil calcular el número de días cámaras:
dias_camara <- cam.days(datos,2015)
summary(dias_camara[,2:4])
## Start.Date End.Date ndays
## Min. :2015-08-25 Min. :2015-12-03 Min. : 80.0
## 1st Qu.:2015-08-25 1st Qu.:2015-12-04 1st Qu.:100.0
## Median :2015-08-26 Median :2015-12-31 Median :100.0
## Mean :2015-09-13 Mean :2016-01-27 Mean :136.4
## 3rd Qu.:2015-10-10 3rd Qu.:2016-04-05 3rd Qu.:178.0
## Max. :2015-10-12 Max. :2016-04-05 Max. :224.0
Tabla 2. Datos con fechas de inicio y finalización del muestreo con cada cámara-trampa, y número de días que estuvieron trabajando. Frecuentemente se refiere a esto como “Días/cámara” o “Noches/trampa”.
Sampling.Unit.Name | Start.Date | End.Date | ndays | |
---|---|---|---|---|
1 | C1 | 2015-08-26 | 2015-12-04 | 100 |
103 | C2 | 2015-10-12 | 2015-12-31 | 80 |
145 | C3 | 2015-08-25 | 2016-04-05 | 224 |
177 | C4 | 2015-10-10 | 2016-04-05 | 178 |
229 | C5 | 2015-08-25 | 2015-12-03 | 100 |
PASO 5: Otro dato muy relevante es definir lo que se conoce como “eventos independientes”.
De manera simple, se refiere a la cantidad de tiempo (minutos, horas, días) que se considera debe de haber entre una foto y otra para considerarla como estadísticamente independiente.
Por ejemplo, si se decide que el periodo entre fotos será de 60 min para definirlas como independientes, se puede emplear:
eventos_hh <- event.sp(dtaframe= datos, year= 2015, thresh= 60)
Tabla 3. Número de registros independientes (cada 60 min) para cada una de las especies de mamíferos en cada cámara-trampa durante el 2015.
Sampling.Unit.Name | Canis latrans | Conepatus leuconotus | Cuniculus paca | Dasypus novemcinctus | Didelphis marsupialis | Nasua narica | Panthera onca | Philander opossum | Procyon lotor | Puma yagouaroundi | Tamandua mexicana | Urocyon cinereoargenteus |
---|---|---|---|---|---|---|---|---|---|---|---|---|
C1 | 10 | 11 | 0 | 6 | 7 | 15 | 0 | 14 | 32 | 3 | 2 | 1 |
C2 | 2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 26 | 4 | 0 | 9 |
C3 | 0 | 0 | 3 | 1 | 0 | 11 | 0 | 0 | 16 | 0 | 0 | 0 |
C4 | 0 | 0 | 1 | 5 | 1 | 27 | 2 | 0 | 13 | 2 | 0 | 0 |
C5 | 0 | 0 | 0 | 0 | 0 | 6 | 0 | 0 | 2 | 0 | 0 | 0 |
Pero si la independencia se define como las fotos tomadas en días diferentes (es decir 24 h o 1440 min), entonces:
eventos_dd <- event.sp(dtaframe= datos, year= 2015, thresh= 1440)
Tabla 4. Número de registros independientes (cada 24 h o 1440 min) para cada una de las especies de mamíferos en cada cámara-trampa durante el 2015.
Sampling.Unit.Name | Canis latrans | Conepatus leuconotus | Cuniculus paca | Dasypus novemcinctus | Didelphis marsupialis | Nasua narica | Panthera onca | Philander opossum | Procyon lotor | Puma yagouaroundi | Tamandua mexicana | Urocyon cinereoargenteus |
---|---|---|---|---|---|---|---|---|---|---|---|---|
C1 | 10 | 11 | 0 | 6 | 7 | 15 | 0 | 14 | 32 | 3 | 2 | 1 |
C2 | 2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 26 | 4 | 0 | 9 |
C3 | 0 | 0 | 3 | 1 | 0 | 11 | 0 | 0 | 16 | 0 | 0 | 0 |
C4 | 0 | 0 | 1 | 5 | 1 | 27 | 2 | 0 | 13 | 2 | 0 | 0 |
C5 | 0 | 0 | 0 | 0 | 0 | 6 | 0 | 0 | 2 | 0 | 0 | 0 |
PASO 6: Para generar los totales por especie
Por ejemplo cada 60 min:
eventos_hh_especies <- colSums(eventos_hh)
Para generar los totales por especie cada 24 h:
eventos_dd_especies <- colSums(eventos_dd)
eventos <- cbind(eventos_hh_especies, eventos_dd_especies)
Tabla 5. Número total de eventos independientes para cada especie. Cada 60 min: “eventos_hh_especies” o cada 24 h: “eventos_dd_especies”.
eventos_hh_especies | eventos_dd_especies | |
---|---|---|
Canis latrans | 12 | 12 |
Conepatus leuconotus | 11 | 11 |
Cuniculus paca | 4 | 4 |
Dasypus novemcinctus | 12 | 12 |
Didelphis marsupialis | 9 | 9 |
Nasua narica | 59 | 59 |
Panthera onca | 2 | 2 |
Philander opossum | 14 | 14 |
Procyon lotor | 89 | 89 |
Puma yagouaroundi | 9 | 9 |
Tamandua mexicana | 2 | 2 |
Urocyon cinereoargenteus | 10 | 10 |
PASO 7: Para calcular el número de eventos independientes pero por cámara-sitio:
camaras <- rowSums(eventos_hh)
Tabla 6. Número total de eventos independientes para cada cámara.
C1 | 101 |
C2 | 42 |
C3 | 31 |
C4 | 51 |
C5 | 8 |
Ejemplos de análisis finales
Cálculo de la ocupación naive
Un estadístico sencillo y muy útil es calcular la proporción de cámaras donde aparece una especie en relación al ltotal de cámaras empleadas. Esta se le conoce coloquialmente como “Ocupación naive”.
datos2015 <- datos[datos$Sampling.Event =="2015",]
mat <- f.matrix.creator(datos2015) # lista de matrices de cámara x días para cada especie
naive_2015 <- naive(mat)
Tabla 7. Estimación de la ocupación naive.
species | naive |
---|---|
Canis latrans | 0.4 |
Conepatus leuconotus | 0.2 |
Cuniculus paca | 0.4 |
Dasypus novemcinctus | 0.6 |
Didelphis marsupialis | 0.4 |
Nasua narica | 0.6 |
Panthera onca | 0.2 |
Philander opossum | 0.2 |
Procyon lotor | 0.8 |
Puma yagouaroundi | 0.6 |
Tamandua mexicana | 0.2 |
Urocyon cinereoargenteus | 0.4 |
Es importante alertar que esta ocupación naive no es la misma que la obtenida en los modelos de ocupación que se emplearán en otro capítulo donde se utilizan paquetes como unmarked
o programas como PRESENCE
. Para estos últimos modelos se considera y estima la probabilidad de detectabilidad.
Curva de acumulación de especies
Otro estadístico son las llamadas curvas de acumulación de especies. Estas nos permiten observar el número de especies que se van registrando en las cámaras en función del esfuerzo de muestreo. Habitualmente el resultado se muestra de manera gráfica para su inspección visual.
acumulacion <- acc.curve(datos,2015)
para graficar:
ggplot(acumulacion, aes(x= Camera.trap.days, y= species)) +
geom_line(aes(y= species-sd), colour= "grey50", linetype= "dotted") +
geom_line(aes(y= species+sd), colour= "grey50", linetype= "dotted") +
theme_bw() +
geom_line()
Patrón de actividad de especies
Los datos del foto-trampeo está permitiendo obtener mucha información detallada acerca de la actividad de las especies. Esta se puede calcular empleando la siguiente función:
actividad_24h <- events.hours(datos2015)
Luego, si se quiere graficar específicamente alguna especie se emplea:
clock <- c(0:23)
clock24.plot(actividad_24h$Canis, clock, show.grid= T, lwd= 2, line.col= "blue", main= "Coyote", cex.lab= 0.5)
## Warning in cos(radial.pos[i, ]) * lengths[i, ]: longitud de objeto mayor no
## es m'ultiplo de la longitud de uno menor
## Warning in sin(radial.pos[i, ]) * lengths[i, ]: longitud de objeto mayor no
## es m'ultiplo de la longitud de uno menor
otra especie:
clock <- c(0:23)
clock24.plot(actividad_24h$Urocyon.cinereoargenteus, clock, show.grid= T, lwd= 2, line.col= "blue", main= "Zorra gris", cex.lab= 0.5)
Conclusiones
El paquete aquí presentado es de gran utilidad para el manejo de la base de datos una vez que ésta fue generada con camtrapR
o Wild.ID
, por jemplo. Este paquete permite la extracción de datos y los prepara para obtener nuevos datos necesarios para diversos cálculos como los que se han mostrado aquí, y otros no mostrados como por ejemplo: calcular el índice de abundancia relativa (IAR) para cada especie; o crear un mapa con los sitios de ubicación de las cámaras y donde aparece cada especie.
Bibliografía
- Rovero, F. y D. Spitale. 2016. Presence/absence and species inventory. Pp. 43-67, in: F. Rovero & F. Zimmermann (eds.), Camera Trapping for Wildlife Research. Pelagic Publishing, UK.
El presente documento fue generado con RMarkdown desde RStudio. Si desea una versión PDF de este documento: