中文 | 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)
Esse aplicativo modela a dinâmica de duas espécies predadoras ($P_1$ e $P_2$) que dependem de uma mesma espécie de presa ($H$) como recurso. Esse modelo, portanto, simula implicitamente a competição por recursos entre dois predadores – conforme a população de $P_1$ cresce, a população de $P_2$ decresce devido ao esgotamento do recurso $H$ por $P_1$.
Até mesmo um caso simples como esse pode ser modelado de várias formas. Por exemplo, podemos assumir que a presa, na ausência de $P_1$ e $P_2$, cresça exponencial- ou logisticamente.
O modelo pode também levar em conta diferentes relações entre a densidade da presa e a taxa de consumo por cada predador. Essas relações são chamadas de resposta funcional dos consumidores e podem assumir duas formas básicas: 1) resposta funcional do tipo I, quando a taxa de consumo é uma função linear da densidade de recurso; e 2) resposta funcional do tipo II, quando a taxa de consumo é uma função de saturação da densidade de recurso. A ideia da resposta funcional do tipo II foi desenvolvida por C. S. Holling (1959) no artigo "Algumas características de tipos simples de predação e parasitismo".
O sistema de equações abaixo descreve a versão mais complexa do 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("Tamanho da população da presa $H$ (recurso)", "Tamanho da população do predador $P_i$ (consumidor)", "Taxa de crescimento per capita de $H$", "Coeficiente de auto-limitação de $H$", "Taxa de consumo de $P_i$", "Tempo de manipulação de $P_i$", "Eficiência de conversão de $P_i$", "Taxa de mortalidade de $P_i$") param_df <- data.frame(pars_vars, descriptions) kable(x = param_df, format = "html", col.names = c("Parâmetro/variável", "Descrição")) %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"), position = "center")
Note que, se q=0, H tem crescimento exponencial. Se $q>0$, $H$ tem crescimento logístico com capacidade de suporte $K = \frac{1}{q}$.
Note também que, se $T_{h,i}=0$, a espécie $P_i$ tem uma resposta funcional do tipo I.
wellPanel( fluidRow( column(4, ### Ask users for parameter values ---- ## start with Prey params numericInput("H", label = "População inicial da presa (H)", min = 1, value = 30), sliderInput("r", label = "Taxa de crescimento populacional da presa (r)", min = .0001, max = 1.0, value = .2), sliderInput("q", label = "Coeficiente de auto-limitação da presa (q)", min = 0, max = 0.10, step = 0.0001, value = .0066), br(), hr(), numericInput("t", label = "Tempo a ser projetado", min = 1, value = 1000), checkboxGroupInput("fxnrep", label = "Mostrar gráfico com as respostas funcionais?", choices = c("Sim" = "Yes"), selected = NULL) ), column(4, ## now pred1 params + initial conditions numericInput("P1", label = "População inicial do predador 1", min = 1, value = 25), sliderInput("a1", label = "Taxa de consumo do predador 1 (a1)", min = .001, max = 1.0, value = .02), sliderInput("T_h1", label = "Tempo de manipulação do predador 1 (Th_1)", min = 0, max = 1.0, value = 0.1), sliderInput("e1", label = "Eficiência de conversão do predador 1 (e1)", min = .001, max = 1.0, value = 0.4), sliderInput("d1", label = "Taxa de mortalidade do predador 1 (d1)", min = .0001, max = 1.0, value = .1) ), column(4, ## now pred2 params + initial conditions numericInput("P2", label = "População inicial do predador 2", min = 1, value = 25), sliderInput("a2", label = "Taxa de consumo do predador 2 (a2)", min = .001, max = 1.0, value = .02), sliderInput("T_h2", label = "Tempo de manipulação do predador 2 (Th_2)", min = 0, max = 1.0, value = 0.1), sliderInput("e2", label = "Eficiência de conversão do predador 2 (e2)", min = .001, max = 1.0, value = 0.39), sliderInput("d2", label = "Taxa de mortalidade do predador 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 = "pt"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.