load( url( "https://webs.um.es/jfcalvo/mbc.RData" ) )
Análisis de datos de abundancia
Práctica 3, Métodos en Biología de la Conservación
Máster en Áreas Protegidas, Recursos Naturales y Biodiversidad
Actualizado el 28/10/2023
Profesor: José Francisco Calvo Sendín
Área de Ecología, Facultad de Biología, Universidad de Murcia
jfcalvo@um.es | https:/webs.um.es/jfcalvo
1. Introducción y objetivos
En esta práctica trabajaremos con los paquetes Distance
y unmarked
de R para el análisis de modelos que proporcionan estimaciones de abundancia. Analizaremos inicialmente datos procedentes de muestreos con medidas de distancia a los individuos observados, estimando densidades mediante el ajuste de las observaciones a modelos con diferentes funciones y métodos de expansión en serie. Diseñaremos los modelos, seleccionaremos los mejores e interpretaremos cuantitativamente sus resultados. Finalmente utilizaremos modelos para la estimación de densidades a partir de datos de conteos.
2. Desarrollo de la sesión
(A) Preparación
Una vez iniciado R debemos cargar el archivo de datos y funciones de la asignatura (mbc.RData
) accediendo al servidor con la siguiente función:
Con la función ls()
podemos ver los datos y funciones disponibles en mbc.RData
. Teclea info()
para más información.
Necesitaremos los paquetes Distance
y unmarked
. Si no los tenemos instalados ejecutaremos:
install.packages( c( "Distance", "unmarked" ) )
Una vez instalados los cargaremos en memoria:
library( Distance )
library( unmarked )
(B) Ejemplo del argos real
Trabajaremos inicialmente con los datos de un muestreo de distancia del argos real (Argusianus argus) en Sumatra, que están disponibles en el sitio web acompañante del libro de Conroy et al. (2009). Se trata de un muestreo de 144 transectos lineales de 2200 m de longitud (considerado un ancho de banda del doble de la distancia máxima observada) en un área de estudio de 800 ha. Examinaremos en primer lugar la estructura y características de los datos:
argus
Para realizar los análisis utilizaremos la función ds
del paquete Distance
. Por defecto, esta función realiza ajustes para transectos lineales (argumento transect = "line"
), pero puede utilizarse también para muestreos puntuales (argumento transect = "point"
). Las funciones disponibles son: uniforme (key = "unif"
), seminormal (key = "hn"
) y tasa de riesgo (key = "hr"
). Los métodos de expansión en serie disponibles son: coseno (adjustment = "cos"
), polinomial simple (adjustment = "pol"
) y polinomial de Hermite (adjustment = "her"
). Ejecutaremos diversos modelos con varias de las combinaciones posibles. Por ejemplo:
ds( argus, key = "unif", adjustment = "cos" ) -> munc
ds( argus, key = "hn", adjustment = "her" ) -> mhnh
ds( argus, key = "hr", adjustment = "pol" ) -> mhrp
La selección de modelos podemos realizarla con la función summarize_ds_models
:
summarize_ds_models( munc, mhnh, mhrp, output = "plain" )
Interpretaremos los resultados del mejor modelo, teniendo en cuenta la superficie total del área de estudio considerada (800 ha).
summary( mhrp )
También se pueden realizar representaciones gráficas de las funciones de detección de los modelos:
plot( mhrp )
La función ds
permite incorporar covariables para modelar la detectabilidad, pero el paquete Distance
no dispone de una función para realizar model averaging. No obstante, las estimaciones de model averaging podemos realizarlas en R calculando previamente los pesos de Akaike de acuerdo con la ecuación:
\[w_{i} = \frac{e^{- 0.5\ \Delta\text{AIC}_{i}}}{\sum_{}^{}e^{- 0.5\ \Delta\text{AIC}_{i}}}\] Por ejemplo, para las densidades (individuos por hectárea) estimadas por los tres modelos propuestos anteriormente:
c( 0.09858896, 0.01844645, 0.01552881 ) -> densidades
c( 0, 14.02976, 16.57292 ) -> deltas
exp( -0.5 * deltas ) / sum( exp( -0.5 * deltas ) ) -> w
sum( densidades * w )
En el libro de Conroy et al. (2009) puede consultarse el método para obtener los intervalos de confianza de las estimaciones calculadas por model averaging.
(C) Modelos de distancia con unmarked
La función de unmarked
que realiza este tipo análisis es distsamp
. Esta función permite estimar la función exponencial negativa y analizar el efecto de covariables de sitio, pero requiere datos agrupados en intervalos de distancia. Analizaremos unos datos de ejemplo correspondientes a una especie de córvido, la chara de Santa Cruz (Island Scrub-jay, Aphelocoma insularis), endémica de la Isla de Santa Cruz (California). Se trata de observaciones agrupadas en tres intervalos de distancia en 307 estaciones de censo (point transects). Los datos están incluidos como ejemplo en el paquete unmarked
.
head( issj )
Para su análisis deben ser transformados en un objeto de la clase unmarkedFrameDS
:
<- unmarkedFrameDS( y = as.matrix( issj[ , 1:3 ] ), siteCovs = data.frame (issj[ , 6:8 ] ), dist.breaks = c( 0, 100, 200, 300), unitsIn = "m", survey = "point" ) issjUF
La función distsamp
no tiene opciones para diferentes métodos de expansión en serie porque utiliza un método de estimación distinto al del paquete Distance
. Por lo que respecta a la key function, por defecto utiliza el argumento keyfun= "halfnorm"
, pero también podemos usar "hazard"
, "exp"
o "uniform"
.
distsamp( ~ 1 ~ 1, data = issjUF ) -> mdu1
summary( mdu1 )
distsamp( ~ chaparral ~ 1, data = issjUF ) -> mdu2
summary( mdu2 )
distsamp( ~ chaparral ~ chaparral, data = issjUF ) -> mdu3
summary( mdu3 )
La tabla de selección de modelos la obtenemos con:
modSel( fitList( mdu1, mdu2, mdu3 ) )
Y el model averaging lo realizamos con:
head( predict( fitList( mdu1, mdu2, mdu3 ), "state" ) )
Representaremos ahora gráficamente el resultado del modelo 3, en el que tanto la densidad como la probabilidad de detección dependen de la superficie de la covariable chaparral
:
plot( issj$chaparral, exp( -3.85 + 3.90 * issj$chaparral ) )
Alternativamente, con el intervalo de confianza al 95%:
plot( sort( issj$chaparral ), predict( mdu3, type = "state" )[ order ( issj$chaparral ), 1 ], type = "l", ylab = "densidad" )
lines( sort( issj$chaparral ), predict( mdu3, type = "state" )[ order ( issj$chaparral ), 3 ], col = 2 )
lines( sort( issj$chaparral ), predict( mdu3, type = "state" )[ order ( issj$chaparral ), 4 ], col = 2 )
(D) Estimación de abundancia a partir de conteos
Realizaremos los análisis con datos de un muestreo de carbonero común (Parus major) consistente en 3 conteos repetidos en 263 cuadrículas de 1 km2 realizados en Suiza en 2013. Estos datos proceden de un archivo que puede descargarse de la web de ejercicios del libro de Kéry y Royle (2016), en el que se recogen más especies y más años de conteos. Para nuestra práctica, los datos seleccionados (carbonero común en 2013) están disponibles en el objeto tits
del archivo mbc.RData
.
head( tits )
Una vez adaptados al formato correspondiente del paquete unmarked
los analizaremos utilizando la función pcount
.
<- unmarkedFramePCount( y = tits[ , 1:3 ], siteCovs = data.frame( elevation = tits[ , 4 ] ) )
titsUF
pcount( ~ 1 ~ elevation, data = titsUF ) -> mpc1
summary( mpc1 )
plot( sort( tits$elevation ), predict( mpc1, type = "state" )[ order( tits$elevation), 1 ], type = "l" )
lines( sort( tits$elevation ), predict( mpc1, type = "state" )[ order( tits$elevation ), 3 ], col = 2 )
lines( sort( tits$elevation ), predict( mpc1, type = "state" )[ order( tits$elevation ), 4 ], col = 2 )
3. Evaluación
Realiza la tarea de evaluación de la práctica publicada en el Aula Virtual.
4. Bibliografía
Conroy MJ, Carroll JP (2009) Quantitative conservation of vertebrates. Wiley-Blackwell, Oxford.
Kéry M, Royle AJ (2016) Applied Hierarchical Modeling in Ecology. Volume 1. Elsevier, Amsterdam.
Zuberogoitia I et al. (2020) Maximizing detection probability for effective large-scale nocturnal bird monitoring. Diversity and Distributions, 26: 1034-1050.
Zuberogoitia I et al. (2020b) Maximizing detection probability for effective large-scale nocturnal bird monitoring. Dryad Digital Repository: https://doi.org/10.5061/dryad.dncjsxkwg
Descripción de los datos
Utiliza la función info
. Por ejemplo: info("strix")
.