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:

load( url( "https://webs.um.es/jfcalvo/mbc.RData" ) )

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:

MarkPath = "P:/Mark_9/"

(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.

Ejercicio 1
  • Interpretación de interacciones. Examina los resultados del modelo {Phi(g*t)p(.)}. Comprueba en R, por ejemplo, que la tasa de supervivencia de los machos (grupo 1) entre el segundo y tercer año de muestreo se calcula como:
plogis( 0.1110703 + 0.4705237 -0.3170440 -0.4192134 )
  • Realiza el model averaging de la tabla e interpreta los resultados.
  • Estima el parámetro \(\widehat{c}\) (> Tests > Bootstrap GOF), introduce el valor (> Adjustments > c-hat) y comprueba los cambios que se producen en la tabla de selección de modelos.
Ejercicio 2

A partir de la Design Matrix del modelo nulo, diseña y ejecuta los siguientes modelos: {Phi(flood)p(.)}, {Phi(flood+g)p(.)} y {Phi(flood*g)p(.)}. Recuerda que flood = 1 para los años 2 y 3.

(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:

Phi <- list( formula = ~ 1 )
p <- list( formula = ~ 1 )

m1 <- mark( dipper, group = "sex", model = "CJS", model.parameters = list( Phi = Phi, p = p ) )
m1$results$real
Phi <- list( formula = ~ sex * time )
p <- list( formula = ~ sex )

m2 <- mark( dipper, group = "sex", model = "CJS", model.parameters = list( Phi = Phi, p = p ) )
m2$results$real

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):

Phi <- list( formula = ~ 1 )
p <- list( formula = ~ 1 )
pent <- list( formula = ~ 1 )
N <- list( formula = ~ 1 )

mp1 <- mark( dipper, model = "POPAN", model.parameters = list( Phi = Phi, p = p, pent = pent, N = N ) )
mp1$results$real
mp1$results$derived$"N Population Size"

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:

Phi <- list( formula = ~ sex )
pent <- list( formula = ~ time )

mp2 <- 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"

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.

Ejercicio 3

Analiza los factores que influyen en la supervivencia del búho real elaborando inicialmente un conjunto de modelos candidatos en el que deberás considerar las diferentes covariables disponibles. Diseña los modelos y ejecútalos en MARK o, alternativamente, en R (siguiendo el protocolo especificado en la sección F).

(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:

S <- list( formula = ~ sex )
mb1 <- mark( bubo, model = "Known", model.parameters = list( S = S ) )
covariate.predictions( mb1, data = bubo, indices = 1 )$estimates
S <- list( formula = ~ inPA )
mb2 <- mark( bubo, model = "Known", model.parameters = list( S = S ) )
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
S <- list( formula = ~ 1 )
p <- list( formula = ~ 1 )
Psi <- list( formula = ~ 1 )

mm1 <- mark( mstrata, model = "Multistrata", model.parameters = list( S = S, p = p, Psi = Psi ) )
mm1$results$real
S <- list( formula = ~ stratum )
p <- list( formula = ~ stratum)
Psi <- list( formula = ~ 1 + stratum:tostratum )

mm2 <- mark( mstrata, model = "Multistrata", model.parameters = list( S = S, p = p, Psi = Psi ) )
mm2$results$real
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

Descripción de los datos

Utiliza la función info. Por ejemplo: info("dipper") o info("bubo").