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

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:

  1. 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$)

  2. 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;

  3. 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.

Use o aplicativo abaixo para explorar essas propriedades interessantes do modelo de crescimento de populações estruturadas:

### 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"))


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