中文 | Español | English | português | Turkish
knitr::opts_chunk$set(echo = FALSE) library(tidyr) library(kableExtra) library(ggplot2) library(purrr) library(deSolve) library(ecoevoapps) library(patchwork)
Este modelo simula a dinâmica de duas espécies que dependem de um mesmo conjunto de recursos abióticos (nutrientes, por exemplo) para crescer e reproduzir. Como essas duas espécies dependem dos mesmos recursos, o crescimento da população de uma espécie irá reduzir a taxa de crescimento da outra espécie, gerando uma dinâmica competitiva.
Mais especificamente, este aplicativo implementa o modelo de competição por recurso abiótico desenvolvido por David Tilman para estudar a competição entre diferentes espécies de diatomáceas. (Mais tarde em sua carreira ele também usaria o mesmo tipo de modelo para estudar competição entre plantas da pradaria.) A estrutura básica desse modelo é baseada no crescimento das espécies focais (consumidores) conforme elas adquirem recursos abióticos. Cada espécie consumidora pode consumir e usar recursos diferentes com diferentes graus de eficiência. Conforme são consumidos, os recursos vão se esgotando do ambiente, embora de tempos em tempos novos recursos entram no sistema vindos de alguma fonte externa (como nutrientes sendo trazidos por rios a um lago, por exemplo). A sacada principal desse modelo é que espécies competidoras podem coexistir quando se especializam em recursos distintos. Para uma descrição mais detalhada desse modelo veja o guia do programa Populus de Don Alstad (página 42 em diante).
Este aplicativo implementa o modelo de recursos essenciais com dois recursos e duas espécies competidoras.
Equações de dinâmica de recursos
$$\frac{dR_1}{dt} = a_1(S_1-R_1) - N_1c_{11}\left(\frac{1}{N_1}\frac{dN_1}{dt} + m_1\right) - N_2c_{21}\left(\frac{1}{N_2}\frac{dN_2}{dt} + m_2\right)$$ $$\frac{dR_2}{dt} = a_2(S_2-R_2) - N_2c_{12}\left(\frac{1}{N_1}\frac{dN_1}{dt} + m_1\right) - N_2c_{22}\left(\frac{1}{N_2}\frac{dN_2}{dt} + m_2\right)$$
Equações de dinâmica das espécies competidoras
$$\frac{1}{N_1}\frac{dN_1}{dt} = \mathrm{min}\left(\frac{r_1R_1}{R_1 + k_{11}} - m_1 ,\frac{r_2R_2}{R_2 + k_{12}} - m_1\right)$$
$$\frac{1}{N_2}\frac{dN_2}{dt} = \mathrm{min}\left(\frac{r_1R_1}{R_1 + k_{21}} - m_2 ,\frac{r_2R_2}{R_2 + k_{22}} - m_2\right)$$
pars_vars <- c("$N_i$", "$R_j$", "$r_i$", "$k_{ij}$", "$c_{ij}$", "$m_i$", "$S_j$", "$a_j$") descriptions <- c("Tamanho populacional da espécie $i$", "Abundância do recurso $j$ no ambiente", "Taxa de crescimento populacional per capita máxima da espécie $i$", "Constante de meia saturação da espécie $i$ pelo recurso $j$ (isto é, a concentração do recurso $j$ necessária para que a população da espécie $i$ cresça à metade de sua $r_i$)", "Taxa de consumo do recurso $j$ pela espécie $i$", "Taxa de mortalidade da espécie $i$", "Disponibilidade máxima do recurso $j$", "Taxa de conversão do recurso $j$ de sua forma bruta para sua forma utilizável") 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")
sidebarLayout( sidebarPanel(style = "overflow-y:scroll; max-height: 400px", # User defined resource growth rate ------- h5("Taxas de suprimento de recursos"), sliderInput("S1", label = "S1", min = 0.01, max = 25, value = 12, step = .1), # User defined resource growth rate ------- sliderInput("S2", label = "S2", min = 0.01, max = 25, value = 12, step = .1), # User defined resource growth rate ------- h5("Taxas de crescimento populacional intrínseco das espécies competidoras"), sliderInput("r1", label = "r1", min = 0.01, max = 2, value = 1.6, step = .1), # User defined resource growth rate ------- sliderInput("r2", label = "r2", min = 0.01, max = 2, value = 1, step = .1), # User defined resource uptake rates ------- h5("Constantes de meia saturação"), sliderInput("k11", label = "k11", min = 1, max = 30, value = 18, step = .1), sliderInput("k12", label = "k12", min = 1, max = 30, value = 4, step = .1), sliderInput("k21", label = "k21", min = 1, max = 30, value = 2, step = .1), sliderInput("k22", label = "k22", min = 1, max = 30, value = 14, step = .1), # User defined mortality rates ------- h5("Taxas de mortalidade"), sliderInput("m1", label = "m1", min = 0.001, max = .5, value = .2, step = .01), sliderInput("m2", label = "m2", min = 0.001, max = .5, value = .2, step = .01), # User defined resource uptake rates ------- h5("Taxas de aquisição de recursos"), sliderInput("c11", label = "c11", min = 0.01, max = 1, value = .25, step = .01), sliderInput("c12", label = "c12", min = 0.01, max = 1, value = .08, step = .01), sliderInput("c21", label = "c21", min = 0.01, max = 1, value = .1, step = .01), sliderInput("c22", label = "c22", min = 0.01, max = 1, value = .2, step = .01), # User defined resource acquisition rates ------- h5("Taxas de conversão de recursos"), sliderInput("a1", label = "a1", min = 0.001, max = 1, value = .5, step = .01), sliderInput("a2", label = "a2", min = 0.001, max = 1, value = .5, step = .01), # User defined N1, N2, and R ------- h5("Tamanho populacional inicial das espécies"), column(width = 6, numericInput("N1", label = "N1", min = 1, max = 100, value = 10)), column(width = 6, numericInput("N2", label = "N2", min = 1, max = 100, value = 10)), h5("Tamanho inicial dos estoques de recursos"), column(width = 6, numericInput("R1", label = "R1", min = 1, max = 100, value = 20)), column(width = 6, numericInput("R2", label = "R2", min = 1, max = 100, value = 20)), # User defined time --------- numericInput("time", label = "Tempo a ser projetado", min = 1, max = 5000, value = 500) ), # Panel of plots ----- mainPanel( renderPlot({plot_out()}, width = 600, height = 300), hr(), renderTable(Rstar_df()), ) ) tilman_params <- reactive({ c(S1 = input$S1, S2 = input$S2, r1 = input$r1, r2 = input$r2, k11 = input$k11, k12 = input$k12, k21 = input$k21, k22 = input$k22, m1 = input$m1, m2 = input$m2, c11 = input$c11, c12 = input$c12, c21 = input$c21, c22 = input$c22, a1 = input$a1, a2 = input$a2) }) tilman_init <- reactive({ c(N1 = input$N1, N2 = input$N2, R1 = input$R1, R2 = input$R2) }) time <- reactive({seq(from = 0, to = input$time, by=.1)}) Rstar_vec <- reactive({run_abiotic_comp_rstar(tilman_params())}) Rstar_df <- reactive({ Rstar_vec <- Rstar_vec() data.frame(species = c("N1", "N2"), R1star = c(Rstar_vec["R11"], Rstar_vec["R21"]), R2star = c(Rstar_vec["R12"], Rstar_vec["R22"])) }) tilman_out <- reactive({ to <- data.frame(run_abiotic_comp_model( time = time(), init = tilman_init(), params = tilman_params() )) }) tilman_out_R1R2 <- reactive({ plot_abiotic_comp_portrait(rstar_vec = Rstar_vec(), sim_df = tilman_out()) }) tilman_out_N1N2 <- reactive({ plot_abiotic_comp_time(tilman_out()) }) plot_out <- reactive({ tilman_out_R1R2() + tilman_out_N1N2() })
Tilman, D. 1980. Resources: A graphical-mechanistic approach to competition and predation. The American Naturalist.
Tilman, D. 1982. Resource Competition and Community Structure. Princeton University Press, Princeton, New Jersey. 296 pages.
Miller, T., et al. 2005. A Critical Review of Twenty Years’ Use of the Resource‐Ratio Theory. The American Naturalist.
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.