load( url( "https://webs.um.es/jfcalvo/mbc.RData" ) )
Análisis de datos de individuos marcados
Práctica 4, Métodos en Biología de la Conservación
Máster en Áreas Protegidas, Recursos Naturales y Biodiversidad
Actualizado el 17/11/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 el programa MARK, y en R con el paquete RMark
, para realizar análisis de datos obtenidos en estudios de captura, marcaje y recaptura. Estimaremos inicialmente tasas de supervivencia y probabilidades de captura aplicando el modelo Cormack-Jolly-Seber (CJS). Interpretaremos los resultados de los análisis y sus parámetros, realizaremos pruebas de bondad de ajuste, examinaremos la tabla de selección de modelos y estimaremos parámetros por model averaging. En segundo lugar, aplicaremos modelos para la estimación de abundancia a partir de datos de captura-recaptura (POPAN). Finalmente realizaremos análisis known-fate para estimar tasas de supervivencia con datos procedentes de un estudio de radio-seguimiento, y un ejemplo de análisis de modelos multi-state (multistrata).
2. Desarrollo de la sesión
(A) Preparación
En primer lugar, descargaremos en nuestro ordenador varios archivos necesarios para el desarrollo de la práctica accediendo con un navegador de internet a https://webs.um.es/jfcalvo/mbcp4.zip. Debemos descargar este archivo y a continuación descomprimir la carpeta que contiene, por ejemplo, en el Escritorio de Windows. A continuación, ejecutaremos el programa MARK, que podemos descargar desde http://www.phidot.org/software/mark/downloads/.
Abriremos también R y cargaremos el archivo de datos y funciones de la asignatura (mbc.RData
) accediendo al servidor con la siguiente función:
Usando ls()
podemos ver los objetos cargados. Utiliza la función info
para obtener información sobre ellos; por ejemplo: info( "dipper" )
o info( "bubo" )
. Teclea info()
para más información.
Para el desarrollo de la práctica necesitaremos el paquete RMark
. Si no tenemos instalado el paquete RMark
ejecutaremos:
install.packages( "RMark" )
Una vez instalado, lo cargaremos en memoria:
library( RMark )
Hay que tener en cuenta que el uso del paquete RMark
requiere tener instalado el programa MARK en el ordenador. Por ejemplo, en Windows se asume que está instalado en directorio “C:\Program Files (x86)\MARK\”. Si no es así, habría que especificarlo con la función MarkPath
. Por ejemplo, en el caso de las aulas informáticas de la Universidad de Murcia:
= "P:/Mark_9/" MarkPath
(B) Ejemplo del mirlo acuático en MARK (modelo CJS)
Trabajaremos inicialmente en MARK con los datos de ejemplo del mirlo-acuático europeo (Cinclus cinclus), consistentes en las historias de captura-recaptura de 294 individuos de esta especie durante siete años en Francia. Como covariable figura el sexo del individuo y, además, se considera la covariable flood, asociada a variaciones climáticas en los diferentes años del estudio: los años 2 y 3 con inundación en la época de reproducción (flood = 1
) y el resto de los años sin inundaciones (flood = 0
). Estos datos de ejemplo, que se proporcionan con la descarga e instalación del programa MARK, están disponibles en el archivo DIPPER.INP
.
Aplicaremos modelos CJS utilizando la codificación “Design Matrix”. Ejecutaremos de forma automática todos los modelos predefinidos (25 en total), incluyendo las interacciones entre g y t (g*t
). La letra g representa a los grupos (sexo) y la t al tiempo (años). Comprobaremos que el modelo nulo {Phi(.)p(.)}
es el mejor modelo, aunque los modelos {Phi(.)p(g)}
y {Phi(g)p(.)}
pueden considerarse modelos alternativos.
(C) Ejemplo del mirlo acuático en R (modelo CJS)
Los datos del mirlo acuático forman parte del paquete RMark
, y están disponibles en el objeto dipper
:
dipper
Ejecutaremos diversos modelos CJS y comprobaremos que los resultados coinciden con los ejecutados en MARK. Por ejemplo:
<- list( formula = ~ 1 )
Phi <- list( formula = ~ 1 )
p
<- mark( dipper, group = "sex", model = "CJS", model.parameters = list( Phi = Phi, p = p ) )
m1 $results$real m1
<- list( formula = ~ sex * time )
Phi <- list( formula = ~ sex )
p
<- mark( dipper, group = "sex", model = "CJS", model.parameters = list( Phi = Phi, p = p ) )
m2 $results$real m2
La tabla de selección de modelos y el model averaging los obtenemos con:
collect.models()
model.average( collect.models(), parameter = "Phi", vcv = TRUE )$estimates
model.average( collect.models(), parameter = "p", vcv = TRUE )$estimates
(D) Estimación de la abundancia (modelo POPAN)
Con los mismos datos del mirlo-acuático utilizaremos ahora el modelo POPAN para obtener estimas de abundancia. Seguiremos trabajando en R, ya que el diseño de este tipo de análisis en MARK resulta más complicado. Con un modelo POPAN, además de las tasas de supervivencia y las probabilidades de captura, estimamos las probabilidades de entrada (\(b_i\)) de individuos en la población (pent
en RMark) y el tamaño de la “superpoblación” (\(N\)). En el caso del modelo nulo (parámetros constantes):
<- list( formula = ~ 1 )
Phi <- list( formula = ~ 1 )
p <- list( formula = ~ 1 )
pent <- list( formula = ~ 1 )
N
<- mark( dipper, model = "POPAN", model.parameters = list( Phi = Phi, p = p, pent = pent, N = N ) )
mp1 $results$real
mp1$results$derived$"N Population Size" mp1
Una vez estimados los parámetros del modelo (\(\varphi\), \(p\), \(b\) y \(N\)) se pueden calcular los parámetros derivados: \({\widehat{B}}_{i}\) (reclutamiento: número de individuos que entran en la población –nacimientos e inmigraciones– a tiempo \(i\) ) y \({\widehat{N}}_{i}\) (tamaño de la población a tiempo \(i\) ).
\[{\widehat{b}}_{0} = 1 - \sum_{1}^{k - 1}{\widehat{b}}_{i}\]
\[{\widehat{B}}_{i} = \ \widehat{N}\ {\widehat{b}}_{i}\]
\[{\widehat{N}}_{1} = \ {\widehat{B}}_{0}\] \[{\widehat{N}}_{2} = \ {\widehat{N}}_{1}{\widehat{\varphi}}_{1} + {\widehat{B}}_{1}\] \[...\]
Comprueba, por ejemplo, que el tamaño de la población a tiempo 1 (\({\widehat{N}}_{1}\)) es igual a \(\widehat{N}\ {\widehat{b}}_{0}\):
309.17353 * ( 1 - ( 0.1535493 * 6 ) )
El reclutamiento a tiempo 1 (\({\widehat{B}}_{1}\)) es:
309.17353 * 0.1535493
El tamaño de la población a tiempo 2 (\({\widehat{N}}_{2}\)) es:
24.33326 * 0.5592844 + ( 309.17353 * 0.1535493 )
Prueba otros modelos. Si se quiere utilizar la covariable sexo, debe especificarse con el argumento groups = "sex"
. Por ejemplo:
<- list( formula = ~ sex )
Phi <- list( formula = ~ time )
pent
<- mark( dipper, group = "sex", model = "POPAN", model.parameters = list( Phi = Phi, p = p, pent = pent, N = N ) )
mp2 $results$real
mp2$results$derived$"N Population Size" mp2
Para obtener la tabla de selección de modelos con collect.models()
debemos eliminar los modelos del ejercicio anterior o, alternativamente, usar:
collect.models( lx = c( "mp1", "mp2" ) )
(E) Modelo known-fate en MARK
Volveremos de nuevo a trabajar en MARK para analizar los datos de un estudio de radio-seguimiento de 30 individuos de búho real (Bubo bubo) realizado en la Región de Murcia. Se trata de un seguimiento trimestral entre abril de 2007 y diciembre de 2010 (15 periodos).
Las historias de encuentros corresponden a información en la que se anota el estatus del animal al principio y al final del intervalo (vivo-muerto). Como covariables figuran: (1) el sexo de cada individuo (no en grupos), codificado como 1 para las hembras y como 0 para los machos; (2) la localización del territorio del individuo (dentro o fuera de un área protegida); y (3), la longitud del antebrazo del individuo (en milímetros). Los datos están disponibles en el archivo bubo.inp
.
(F) Análisis known-fate en R
Los datos de radio-seguimiento del búho real están disponibles en el objeto bubo del archivo mbc.RData:
bubo
A continuación, ejecutaremos los modelos:
<- list( formula = ~ sex )
S <- mark( bubo, model = "Known", model.parameters = list( S = S ) )
mb1 covariate.predictions( mb1, data = bubo, indices = 1 )$estimates
<- list( formula = ~ inPA )
S <- mark( bubo, model = "Known", model.parameters = list( S = S ) )
mb2 covariate.predictions( mb2, data = bubo, indices = 1 )$estimates
collect.models( lx = c( "mb1", "mb2" ) )
covariate.predictions( collect.models( lx = c( "mb1", "mb2" ) ), data = bubo, indices = 1 )$estimates
(G) Análisis multi-state (multistrata) en R
Ejemplo de análisis con datos simulados (mstrata
) disponibles el paquete RMark:
data( mstrata )
mstrata
<- list( formula = ~ 1 )
S <- list( formula = ~ 1 )
p <- list( formula = ~ 1 )
Psi
<- mark( mstrata, model = "Multistrata", model.parameters = list( S = S, p = p, Psi = Psi ) )
mm1 $results$real mm1
<- list( formula = ~ stratum )
S <- list( formula = ~ stratum)
p <- list( formula = ~ 1 + stratum:tostratum )
Psi
<- mark( mstrata, model = "Multistrata", model.parameters = list( S = S, p = p, Psi = Psi ) )
mm2 $results$real mm2
collect.models( lx = c( "mm1", "mm2" ) )
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.
Cooch EG, White GC (Eds.) (2019) Program MARK. A gentle introduction. 19th edition. http://www.phidot.org/software/mark/docs/book/
Descripción de los datos
Utiliza la función info
. Por ejemplo: info("dipper")
o info("bubo")
.