La investigación bioacústica se basa en cuantificar la estructura de las señales acústicas y en comparar esa estructura entre diferentes contextos conductuales/sociales/ecológicos, grupos o especies. Sin embargo, medir la estructura de la señal de una manera que tenga en cuenta la variación de las señales podría ser una tarea difícil. Algunas de las diferencias que son evidentes por inspección visual de los espectrogramas pueden no ser detectadas por algunos análisis. Por lo tanto, elegir el enfoque analítico más apropiado es un paso crítico.

La función compare.methods() de warbleR intenta facilitar la selección del método. Esta función produce gráficos (como archivos de imagen en el directorio de trabajo) con espectrogramas de 4 señales a la vez, que permiten la inspección visual del desempeño de los métodos de análisis acústico al comparar esas señales. Las señales se escogen aleatoriamente del cuadro de datos o cuadro de selección proporcionado (argumento ‘X’). La función compara 2 métodos a la vez. Los métodos disponibles son:

  • Correlación cruzada (usando la función xcorr() de warbleR)
  • Distorsión dinámica de tiempo (DTW) en series de tiempo de frecuencia dominante (usandodfDTW()) y de frecuencia fundamental (usando ffDTW())
  • Parámetros espectrales (usandospecan())
  • Descriptores de coeficientes ceptrales (usando mfcc_stats())

Los gráficos también contienen 2 diagramas de dispersión (1 para cada método) del espacio acústico de todas las señales en el cuadro de datos de entrada ‘X’. La posición de las 4 señales en los espectrogramas se resalta en el diagrama de dispersión del espacio acústico. De esta manera, los usuarios pueden evaluar directamente si las distancias entre las señales en el espacio acústico representan con precisión la similitud espectrográfica (i.e. qué tan similar se ve su estructura en los espectrogramas).

Comparar métodos en warbleR

Este es un breve ejemplo de cómo usar la función usando los archivos de datos incluidos en el paquete (y en la carpeta ejemplos). Simplemente se ejecuta la función seleccionando los 2 métodos que desea comparar. El siguiente código compara la correlación cruzada (XCORR) y la distorsión de tiempo dinámica en los contornos de frecuencia dominantes (dfDTW). Las selecciones comparadas se seleccionan aleatoriamente del conjunto de selecciones en el marco de datos de entrada. El argumento ‘n’ define el número de comparaciones (es decir, gráficas) que deben realizarse:

library(warbleR)

data("lbh_selec_table")

# parametros globales
warbleR_options(wav.path = "PONER RUTA A 'ejemplos' AQUI", flim = c(0, 10), bp = c(0, 10), wl = 300, n = 12)

compare.methods(X = lbh_selec_table, methods = c("XCORR", "dfDTW"))

 

Debe producir 12 archivos de imagen (en el directorio de trabajo) que se parecen a este:

 

Al observar varias iteraciones de la comparación se puede tener una mejor idea de cual método funciona mejor para las señales que se están analizando:

 

 

La distancia del par acústico entre las señales se muestra junto a las flechas que las vinculan. El color de fuente de un valor de distancia corresponde al color de fuente del método que lo generó, como se muestra en los diagramas de dispersión (en este caso, la fuente negra representa las distancias XCORR). Las distancias son estandarizadas, siendo 0 la distancia de una señal a sí misma y 1 la distancia por pares más alejada en el conjunto de señales. El análisis de componentes principales (función prcomp()) se aplica para calcular distancias cuando se usan parámetros espectrales (SP). En ese caso se utilizan los 2 primeros componentes. El escalamiento multidimensional clásico (“multidimensional scaling”, también conocido como análisis de coordenadas principales, función cmdscale()) se usa para todos los demás métodos. El nombre del archivo contiene los métodos que se comparan y el número de fila de las selecciones. Esta función utiliza internamente una versión modificada de la función spectro() del paquete seewave para crear espectrogramas. Tenga en cuenta que todos los espectrogramas se grafican con la mismo escala de frecuencia y tiempo.

compare.methods(X = lbh_selec_table, methods = c("XCORR", "SP"))

 

Comparar medidas personalizadas

Alternativamente, puede proporcionar sus propios datos. Esto podría ser útil para eliminar parámetros no deseados o para ingresar parámetros obtenidos con otros programas (por ejemplo, de Raven). Para hacerlo, ingrese sus datos con el argumento sp. “SP” debe incluirse como método en el argumento ‘métodos’. El siguiente ejemplo 1) calcula los parámetros espectrales con la función specan(), 2) selecciona solo las primeras 7 columnas de la salida, y 3) ingresa estos datos encompare.methods():

sp <- specan(selec.table)

sp <- sp[, 1:7]

compare.methods(X = selec.table, methods = c("dfDTW", "SP"))

 

La función tiene muchos otros argumentos para especificar métodos (por ejemplo, filtros de banda, superposición) y configuraciones del espectrograma (por ejemplo, margen, cuadrícula, límites de frecuencia).

 

  • ¿Cómo puedo aumentar el traslape entre ventanas de tiempo?

  • Use la función compare.methods() para comparar los descriptores de coeficientes cepstrales (“MFCC”) contra correlación-cruzada (“XCORR”), distorsión dinámica de tiempo de frecuencia dominante (“dfDTW”), parámetros espectrales (“SP”).

  • ¿Cuál método representa mejor la variación en la estructura de las señales?

  • Utilice la función sobre los datos de su proyecto

 

Información de la sesión

## R version 3.5.3 (2019-03-11)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.2 LTS
## 
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=es_CR.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=es_CR.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=es_CR.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=es_CR.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.1         knitr_1.22         magrittr_1.5      
##  [4] Sim.DiffProc_4.3   MASS_7.3-51.1      maps_3.3.0        
##  [7] NatureSounds_1.0.1 Deriv_3.8.5        rjson_0.2.20      
## [10] jpeg_0.1-8         pbapply_1.4-0      stringr_1.4.0     
## [13] warbleR_1.1.16     tools_3.5.3        parallel_3.5.3    
## [16] xfun_0.6           dtw_1.20-1         htmltools_0.3.6   
## [19] iterators_1.0.10   yaml_2.2.0         digest_0.6.18     
## [22] soundgen_1.4.0     tuneR_1.3.3        bitops_1.0-6      
## [25] RCurl_1.95-4.12    signal_0.7-6       seewave_2.1.3     
## [28] evaluate_0.13      rmarkdown_1.12     pracma_2.2.5      
## [31] proxy_0.4-23       stringi_1.4.3      compiler_3.5.3    
## [34] fftw_1.0-5