Ecologia BIO231C_2018

Módulo 1.2.1: Modelo exponencial

En este módulo repasaremos y analizaremos conceptos centrales en el ámbito de la ecología de poblaciones, principalmente los principios de crecimiento exponencial (denso-independiente) y crecimiento logístico (denso-dependiente), así cómo las aproximaciones matemáticas (ecuaciones diferenciales y de diferencia) y sus implicancias biológicas.

En términos funcionales, de acuerdo a Berryman (2002) una población queda definida como:

“a group of individuals of the same species that live together in an area of sufficient size to permit normal dispersal and/or migration behavior and in which numerical changes are largely determined by birth and death processes.”

Por consiguente, la dinámica de poblaciones se centra en responder y generar preguntas relacionadas a los cambios en el número de individuos que experimenta una población.

Modelo de crecimiento exponencial

Siendo el modelo más sencillo de crecimiento poblacional, este modelo sólo cuenta con un parámetro que refleja la denso-independencia en el crecimiento de una población. La ecuación de diferencia corresponde a \[\frac{\Delta N}{\Delta t}=\lambda\] tal que N(t) corresponde al tamaño poblacional para un tiempo determinado, que depende solo del tamaño poblacional en el tiempo anterior N(t-1) y la tasa de crecimiento \(\lambda\). De forma análoga, la ecuación diferencial de este caso, corresponde a \[\frac{dN}{dt}=rN\] En este módulo, nos ocuparemos de la primera aproximación, para ver la evolución de una población en el tiempo bajo este principio poblacional.

Antes de comenzar con la programación de este tipo de trayectorias poblacionales, analicemos de forma análitica la ecuación, busquemos sus puntos de equilibrio y su solución.

Ahora, veamos cómo podemos programarla y simular un comportamiento exponencial de una población.

# Inicialmente definiremos los parámetros fijos del modelo

  N <- 10 # tamaño poblacional inicial
  lambda <- 0.1 # tasa de crecimiento
  nsteps <- 100 # numero de time steps a simular


# Luego calculamos el cambio de la abundancia en el 'tiempo'. 
# Notar que el tiempo avanza de forma discreta, saltos de una unidad temporal

  for(t in 2:nsteps){
 
    N[t] <- N[t-1] + N[t-1] * lambda
    # N[t] = abundancia en el tiempo actual
    # N[t-1] = abundancia en el tiempo anterior
  }

#A continuacion graficaremos los resultados
plot(`N`, bty="n", las=1, type="l", lwd= 2,ylim=c(0, max(N)),
       xlab="Tiempo", ylab="Tamaño Poblacional", main="Crecimiento Exponencial", col="blue")

./?

Respecto a lo que sabemos hasta el momento, responde a las siguientes preguntas.

Quiz

Módulo 1.2.2: Modelo logístico

Este segundo modelo refleja el fenómeno de denso-dependencia en el crecimiento de una población (mecanismos de feedback o retroalimentación poblacional). En este caso abordaremos la aproximación en tiempo continuo y consideraremos que nuestra variable de interés es biomasa (una variable continua, diferenciable en el tiempo), siendo el modelo \[\frac{dN}{dt}=rN\times \Big(1 - \dfrac{N}{K}\Big)\]. Donde \(r\) es la tasa per capita de crecimiento poblacional y \(K\) es la capacidad de carga del sistema. Si buscamos las soluciones en el equilibrio (i.e., cuando \(\dot{N}=0\)) encontramos dos soluciones: la solución trivial \[\hat{N} = 0\] y otra solución tal que \[\hat{N} = K\].

¿ Cómo llegamos a estos resultados analíticos? ## A continuación estudiaremos si esta aproximación analítica se corresponde con lo que podemos obtener a través de la simulación determinista de una población.

#Al igual que en el caso anterior, comenzaremos por definir la variables fijas 
#(tambien llamadas 'globals')
# Definimos los parámetros de crecimiento (fijos)
r <- 0.4 ; K <- 10

#Ademas necesitamos entregarle un vector inicial de poblacion (N0)
N0 <- c(N = 2)

#Definimos el intervalo de tiempo
time <- seq(from = 0, to = 30, by = 0.2)

#Creamos la funcion que describe el crecimiento logistico
LogisticGrowth <- function(t, N, parameters){
  r <- parameters[1]
  K <- parameters[2]
  dN <- r*N*(1 - N/K)
  list(dN)
}


#Creamos una realizacion para determinada condicion inicial dada
out_1 <- ode(y = N0, times = time, func = LogisticGrowth,
           parms = c(r,K))

#Graficamos el resultado
plot(out_1, bty="n",main = "Crecimiento Logístico", lwd = 2, xlab = "Tiempo", ylab = "Densidad poblacional", col="blue")

logistic.phasePortrait <- phasePortrait(logistic, ylim = c(-0.5, max(out_1)), lwd = 2,
                                        parameters = c(r,K), points = 10, col="purple", xlab="Tiempo", ylab="Función R")
#Tambien podemos crear otras instancias para comparar con el caso anterior.
#Por ejemplo cambiando la tasa de crecimiento
##Caso A:
N0 <- c(N = 2)
r <- 0.5  ; K <- 10
time <- seq(from = 0, to = 50, by = 0.2)

out_2 <- deSolve::ode(y = N0, times = time, func = LogisticGrowth,
           parms = c(r,K))

##Caso B:
N0 <- c(N = 2)
r <- 0.25 ; K <- 10

out_3 <- ode(y = N0, times = time, func = LogisticGrowth,
           parms = c(r,K))

#Y graficamos los resultados con el resultado anterior
plot(out_2,out_3, bty="n",main = "Crecimiento Logístico", 
     lwd = 2, xlab = "Tiempo", ylab = "Tamaño poblacional",col = c("green", "blue"))
legend("bottomright",inset=0.05, c("Caso A", "Caso B"),cex=0.8, lty = c(1,2), col = c("green", "blue"))

Quick coding task

¿Qué crees que pasará si el tamaño poblacional inicial es mayor a la capacidad de carga? Evalúa el caso y grafica los resultados. Discute con respecto a si la capacidad de carga es un atractor o un repulsor demográfico (hint:puntos de equilibrios estables/inestables).

./?

Respecto a lo que sabemos hasta el momento, responde a las siguientes preguntas.

Quiz

Simon P. Castillo - spcastil@uc.cl