install.packages("dplyr")
install.packages("FSA")
install.packages("nlstools")
install.packages("nlsMicrobio")
install.packages("AICcmodavg")
Estimación de crecimiento en peces
El crecimiento es parte de la dinámica de una población que describe cómo los individuos crecen en longitud (y peso) en función a su edad. Es uno de los componentes principales que influyen en la biomasa total de una población y nos puede dar información acerca de su nivel de explotación.
Casi todas las especies de peces crecen de la misma manera. Durante los primeros años de edad, la tasa de crecimiento es muy acelerada debido a que invierten toda su energía en crecer. Una vez que llegan a cierta edad, la tasa de crecimiento comienza a desacelerar, y es aquí donde los individuos comienzan a invertir una parte de su energía en reproducirse. En una última fase, los individuos dejan de crecer, por lo que su tasa de crecimiento es cero, y toda su energía la invierten en reproducción. El crecimiento en peces es un proceso complejo que se ve afectado por diversos factores, como la genética, la temperatura, la disponibilidad de alimento y la competencia.
Existen diversos modelos para describir el crecimiento en peces. En este post les mostraremos el modelo deC crecimiento más usado: el modelo de von Bertalanffy y su aplicación en R
Instalación de librerías
Para poder replicar los ejercicios que se mostrarán a continuación es necesario instalar las siguientes librerías. Pueden realizar la instalación través del siguiente comando en consola de R:
Acerca de la información y la ecuación
Para poder construir este modelo, necesitamos información acerca de la edad del individuo y su correspondiente talla.
La ecuación de von Bertalanffy se expresa de la siguiente manera:
\(L_t = L_\infty * (1 - e^{(-K*(t-t_0))})\)
Donde \(L_t\) es la longitud del individuo a una edad \(t\), \(K\) es el parámetro de curvatura y \(t_0\) es la edad de los peces cuando, hipotéticamente, tienen longitud cero o marca la época de nacimiento (Fig. 1).
Manos a la obra
Para este ejercicio usaremos la base de datos llamada LA.csv. Para este ejercicio, iniciaremos descargando el archivo LA.csv
Una vez que se haya descargado el archivo, cargamos las librerías necesarias y procedemos a leer de la siguiente manera:
library(dplyr)
library(FSA)
library(nlstools)
library(nlsMicrobio)
library(AICcmodavg)
<- read.csv("LA.csv") datos
Luego exploramos el contenido de esta base de datos:
# Observamos las 3 primeras y 3 útimas filas de la base de datos
headtail(datos)
Age L
1 0.5 6.0
2 0.5 6.5
3 0.5 6.5
225 2.5 17.0
226 2.5 17.0
227 3.0 17.5
Iniciamos con una exploración estadística básica de las dos variables que contiene la base de datos.
# Estadísticos descritivos
summary(datos)
Age L
Min. :0.500 Min. : 6.00
1st Qu.:0.500 1st Qu.:12.00
Median :1.500 Median :14.00
Mean :1.315 Mean :13.41
3rd Qu.:2.000 3rd Qu.:15.50
Max. :3.000 Max. :17.50
Además se realiza una exploración gráfica y verificamos la relación entre la edad (Age) y la longitud (L):
plot(datos$L ~ datos$Age, data = datos,
xlab = "Edad (años)", ylab = "Longitud (cm)",
bg = "red", pch = 21, cex = 1.5,
xlim = c(0, 3), ylim = c(0, 20))
Una vez que hemos comprobado la relación que existe entre las variables de interés, procedemos a construir el modelo.
El primer paso estará enfocado en obtener unos valores de entrada de los parámetros a estimar, que en este caso son: \(L\infty\), \(K\) y \(t_0\). Para ello, utilizaremos la funcion vbStarts() del paquete FSA.
<- vbStarts(L~Age, data = datos, type = "Typical", plot = TRUE) svb
Se observa una gráfica que contiene los valores de entrada, los cuales están almacenados en el objeto svb como una lista, y que serán suministrados al modelo. Así tenemos:
<- nls(formula = L ~ Linf*(1-exp(-K*(Age-t0))), data = datos, start = svb) model
Verificamos qué es lo que contiene el modelo.
summary(model)
Formula: L ~ Linf * (1 - exp(-K * (Age - t0)))
Parameters:
Estimate Std. Error t value Pr(>|t|)
Linf 18.71326 0.73845 25.341 < 2e-16 ***
K 0.82075 0.12094 6.786 1.02e-10 ***
t0 -0.37671 0.09001 -4.185 4.09e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.082 on 224 degrees of freedom
Number of iterations to convergence: 5
Achieved convergence tolerance: 2.899e-06
Y finalmente extraemos los coeficientes o parámetros.
coef(model)
Linf K t0
18.7132559 0.8207452 -0.3767086
Sobre la predicción
Podemos hacer algunas predicciones usando la función predict() con base en el modelo (model) generado previamente. Lo que se quiere es predecir la longitud a una edad determinada. Para ello vamos a crear un objeto llamado L_pred el cual va a almacenar todos los valores predichos.
= predict(model) L_pred
Finalmente representamos gráficamente los resultados del modelo:
plot(L ~ Age, data = datos)
lines(L_pred ~ Age, data = datos, col = "red", lwd = 3)