中文 | Español | English | português | Turkish
knitr::opts_chunk$set(echo = TRUE) library(ggplot2) library(tidyr) library(purrr) library(dplyr) library(deSolve) library(ecoevoapps) library(patchwork) library(RColorBrewer) library(kableExtra)
Esta aplicación simula la dinámica de dos especies consumidoras ($P_1$ y $P_2$) que requieren las mismas especies de recursos ($H$) para crecer. Esto nos permite modelar implícitamente la competencia por los recursos entre las dos especies consumidoras, debido a un aumento en $P_1$ da como resultado una tasa de crecimiento menor de $P_2$ debido a la supresión del recurso H por parte de $P_1$.
Incluso este sencillo escenario se puede modelar de muchas maneras. P.ej. podemos considerar una especie de recurso $H$ que, en ausencia de cualquiera de los consumidores, crece exponencialmente (sin límite intrínseco al crecimiento de la población) o logísticamente.
Los modelos también pueden considerar diferentes relaciones entre la densidad de los recursos y la tasa a la que son atacados por los consumidores. Esta relación se llama respuesta funcional y consideramos dos tipos de relaciones. En primer lugar, consideramos a. "Respuesta funcional tipo 1", en la que la tasa a la que los consumidores consumen recursos es una función lineal de la densidad de recursos. La segunda relación es la "respuesta funcional Tipo II", en la que la cantidad de recursos consumidos es una función de saturación de la densidad de recursos. La idea de la respuesta funcional Tipo II fue desarrollada por C.S. Holling en el artículo de 1959 "Algunas características de los tipos simples de depredación y parasitismo".
Este sistema de ecuaciones describe la versión más compleja de este modelo:
[ \begin{align} \frac{dH}{dt} &= rH \bigl(1-qH\bigr) - \frac{a_1HP_1}{1+a_1T_{h1}H} - \frac{a_2HP_2}{1+a_2T_{h2}H} \ \ \frac{dP_1}{dt} &= e_{1} \frac{a_1HP_1}{1+a_1T_{h1}H} - d_1P_1 \ \ \frac{dP2}{dt} &= e_2 \frac{a_2HP_2}{1+a_2T_{h2}H} - d_2P_2 \end{align} ]
pars_vars <- c("$H$", "$P_i$", "$r$", "$q$", "$a_i$", "$T_{h_i}$", "$e_i$", "$d_i$") descriptions <- c("Tamaño de especies $H$", "Tamaño de especies $P_1$ o $P_2$", "Tasa de crecimiento intrínseco de la especie $H$", "Tasa de competencia intraespecífica de la especie $H$", "Tasa de ataque de especie $P_1$ o $P_2$", "Tiempo de manejo de especie $P_1$ o $P_2$", "Eficiencia de conversión del especie $P_1$ o $P_2$", "Tasa de mortalidad de especie $P_1$ o $P_2$") param_df <- data.frame(pars_vars, descriptions) kable(x = param_df, format = "html", col.names = c("Parámetro/Variable", "Descripción")) %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"), position = "center")
Si $q =0$, especie $H$ crece exponencialmente. Si $q>0$, especie $H$ crece logísticamente a su carga de capacicad $K = \frac{1}{q}$.
Si $T_{h_{i}} = 0$, $P_i$ tiene una respuesta funcional tipo 1.
wellPanel( fluidRow( column(4, ### Ask users for parameter values ---- ## start with Prey params numericInput("H", label = "Initial population size of Prey", min = 1, value = 30), sliderInput("r", label = "Per capita growth rate of Prey (r)", min = .0001, max = 1.0, value = .2), sliderInput("q", label = "Prey self-limitation rate (q)", min = 0, max = 0.10, step = 0.0001, value = .0066), br(), hr(), numericInput("t", label = "Timesteps", min = 1, value = 1000), checkboxGroupInput("fxnrep", label = "Display plot of functional responses?", choices = c("Yes" = "Yes"), selected = NULL) ), column(4, ## now pred1 params + initial conditions numericInput("P1", label = "Initial population size of Predator 1", min = 1, value = 25), sliderInput("a1", label = "Predator 1 attack rate (a1)", min = .001, max = 1.0, value = .02), sliderInput("T_h1", label = "Predator 1 handling time (Th_1)", min = 0, max = 1.0, value = 0.1), sliderInput("e1", label = "Predator 1 conversion efficiency (e1)", min = .001, max = 1.0, value = 0.4), sliderInput("d1", label = "Per capita death rate of Predator 1 (d1)", min = .0001, max = 1.0, value = .1) ), column(4, ## now pred2 params + initial conditions numericInput("P2", label = "Initial population size of Predator 2", min = 1, value = 25), sliderInput("a2", label = "Predator 2 attack rate (a2)", min = .001, max = 1.0, value = .02), sliderInput("T_h2", label = "Predator 2 handling time (Th_2)", min = 0, max = 1.0, value = 0.1), sliderInput("e2", label = "Predator 2 conversion efficiency (e2)", min = .001, max = 1.0, value = 0.39), sliderInput("d2", label = "Per capita death rate of Predator 2 (d2)", min = .0001, max = 1.0, value = .1) ) )) fluidRow( column(12, renderPlot(plots_to_print()) )) # Set the initial population sizes init <- reactive({c(H = input$H , P1 = input$P1, P2 = input$P2)}) # Set the parameter values # description of parameters: # r = per capita growth rate (prey) # a = attack rate # T_h = handling time # e = conversion efficiency # d = predator death rate params <- reactive({c(r = input$r, q = input$q, a1 = input$a1, T_h1 = input$T_h1, e1 = input$e1, d1 = input$d1, a2 = input$a2, T_h2 = input$T_h2, e2 = input$e2, d2 = input$d2)}) # Time over which to simulate model dynamics time <- reactive({seq(0,input$t, by = .1)}) # Simulate the dynamics out <- reactive({ run_biotic_comp_model(time = time(), init = init(), params = params()) }) # Make a plot of abundance over time abund_plot <- reactive({ plot_biotic_comp_time(out()) }) ## functional responses of the two consumers plot_fxnreps <- reactive({ wrap_plots(plot_functional_responses(params()), ncol = 1) }) # Make a list of plots and print out plots based on which ones were requested ---- plots_to_print <- reactive({ if("Yes" %in% input$fxnrep){ wrap_plots(abund_plot(), plot_fxnreps(), design = "AAB") } else { wrap_plots(abund_plot(), ncol = 1) } })
suppressWarnings(ecoevoapps::print_app_footer(language = "es"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.