中文 | Español | English | português | Turkish
# Set default parameters for R chunks in Rmd knitr::opts_chunk$set(echo = FALSE, warning = FALSE) # Load the ecoevoapps package library(ecoevoapps) library(ggplot2)
O crescimento de algumas populações pode ser melhor modelado como um conjunto de indivíduos em classes etárias distintas (Tenhumberg, 2010). O crescimento de uma população assim estruturada depende de taxas de transição entre classes etárias. Por exemplo, a sobrevivência de juvenis e consequente transição para a vida adulta pode ser drasticamente diferente da taxa de transição de adultos jovens para adultos senis. Podemos modelar a dinâmica de uma população estruturada se soubermos as taxas de transição (ou sobrevivência) de uma classe etária para a próxima. Um outro tipo de taxa, chamada fecundidade, é também essencial para modelarmos uma população estruturada. Taxas de fecundidade são definidas pelo número médio de novos indivíduos (filhotes ou sementes) produzidos pelos indivíduos de cada classe etária.
A matriz de Leslie é uma forma extremamente prática e eficiente de ser organizar essas taxas demográficas (sobrevivência e fecundidade). A matriz de Leslie é uma matriz quadrada $NxN$, onde $N$ é o número de classes etárias em que uma população pode ser subdividida. Cada elemento $x_{ij}$ dessa matriz determina o quanto indivíduos que pertencem a uma classe etária $j$ no presente (colunas) vão contribuir com o número de indivíduos em uma classe etária $i$ no futuro (linhas). Por exemplo, o elemento $x_{12}$ determina a contribuição dos indivíduos com idade 2 no presente ($t$) para o número de indivíduos de idade 1 no futuro ($t+1$).
Além de ser uma maneira conveniente de incorporar informações sobre fecundidade e sobrevivência em diferentes classes etárias, a matriz de Leslie tem tres propriedades principais:
Para simular a estrutura da população, bem como seu tamanho total, um passo no futuro ($t+1$), basta multiplicar a matriz de Leslie por uma matriz Nx1 com o número de indivíduos em cada classe etária no presente ($t$)
O maior autovalor da matriz de Leslie é $\lambda$, a taxa de crescimento assintótico para a população inteira – quando $\lambda < 1$ a população encolhe até se extinguir, quando $\lambda > 1$ a população cresce exponencialmente e quando $\lambda = 1$ a população não muda de tamanho com o passar do tempo;
O autovetor correspondente ao maior autovalor da matriz de Leslie equivale à estrutura etária estável da população, ou seja, as proporções estáveis que cada classe etária atinge após um período inicial transitório durante o qual essas proporções podem variar drasticamente.
### APP fluidPage( ## INPUT sidebarPanel( # Initial sizes numericInput(inputId = "N1", label = "Número inicial de indivíduos com idade 1", min = 0, max = NA, value = 100), numericInput(inputId = "N2", label = "Número inicial de indivíduos com idade 2", min = 0, max = NA, value = 100), numericInput(inputId = "N3", label = "Número inicial de indivíduos com idade 3", min = 0, max = NA, value = 100), # Leslie matrix numericInput(inputId = "F1", label = "Fecundidade de indivíduos com idade 1", min = 0, max = NA, value = 0), numericInput(inputId = "F2", label = "Fecundidade de indivíduos com idade 2", min = 0, max = NA, value = 8), numericInput(inputId = "F3", label = "Fecundidade de indivíduos com idade 3", min = 0, max = NA, value = 1), sliderInput(inputId = "S12", label = "Sobrevivência de indivíduos com idade 1 (%)", min = 1, max = 100, value = 40), sliderInput(inputId = "S23", label = "Sobrevivência de indivíduos com idade 2 (%)", min = 0, max = 100, value = 80), width=4), ## OUTPUT mainPanel( tabsetPanel(type = "pills", tabPanel("Diagrama do ciclo de vida e matriz de Leslie", renderPlot({ diagr() }, width = 500), br(), column(width = 5, style='border-right: 0.02px solid grey', br(), h4("Leslie matrix"), renderTable({ Leslie_to_print() })), column(width = 7, h4("Eigen analysis"), em(strong("Taxa de crescimento populacional assintótica (lambda)")), renderText({ eigenval() }), br(), # br(), br(), em(strong("Estrutura etária estável ")), renderTable({ eigenvec() }) )), tabPanel("Trajetórias da População", h4("Trajetória de cada idade"), renderPlot({ plot_pop_trajectory() }), h4("Trajetória da distribuição etária"), renderPlot({ plot_pop_agedist() }), h4("Trajetória da taxa de crescimento da população"), renderPlot({ plot_pop_lambda() })) ) ) ) ## Leslie matrix Leslie_matrix <- reactive({ matrix( c(input$F1,input$F2, input$F3, input$S12/100,0,0, 0, input$S23/100,0), ncol = 3, byrow = T ) }) Leslie_to_print <- reactive({ ll <- Leslie_matrix() colnames(ll) <- paste("Age",1:3) ll }) init <- reactive({ c(input$N1,input$N2,input$N3) }) ## Largest eigenvalue eigenval <- reactive({ paste0("Autovalor = ",round(eigen(Leslie_matrix())$values,2)[1]) }) ## Eigenvector corresponding to largest eigenvalue tmp <- reactive({ round(eigen(Leslie_matrix())$vectors[,1]*100/ sum(eigen(Leslie_matrix())$vectors[,1])) }) eigenvec <- reactive({ matrix( c("autovetor", round(eigen(Leslie_matrix())$vectors[,1],2), "%", tmp()[1], tmp()[2], tmp()[3]), ncol=4, byrow=T, dimnames = list(NULL, c(" ","Age 1","Age 2", "Age 3")) ) }) diagr <- reactive({ plot_leslie_diagram(Leslie_matrix()) }) # Simulation plots pop_trajectory <- reactive({ run_structured_population_simulation(leslie_mat = Leslie_matrix(), init = init(), time = 1000) }) plot_pop_trajectory <- reactive({ plot_structured_population_size(pop_trajectory()) + labs(title = "") + theme(legend.text = element_text(size = 13), legend.title = element_text(size = 13)) }) plot_pop_agedist <- reactive({ plot_structured_population_agedist(pop_trajectory(), leslie_mat = Leslie_matrix())+ labs(title = "") + theme(legend.text = element_text(size = 13), legend.title = element_text(size = 13), plot.caption = element_text(size = 13)) }) plot_pop_lambda <- reactive({ plot_structured_population_lambda(pop_trajectory(), leslie_mat = Leslie_matrix()) + labs(title = "") + theme(legend.text = element_text(size = 13), legend.title = element_text(size = 13), plot.caption = element_text(size = 13)) })
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.