中文 | 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")
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)
  }

})

References


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


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