Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2018:alunos:trabalho_final:lucas.camacho:simu_pop
simu_pop <- function(eq, t, ni, nj, ri, rj){ # criar funcao chamada simu_pop com os argumentos eq, t, ni, nj, ri e rj
  # conferindo parametros
  
  if(eq != "exponential" & eq != "logistic") # verificando se o argumento eq possui as entradas corretas
    {
      stop("Erro em argumento eq. So e possivel simular dinamicas exponenciais (exponential) e logisticas (logistic)") # se eq nao for um dos modelos propostos, parar e retonar erro
    }

  if(ni < 0 || nj < 0 || ni > 1 || nj > 1) # verificando se os valores de ni e nj estao entre 0 e 1
    {
      stop("Erro em argumentos ni ou nj. Valores devem constar entre 0 e 1") # caso esteja errado, parar simulacao e retornar erro
    }
  if(ri < 1.1 || rj < 1.1 || ri > 3.95 || rj > 3.95) # verificando se os valores de r estao entre 1.1 e 3.95
    {
      stop("Erro em argumentos ri ou rj. Valores devem constar entre 1.1 e 3.95") # caso esteja errado, parar simulacao e retornar erro
    }

  # parametros conferidos, iniciar simulacao

  data <- as.data.frame(matrix(0, ncol = 3, nrow = length(seq(1, t, 1)))) # criando matrix vazia de dados  
  colnames(data)[1] <- ("tempo") # o nome da coluna 1 e data é tempo
  colnames(data)[2] <- ("ni") # o nome da coluna 2 de data é ni
  colnames(data)[3] <- ("nj") # o nome da coluna 3 de data é nj
  data[,1] <- seq(1, t, 1) # primeira coluna da matriz e o tempo de simulacao
  data[1,2] <- ni # primeira linha da coluna ni e a populacao inicial
  data[1,3] <- nj # primeira linha da coluna nj e a populacao inicial
  
  if(eq == "exponential") # condicao para escolher o tipo de modelo, caso o usuario escolha exponential
    {
    for(i in 2:t) # loop para calcular densidades populacionais no modelo exponencial
      {
        data[i,2] <- data[i-1,2] + (ri * data[i-1,2]) # a partir da segunda linha de data, calcular modelo exponencial de pop i ate t
        data[i,3] <- data[i-1,3] + (rj * data[i-1,2]) # a partir da segunda linha de data, calcular modelo exponencial de pop j ate t
    }
    
    # gerar grafico com dados simulados do modelo exponencial
    x11() # abrir janela grafica
    par(bg = "gray93", bty = "l", family = "serif") # definindo parametros graficos
    
    pop_graph <- plot(x = data$tempo, y = data$ny, ylim = c(0,1.5), type = "n", 
                      main = "Gráfico da Densidade populacional de i e j", xlab = "Tempo",
                      ylab = "Dens. populacional") # plotar grafico de densidade populacional de ni e nj pelo tempo
    
    lines(x = data$tempo, y = data$ni, col = "red", lwd = 5) # adicionando linha com dados da populacao i
    lines(x = data$tempo, y = data$nj, col = "blue", lwd = 5) # adicionando linha com dados da populacao j
    
    legend(1, 1.5, legend = c("População i", "População j"), col = c("red", "blue"), lty=1:1, cex=0.7,
           text.font=2, bg='gray85') # adicionando legenda

    return(pop_graph) # retornar grafico final com tempo no eixo X e densidades pop. no eixo Y  
    
    }
  else # caso contrario, ou seja, caso o modelo escolhido seja o logistico
    {
    for(i in 2:t) # loop para calcular densidades populacionais no modelo logistico
      {
        data[i,2] <- data[i-1,2] + ((ri * data[i-1,2]) * (1 - data[i-1,2])) # a partir da segunda linha de data, calcular modelo logistico de pop i ate t 
        data[i,3] <- data[i-1,3] + ((rj * data[i-1,3]) * (1 - data[i-1,3])) # a partir da segunda linha de data, calcular modelo logistico de pop j ate t
      }
    
      # gerar grafico com dados simulados do modelo logistico
      x11() # abrir janela grafica
      par(bg = "gray93", bty = "l", family = "serif") # definindo parametros graficos
      
      pop_graph <- plot(x = data$tempo, y = data$ny, ylim = c(0,1.5), type = "n", 
                        main = "Gráfico da Densidade Populacional de i e j", xlab = "Tempo",
                        ylab = "Dens. populacional") # plotar grafico de densidade populacional de ni pelo tempo
      
      lines(x = data$tempo, y = data$ni, col = "red", lwd = 5) # adicionando linha com dados da populacao i
      lines(x = data$tempo, y = data$nj, col = "blue", lwd = 5) # adicionando linha com dados da populacao j
      
      legend(1, 1.5, legend = c("População i", "População j"), col = c("red", "blue"), lty=1:1, cex=0.7,
             text.font=2, bg='gray85') # adicionando legenda
      
      return(pop_graph) # retornar grafico final com tempo no eixo X e densidades pop. no eixo Y  
    }

}
05_curso_antigo/r2018/alunos/trabalho_final/lucas.camacho/simu_pop.txt · Última modificação: 2020/08/12 06:04 (edição externa)