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

这个模型模拟了依赖相同非生物资源(如营养素)的两个物种之间的动态。因为两个物种均依赖相同资源,所以两者之间存在竞争,使得其中一个物种的种群可以降低另一个物种的生长率。

具体来说,这个app展示了一个非生物资源竞争模型。此模型由Dave Tilman研发,最初用于研究藻类之间的资源竞争,后来也用于研究草原植物之间的资源竞争。模型的基础结构是焦点物种(“消费者”)随着摄入资源而生长。每个消费者可以以不同的效率消耗和利用不同的资源。资源随着被消耗而从环境中减少,但资源也可以通过外部来源而进入环境(如营养素随溪流进入湖泊)。本理论模型带来的一个重要结论在于,当物种有其“专门”利用的资源时,竞争非生物资源的物种可以共生。更全面的模型描述详见Don Alstad博士所著的Populus guide (42页之后)。

这个app展示了由两个物种和两种资源构成的“必要资源”模型。

资源动态方程

$$\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)$$

消费者动态方程
$$\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("消费者物种$i$的种群规模",
                 "资源$j$的数量",
                 "消费者物种$i$的最大人均增长率",
                 "消费者$i$对于资源$j$的半饱和常数(当物种$i$以最大增长率的一半增长时,资源$j$的浓度)",
                 "消费者$i$对于资源$j$的消耗量",
                 "消费者物种$i$的死亡率",
                 "资源$j$的供给量 (或最大资源量)",
                 "资源$j$由可用型向不可用型的转化率")
param_df <- data.frame(pars_vars, descriptions)
kable(x = param_df, format = "html", 
      col.names = c("参数/变量", "描述")) %>%
  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("资源供给率"),
    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("消费者的自然增长率"),
    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("半饱和常数"),
    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("死亡率"),
    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("资源摄入率"),
    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("营养转化率"),
    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("消费者的起始种群规模"),
    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("资源池的起始规模"),
    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 = "模拟时长",
                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 = "ch"))


gauravsk/ecoevoapps-mirror documentation built on April 5, 2025, 1:59 a.m.