中文 | Español | English | português | Turkish

knitr::opts_chunk$set(echo = TRUE)
library(tidyr)
library(ggplot2)
library(deSolve)
library(ecoevoapps)
library(patchwork)
library(latex2exp)
theme_set(ecoevoapps::theme_apps())

Crecimiento exponencial en tiempo discreto

$N_{t+1} = \lambda N_t$

sidebarLayout(
  sidebarPanel(
    # User defined lambda -------
    sliderInput("lambda", label = "Tasa de crecimiento poblacional (lambda):",
                min = 0.01, max = 2, value = 1.2, step = .01),
    # User defined N0 -------
    numericInput("N0", label = "Tamaño inicial de la población (N0)",
                min = 1, max = 100, value = 1),
    # User defined time ---------
    numericInput("time", label = "Número de pasos en el tiempo en el que se proyectará la población",
                min = 1, max = 1000, value = 30)
    ),

  # Panel of plots -----
  mainPanel(
    renderPlot({plots_to_print()}, width = 450, height = 450)
  )
)

# Generate trajectories for sp 1 --------
exponential_pop_df <- reactive({
  run_discrete_exponential_model(N0 = input$N0, lambda = input$lambda, time = input$time)
})


# Make plot -----------
trajaectory_plot <- reactive({
  plot_discrete_population_growth(exponential_pop_df()) +
    ylab(latex2exp::TeX("Tamaño de la población en el tiempo $t$ ($N_t$)")) +
    labs(caption = latex2exp::TeX(paste0("Valores del parámetro: $\\lambda = $", input$lambda)),
         title = "Crecimiento poblacional con el modelo exponencial en tiempo discreto")
})

# Make a list of plots  ----
plots_to_print <- reactive({trajaectory_plot()})

Crecimiento logístico en tiempo discreto {.tabset}

Modelo estándar de crecimiento logístico en tiempo discreto

Una manera de modelar el crecimiento logístico de una población en tiempo discreto es con un mapa logístico, esto es un modelo análogo al de la ecuación logística de tiempo continuo.

$$N_{t+1} = r_dN_t\left(1-\frac{N_t}{K}\right)$$

Rober May estudió esta formulación del modelo logístico en su artículo clásico de 1976 "Simple mathematical models with very complicated dynamics", en donde demuestra el potencial que tiene este modelo para generar dinámicas de chaos.

sidebarLayout(
  sidebarPanel(
    # User defined lambda -------
    sliderInput("rd_dl", label = "Tasa de crecimiento poblacional (rd):",
                min = 0.01, max = 4.5, value = 1.05, step = .01),
    # User defined N0 -------
    numericInput("N0_dl", label = "Tamaño inicial de la población (N0)",
                min = 1, max = 100, value = 1),
    # User defined carrying capacity (K) ----------    
    numericInput("K_dl", label = "Capacidad de carga (K)",
                 min = 1, max = 1000, value = 100),
    # User defined time ---------
    numericInput("time_dl", label = "Numero de pasos en el tiempo que se proyectarán",
                min = 1, max = 1000, value = 30)

    ),

  # Panel of plots -----
  mainPanel(
    renderPlot({plots_to_print_dl()}, width = 450, height = 800)
  )
)

# Get user defined parameters for discrete logistic  ------

params_dl <- reactive({c(rd = input$rd_dl, K = input$K_dl)})

dl_df <- reactive({
  run_discrete_logistic_model(N0 = input$N0_dl,
                                       params = params_dl(),
                                       time = input$time_dl)

})



# Generate trajectories for discrete logistic --------
trajaectory_plot_dl <- reactive({
  plot_discrete_population_growth(dl_df()) +
    labs(title = "Crecimiento poblacional con el modelo logístico en tiempo discreto")
})

# cobweb for standard discrete logistic model -----

cobweb_dl <- reactive({
  plot_discrete_population_cobweb(dl_df(),
                                  params_vec = params_dl(),
                                  model_type = "discrete_logistic") +
    labs(title = "Diagrama de verhulst")
})

# Make plot caption ----
plot_caption_dl <- reactive({
    latex2exp::TeX(paste0("Valores del parámetro: $r_d = $", input$rd_dl, "; K = ", input$K_dl))
})
# Make a list of plots  ----
plots_to_print_dl <- reactive({{trajaectory_plot_dl()/cobweb_dl()} + 
    labs(caption = plot_caption_dl())})

Modelo de Ricker

Otra forma de modelar el crecimiento poblacional en tiempo discreto y con una capacidad de carga es con el modelo de Ricker. Éste se describió por primera vez en un artículo de 1954 sobre la densidad de los peces y el reclutamiento de estos para las pesquerías.

$$N_{t+1} = N_t e^{(r (1 - N_t/K))}$$

