中文 | 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"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.