Cousteau Consultant Group
Se require lo siguiente:
Recomendación
Si solo se tienen datos de captura e índices de abundancia, se recomienda usar otras plataformas, por ejemplo: SPiCT (Pedersen and Berg 2016), REMA.
Con la nueva extensión de WHAM (Correa et al. 2023), podemos incluir los siguientes tipos de datos por año y flota (pesquerías e índices):
Modelamiento de las siguientes secciones de la dinámica poblacional del stock:
Importante
catch
ó fleet
se refiere a las pesquerías y index
a los índices (e.g., cruceros).my_input = wham::prepare_wham_input(model_name = "Example_1",
basic_info = input_data,
NAA_re = list(), # Recruitment parameters
M = list(), # M parameter
selectivity = list(), # Selectivity parameter
catchability = list(), # Catchability parameter
ecov = list(), # Environmental information
# Crecimiento somatico:
growth = list(), LAA = list(), # Mean length-at-age
LW = list(), # Length-weight relationship
WAA = list(), # Mean weight-at-age
age_comp = "multinomial", # Age composition model
len_comp = "multinomial" # Length composition model
)
Importante
prepare_wham_input
. Si un argumento no es especificado, tomará el valor por defecto.list()
de cada argumento especificamos la información de cada parámetro.Veremos que my_input
tiene 4 principales slots:
Primero calculemos el número de años, edades, y tallas para hacer el resto más sencillo:
# Captura agregada:
input_data$agg_catch = matrix(mis_datos, ncol = input_data$n_fleets, nrow = n_years) # Obs
input_data$catch_cv = matrix(mis_datos, ncol = input_data$n_fleets, nrow = n_years) # Obs error
# Composicion por edades (proporcion)
input_data$catch_paa = array(mis_datos, dim = c(input_data$n_fleets, n_years, n_ages)) # Obs
input_data$catch_Neff = matrix(mis_datos, ncol = input_data$n_fleets, nrow = n_years) # Obs error
# Composicion por tallas (proporcion)
input_data$catch_pal = array(mis_datos, dim = c(input_data$n_fleets, n_years, n_lengths)) # Obs
input_data$catch_NeffL = matrix(mis_datos, ncol = input_data$n_fleets, nrow = n_years) # Obs error
# Conditional age-at-length (CAAL, proporcion)
input_data$catch_caal = array(mis_datos, dim = c(input_data$n_fleets, n_years, n_lengths, n_ages)) # Obs
input_data$catch_caal_Neff = array(mis_datos, dim = c(n_years, input_data$n_fleets, n_lengths)) # Obs error
# Aging error matrix
input_data$catch_aging_error = array(mis_datos, dim = c(input_data$n_fleets, n_ages, n_ages))
Cuidado
No es posible tener captura agregada igual a 0, se sugiere especificar un número pequeño.
Para un viaje de pesca o un lance de un crucero de investigación:
Después de muestrear muchos viajes de pesca o lances en un crucero, se suele construir una clave talla-edad (probabilidad de ser cierta edad dada la talla):
Finalmente, con los datos de la clave talla-edad y composición por talla por viaje o lance, se calcula la composición por edades por viaje o lance. Luego se realiza una expansión para todo el crucero o temporada de pesca.
Conditional age-at-length (CAAL)
CAAL es justamente la información talla-edad (clave talla edad).
El esfuerzo de muestreo se representa con Neff
. Por ejemplo: número de viajes muestreados, o el no. de individuos muestreados por talla (del submuestreo de edades).
# Indice agregado:
input_data$agg_indices = matrix(mis_datos, ncol = input_data$n_indices, nrow = n_years) # Obs
input_data$index_cv = matrix(mis_datos, ncol = input_data$n_indices, nrow = n_years) # Obs error
# Información adicional:
input_data$units_indices = matrix(0L, nrow = n_years, ncol = input_data$n_indices) # 0 = numbers, 1 = biomass
input_data$fracyr_indices = matrix(0.5, ncol = input_data$n_indices, nrow = n_years) # fraccion del year
# Composicion por edades (proporcion)
input_data$index_paa = array(mis_datos, dim = c(input_data$n_indices, n_years, n_ages)) # Obs
input_data$index_Neff = matrix(mis_datos, ncol = input_data$n_indices, nrow = n_years) # Obs error
# Composicion por tallas (proporcion)
input_data$index_pal = array(mis_datos, dim = c(input_data$n_indices, n_years, n_lengths)) # Obs
input_data$index_NeffL = matrix(mis_datos, ncol = input_data$n_indices, nrow = n_years) # Obs error
# Conditional age-at-length (CAAL, proporcion)
input_data$index_caal = array(mis_datos, dim = c(input_data$n_indices, n_years, n_lengths, n_ages)) # Obs
input_data$index_caal_Neff = array(mis_datos, dim = c(n_years, input_data$n_indices, n_lengths)) # Obs error
# Aging error matrix
input_data$index_aging_error = array(mis_datos, dim = c(input_data$n_indices, n_ages, n_ages))
Tenemos que especificar los pointers para los modelos de selectividad:
En palabras sencillas, es un tipo de indexación para saber que modelo de selectividad usará, por ejemplo, la pesquería 1, 2, 3, y el índice 1, 2 (ver sección de parámetros).
Puede ser tratado como empirical weight-at-age (asumimos que no tiene error) o como observaciones (error de observación asociado, waa_cv
):
input_data$waa = array(mis_datos, dim = c(n_waa, n_years, n_ages))
input_data$waa_pointer_fleets = my_pointer_1 #length = n_fleets.
input_data$waa_pointer_indices = my_pointer_2 #length = n_indices.
input_data$waa_pointer_totcatch = my_pointer_3 #length = 1
input_data$waa_pointer_ssb = my_pointer_4 #length = 1
input_data$waa_pointer_jan1 = my_pointer_5 #length = 1
input_data$waa_cv = array(mis_datos, dim = c(n_waa, n_years, n_ages)) # obs error
Los my_pointer
, al igual que para selectividad, es una forma de indexación (indica la matrix de peso a la edad va a usar cierta pesquería o índice).
# Para pesquerias
input_data$use_agg_catch = matrix(mi_activar, nrow = n_years, ncol = input_data$n_fleets) # 1 = usar, 0 = no usar
input_data$use_catch_paa = matrix(mi_activar, nrow = n_years, ncol = input_data$n_fleets) # 1 = usar, 0 = no usar
input_data$use_catch_pal = matrix(mi_activar, nrow = n_years, ncol = input_data$n_fleets) # 1 = usar, 0 = no usar
input_data$use_catch_caal = array(mi_activar, dim = c(n_years, input_data$n_fleets, n_lengths)) # 1 = usar, 0 = no usar
input_data$use_catch_waa = matrix(mi_activar, nrow = n_years, ncol = input_data$n_fleets) # 1 = usar, 0 = no usar
input_data$use_catch_aging_error = rep(1, times = input_data$n_fleets) # 1 = si usar, 0 = no usar
# Para indices
input_data$use_indices = matrix(mi_activar, nrow = n_years, ncol = input_data$n_indices) # 1 = usar, 0 = no usar
input_data$use_index_paa = matrix(mi_activar, nrow = n_years, ncol = input_data$n_indices) # 1 = usar, 0 = no usar
input_data$use_index_pal = matrix(mi_activar, nrow = n_years, ncol = input_data$n_indices) # 1 = usar, 0 = no usar
input_data$use_index_caal = array(mi_activar, dim = c(n_years, input_data$n_indices, n_lengths)) # 1 = usar, 0 = no usar
input_data$use_index_waa = matrix(mi_activar, nrow = n_years, ncol = input_data$n_indices) # 1 = usar, 0 = no usar
input_data$use_index_aging_error = rep(1, times = input_data$n_indices) # 1 = si usar, 0 = no usar
Cuidado
Si no se incluyen datos de pal
o caal
, entonces el use
será 0 automáticamente. Sin embargo, para paa
, use
es igual a 1 (activo) incluso si no incluimos datos de composición por edad. Por lo tanto, si no se desea usar datos de paa
, especificar explicitamente use_paa
igual a 0 en la matriz correspondiente.
Cuidado
Cuando se incluye datos de pal
o caal
o waa
, también debemos especificar explicitamente el use
igual a 1 en la matriz correspondiente.
input_data$maturity = matrix(mis_datos, nrow = n_years, ncol = n_ages) # madurez sexual
input_data$fracyr_SSB = matrix(mis_datos, ncol = 1, nrow = n_years) # fraction of year SSB
input_data$Fbar_ages = mis_datos # edades para calcular Fbar
input_data$percentSPR = 40 # % SPR reference point
input_data$percentFMSY = 100 # percent of FMSY to use for calculating catch in projections
input_data$simulate_period = c(1,0) # simulation for 1: model period, 2: projection
input_data$bias_correct_process = 1 # do process bias correction, 0 = no, 1 = yes
input_data$bias_correct_observation = 1 # do obs bias correction, 0 = no, 1 = yes