sidebarLayout(
  sidebarPanel(
    # User defined lambda -------
    sliderInput("r_ricker", label = "Tasa de crecimiento poblacional (r):",
                min = 0.01, max = 3, value = 1.01, step = .01),
    # User defined N0 -------
    numericInput("N0_ricker", label = "Tamaño inicial de la población (N0)",
                min = 1, max = 100, value = 1),
    # User defined carrying capacity (K) ----------    
    numericInput("K_ricker", label = "Capacidad de carga (K)",
                 min = 1, max = 1000, value = 100),
    # User defined time ---------
    numericInput("time_ricker", label = "Numero de pasos en el tiempo que se proyectarán",
                min = 1, max = 1000, value = 30, step = 5)

    ),

  # Panel of plots -----
  mainPanel(
    renderPlot({plots_to_print_ricker()}, width = 450, height = 800)
  )
)

# Get user defined parameters for discrete logistic  ------
params_ricker <- reactive({c(rd = input$r_ricker, K = input$K_ricker)})

ricker_df <- reactive({
  run_ricker_model(N0 = input$N0_ricker,
                                 params = params_ricker(),
                                 time = input$time_ricker)
})


# Generate trajectories for discrete logistic --------
trajaectory_plot_ricker <- reactive({
  plot_discrete_population_growth(ricker_df()) +
    labs(title = "Crecimiento poblacional con el modelo de Ricker")
})

# cobweb plot for ricker model -----
cobweb_ricker <- reactive({
    plot_discrete_population_cobweb(ricker_df(),
                                  params_vec = params_ricker(),
                                  model_type = "ricker") +
    labs(title = "Diagrama de verhulst")
  })

# Make plot caption ----
plot_caption_ricker <- reactive({
    latex2exp::TeX(paste0("Valores del parámetro: $r = $", input$r_ricker, "; K = ", input$K_ricker))
})

# Make a list of plots  ----

plots_to_print_ricker <- reactive({{trajaectory_plot_ricker()/cobweb_ricker()} + 
    labs(caption = plot_caption_ricker())})

Modelo de Beverton-Holt

Otro modelo clásico para el crecimiento poblacional en tiempo discreto es el modelo de Beverton-Holt el cual también se desarrolló para el manejo de pesquerías:

$$N_{t+1} = \frac{RN_t}{1+\left(\frac{R-1}{K}\right)N_t}$$

sidebarLayout(
  sidebarPanel(
    # User defined lambda -------
    sliderInput("r_bh", label = "Tasa de crecimiento poblacional (R):",
                min = 0.01, max = 3, value = 1.25, step = .01),
    # User defined N0 -------
    numericInput("N0_bh", label = "Tamaño inicial de la población (N0)",
                min = 1, max = 100, value = 1),
    # User defined carrying capacity (K) ----------    
    numericInput("K_bh", label = "Capacidad de carga (K)",
                 min = 1, max = 1000, value = 100),
    # User defined time ---------
    numericInput("time_bh", label = "Numero de pasos en el tiempo que se proyectarán",
                min = 1, max = 1000, value = 30, step = 5)

    ),

  # Panel of plots -----
  mainPanel(
    renderPlot({plots_to_print_bh()}, width = 450, height = 800)
  )
)

# Get user defined parameters for discrete logistic  ------
params_bh <- reactive({c(rd = input$r_bh, K = input$K_bh)})
bh_df <- reactive({
  run_beverton_holt_model(N0 = input$N0_bh, 
                          params = params_bh(),
                          time = input$time_bh)
})


# Generate trajectories for beverton-holt model --------
trajaectory_plot_bh <- reactive({
  plot_discrete_population_growth(bh_df()) +
    labs(title = "Crecimiento poblacional con el modelo de Beverton-Holt")
})


# Generate cobweb for beverton-holt model --------
cobweb_bh <- reactive({
  plot_discrete_population_cobweb(bh_df(),
                                  params_vec = c(rd = input$r_bh, K = input$K_bh),
                                  model_type = "beverton_holt")  +
    labs(title = "Diagrama de verhulst")
})


# Make plot caption ----
plot_caption_bh <- reactive({
    latex2exp::TeX(paste0("Valores del parámetro: $r = $", input$r_bh, "; K = ", input$K_bh))
})

# Make a list of plots  ----

plots_to_print_bh <- reactive({{trajaectory_plot_bh()/cobweb_bh()} + 
    labs(caption = plot_caption_bh())})

References

"Simple mathematical models with very complicated dynamics", Robert May, 1976.

"Stock and Recruitment", Bill Ricker, 1954.

Course notes on the Ricker model from UGA course on population ecology

Dr. Sebastian Bonhoeffer's lecture notes on Ecology and Evolution (see Ch. 1)

Dr. Jan Engelstädter's e-book on analysis of biological data.


suppressWarnings(ecoevoapps::print_app_footer(language = "es"))


gauravsk/ecoevoapps documentation built on July 9, 2024, 9:37 p.m.