Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2016:alunos:trabalho_final:gabrielbbarros:start

Gabriel Barros G. de Souza


co_pia_de_barros_15.jpg
Doutorando em Ecologia na Universidade Federal do Rio de Janeiro (UFRJ), fazendo parte da equipe do Laboratório de Biologia e Tecnologia Pesqueira (LBTP), sob coordenação e orientação do Dr. Marcelo Vianna. Meu projeto de pesquisa envolve o estudo da qualidade ecológica de estuários utilizando peixes demersais como modelos biológicos.

Currículo Lattes
gabrielbbarros@gmail.com


Meus Exercícios

Página com meus exercícios resolvidos: exec


Proposta de Trabalho Final


Plano A

Como plano principal, a função a ser criada servirá para calcular o Índice de Avaliação de Peixes Estuarinos (The Estuarine Fish Assessment Index - EFAI)1). O EFAI inclui métricas sobre a estrutura e função da comunidade (estrutura trófica e padrões de uso de habitat), bem como espécies-chave para avaliar impactos específicos de atividades antrópicas. Esse é um dos índices multimétricos que utilizarei na minha tese, na qual tenho o intuito de avaliar a adequação de diferentes índices multimétricos para utilização em dados de peixes de estuários tropicais.

Argumentos da Função

Para entrada da função, serão inseridos os seguintes argumentos:

(i) um objeto da classe data.frame que contenha colunas com os locais de amostragem (pontos) e as métricas do índice (riqueza de espécies, % de marinhos migrantes, % de indivíduos de espécies residentes estuarinas, número de espécies residentes estuarinas, % de indivíduos de espécies piscívoras, número de espécies piscívoras, espécies diádromas, espécies introduzidas, espécies sensíveis a distúrbio);

(ii) um argumento que indica a zona halina do corpo d'água, uma vez que ambientes estuarinos podem ser muito distintos no tamanho e nas caraterísticas abióticas.

Funcionamento e Saída da Função

A função calculará os seguintes aspectos:

(i) os scores dos pontos de amostragem, onde são somados os scores individuais de cada uma das métricas simples para se ter o score final

(ii) a qualidade ecológica de cada ponto de amostragem, definido a partir de classes de scores pré-definidos

Como resultado, será possível observar quais pontos de amostragem tem qualidade ecológica entre alta e ruim (alta, boa, moderada, pobre e ruim)Fonte.


Plano B

Como plano secundário, proponho criar uma função com o objetivo analisar o custo/benefício de métodos de amostragemMethods Research. Essa análise é essencial para a escolha do método que apresenta melhor balanço entre precisão dos dados obtidos e custos da amostragem. Tal função será baseada no índice de custo/benefício criado na minha dissertação (Analysis of Sampling Methods of Estuarine Benthic Macrofauna), o qual se baseou na precisão, deixando de lado a acurácia. Tal índice foi aplicado para macrofauna bentônica estuarina, mas pode ser utilizado para outros grupos biológicos de diferentes ecossistemas.

Argumentos da Função

Para entrada da função, serão inseridos os seguintes argumentos:

(i) um objeto da classe data.frame que contenha as unidades amostrais nas colunas e as espécies nas linhas, caso o método aborde o estudo de comunidades, ou um vetor numérico que contenha abundância de indivíduos de determinada espécie para cada unidade amostral (estudos de populações);

(ii) um argumento que indica o valor do custo por unidade amostral;

(iii) um argumento que indica o valor dos custos adicionais;

(iv) um argumento lógico para exclusão de NA.

Funcionamento e Saída da Função

A função calculará os seguintes aspectos:

(i) a precisão (p) das estimativas do número de indivíduos, a partir da seguinte fórmula:

p = SE / µ = (s / √n) / µ

no qual, SE é o erro padrão estimado a partir do desvio padrão (s) para determinado tamanho amostral (n), e µ é a média amostral. Precisão está inversamente relacionada aos valores da razão utilizada, sendo maior quando SE é pequeno relativo à média e menor quando o valor da razão aumenta2). Assim, o tratamento analisado com menor valor calculado fornece estimativas mais precisas.

(ii) o custo total (Ct) de cada método, através da multiplicação do custo de cada unidade amostral pelo número total de unidades, sendo somado pelos custos adicionais:

Ct = n * Cu + Ca

no qual, n é o número de pontos amostrados para cada procedimento, Cu é o custo para cada unidade amostral (i.e. tempo de amostragem, staff) e Ca são os custos adicionais, assumidos como valor gasto (aquisição dos equipamentos).

(iii) a razão custo-benefício (CB) dividindo-se o custo total pela precisão:

CB = (Ct / (1 - p)) / 1000

no qual, Ct é o custo total e p a precisão. Os valores serão divididos por 1000 para reduzir a escala do valor calculado.

Como resultado, quanto menor o custo e maior a precisão, menor será o valor calculado e, conseqüentemente, melhor a razão custo-benefício do tratamento analisado.

Comentários das Propostas Melina

em 28/abr/16

As duas propostas me parecem simples e relativamente fáceis de implementar. Na proposta A, faltou um pouco de informação de como você vai calcular o índice e a sua relação com os objetos de saída. Aliás, quais serão os objetos de saída? A proposta B parece igualmente razoável, também não deu pra sacar direito qual será o objeto de saída, mas está OK. Como as duas propostas estão mais ou menos no mesmo nível, escolha a que mais te interessar e mãos à obra!

Respostas Gabriel

Olá, Melina! Obrigado pelos comentários. Vou ficar com a Proposta A, pois não existe códigos para esse índice (pelo menos não encontrei até o momento) e esse é apenas um dos vários índices que utilizarei e para os quais precisarei criar códigos no R durante a minha tese. Respondendo a sua dúvida sobre essa proposta, o objeto de saída será o Score desse ponto de amostragem juntamente com a sua qualidade ecológica. Não descrevi detalhadamente a parte do cálculo do índice pq é bem densa, mas está tudo descrito no item 2.3 do artigo que citei no finalFonte. Basicamente, são definidos scores para cada uma das métricas simples e, por fim, esses scores são somados para se ter o score final que define a qualidade ecológica do local. Ainda pretendo voltar para a proposta B no futuro. Obrigado, mais uma vez. Abç.


Página de Ajuda

efai                package:none                R Documentation

Cálculo do Índice de Avaliação de Peixes Estuarinos (The Estuarine Fish Assessment Index - EFAI)

Description:

O EFAI inclui métricas sobre a estrutura e função da comunidade (estrutura trófica e padrões de uso de habitat),
bem como espécies-chave para avaliar impactos específicos de atividades antrópicas. São definidos scores para cada
uma das métricas simples e, por fim, esses scores são somados para se ter o score final que define a qualidade
ecológica do local.

Usage:

     efai(x, zona = TRUE)

Arguments:

x        Dataframe contendo 10 colunas: (i) os pontos de amostragem, (ii) riqueza de espécies, (iii) % de marinhos
         migrantes, (iv) % de indivíduos de espécies residentes estuarinas, (v) número de espécies residentes
         estuarinas, (vi) % de indivíduos de espécies piscívoras, (vii) número de espécies piscívoras, (viii)
         scores para espécies diádromas, (ix) scores para espécies introduzidas, (x) scores para espécies sensíveis
         a distúrbio. Caso os dados contemplem pontos em diferentes zonas halinas, uma última coluna deve ser
         inserida no dataframe contendo o valor da salinidade em cada ponto de amostragem.

zona     Valor lógico que indica se o data.frame contém dados de diferentes zonas halinas do corpo d'água, uma vez
         que ambientes estuarinos podem ser muito distintos no tamanho e nas caraterísticas abióticas. 

Details:

É necessário estruturar o dataframe corretamente antes de aplicar a função.

Exceto para riqueza de espécies, para a qual existem diferentes funções para calcula-la no R, as demais métricas
simples necessitam de literatura especializada para a caraterização trófica e de uso de habitat das espécies de
peixes.

A função não define os scores para as variáveis: espécies diádromas, espécies introduzidas e espécies sensíveis a
distúrbio. Essas variáveis foram subjetivamente caracterizadas por Cabral et al. (2012), de modo que as mesmas
precisam ser definidas e inseridas no dataframe previamente.

Value:

A função retorna um dataframe com 3 colunas: (i) pontos de amostragem, (ii) score final de cada ponto e, (iii)
qualidade ecológica (alta, boa, moderada, pobre e ruim).

Warning:

A função não é aplicável a matrizes usuais de abundância de espécies. Ocorrência de mensagem de erro se o primeiro
objeto não for um dataframe contendo as métricas especificadas.

Note:

Para grandes conjuntos de dados com série temporal, recomenda-se aplicar a função para cada período amostral, de
modo a permitir uma melhor visualização dos resultados. Posteriormente podem ser gerados gráficos comparativos
entre pontos de amostragem por período amostral.

Author(s):

Gabriel Barros G. de Souza
gabrielbbarros@gmail.com

References:

- Cabral, H.N.; Fonseca, V.F.; Gamito, R.; Gonçalves, C.I.; Costa, J.L.; Erzini, K.; Gonçalves, J.; Martins, J.;
Leite, L.; Andrade, J.P.; Ramos, S.; Bordalo, A.; Amorim, E.; Neto, J.M.; Marques, J.C.; Rebelo, J.E.; Silva, C.;
Castro, N.; Almeida, P.R.; Domingos, I.; Gordo, L.S.; Costa, M.J. (2012) Ecological quality assessment of
transitional waters based on fish assemblages in Portuguese estuaries: The Estuarine Fish Assessment Index (EFAI).
Ecological Indicators, 19:144-153
- Karr, J.R., Fausch, K.D., Angermeier, P.L., Yant, P.R., Schlosser, I.J. 1986. Assessment biological integrity in
running waters: a method and its rationale. Illinois Natu- ral, History Survey Special Publication 5, Champaign,
IL, USA.

See Also:

Pacotes que calculam algumas métricas simples para comunidades estuarinas e marinhas: 'mizer', 'BEQI2',
'fishmethods'.

Examples:

pontos <- c(1:10)
richness <- rep(seq(50,90,by=10),each=2)
mar.migr <- c(rep(c(1,5),each=3),7,2,1,1)
est.esp.1 <- c(rep(c(10,25),each=3),50,75,90,10)
est.esp.2 <- c(5,5,6,15,17,18,40,60,81,5)
p1 <- c(rep(c(80,55),each=3),20,10,2,80)
p2 <- c(40,40,38,31,36,36,16,8,2,40)
diad <- rep(1,length.out=10)
introd <- rep(1,length.out=10)
disturb <- c(rep(seq(1,5,by=2),each=3),1)
salin <- c(rep(seq(4,30,by=13),each=3),4)

dados <- data.frame(pontos,richness,mar.migr,est.esp.1,est.esp.2,p1,p2,diad,introd,disturb,salin) # diferentes
zonas halinas
efai(dados)

dados2 <- data.frame(pontos,richness,mar.migr,est.esp.1,est.esp.2,p1,p2,diad,introd,disturb) # sem zonas halinas
efai(dados2,zona=FALSE)

Código da Função

########## Função EFAI ##########

efai <- function (x, zona = TRUE) # atribui ao objeto 'efai' a classe 'function' com os argumentos x
{ # inicia o codigo da funcao
  if(is.data.frame(x) == F) # verifica se a classe do objeto ‘x' contem um data.frame
  {
    cat("\n ‘x' precisa ser um data.frame.\n") # pare a funcao se a condicao acima for atendida, retornando a mensagem de erro
  }
  sr <- rep(NA, length(x[,2])) # cria um objeto para incluir os dados de scores para Species Richness (SR)
  mm <- rep(NA, length(x[,3])) # cria um objeto para incluir os dados de scores para percentual de Marine Migrants (MM)
  es.1 <- rep(NA, length(x[,4])) # cria um objeto para incluir os dados de scores para percentual de Estuarine Species (ES)
  es.2 <- rep(NA, length(x[,5])) # cria um objeto para incluir os dados de scores para numero de Estuarine Species (ES)
  p1 <- rep(NA, length(x[,6])) # cria um objeto para incluir os dados de scores para percentual de Piscivore Species (P)
  p2 <- rep(NA, length(x[,6])) # cria um objeto para incluir os dados de scores para numero de Piscivore Species (P)
  if(zona == TRUE) # se o argumento zona for verdadeiro (default), os dados serão analisados considerando diferentes zonas halinas
  {
    for(j in 1:length(x[,11])) # criando ciclo para zonas oligohalinas
    if(x[j,11]<5) ## se os dados se referem a zonas oligohalinas
    {
    for(i in 1:length(x[,2])) # criando ciclo para valor de Species Richness (SR)
      {
        if(x[i,2]<=3) # se o valor de SR é menor ou igual a 3
        {
          sr[i] = 1 # atribuir o score 1
        }
        if(x[i,2]>=4 & x[i,2]<=8) # se o valor de SR está entre 4 e 8
        { 
          sr[i] = 3 # atribuir o score 3
        }
        if(x[i,2]>8) # se o valor de SR é maior que 8
        {
          sr[i] = 5 # atribuir o score 5
        }
      }
    for(i in 1:length(x[,3])) # criando ciclo para percentual de Marine Migrants (MM)
      {
        if(x[i,3]<=10) # se o percentual de MM é menor ou igual a 10%
        {
          mm[i] = 1 # atribuir o score 1
        }
        if(x[i,3]>10 & x[i,3]<50) # se o percentual de MM está entre 10-50%
        { 
          mm[i] = 3 # atribuir o score 3
        }
        if(x[i,3]>=50) # se o percentual de MM é maior ou igual a 50%
        {
          mm[i] = 5 # atribuir o score 5
        }
      }
    for(i in 1:length(x[,4])) # criando ciclo para percentual de Estuarine Species (ES)
      {
        if(x[i,4]<=10 || x[,4]>90) # se o percentual de ES é menor ou igual a 10% ou maior que 90%
        {
          es.1[i] = 1 # atribuir o score 1
        }
        if(x[i,4]>10 & x[i,4]<=30 || x[i,4]>=70 & x[i,4]<=90) # se o percentual de ES está entre 10-30% ou ou entre 70-90%
        { 
          es.1[i] = 3 # atribuir o score 3
        }
        if(x[i,4]>30 & x[i,4]<70) # se o percentual de ES está entre 30-70%
        {
          es.1[i] = 5 # atribuir o score 5
        }
      }
    for(i in 1:length(x[,6])) # criando ciclo para percentual de Piscivore Species (P)
      {
        if(x[i,6]<=10 || x[i,6]>90) # se o percentual de P é menor ou igual a 10% ou maior que 90%
        {
          p1[i] = 1 # atribuir o score 1
        }
        if(x[i,6]>10 & x[i,6]<=30 || x[i,6]>=70 & x[i,6]<=90) # se o percentual de ES está entre 10-30% ou ou entre 70-90%
        { 
          p1[i] = 3 # atribuir o score 3
        }
        if(x[i,6]>30 & x[i,6]<70) # se o percentual de ES está entre 30-70%
        {
          p1[i] = 5 # atribuir o score 5
        }
      }
    for(i in 1:length(x[,7])) # criando ciclo para número de Piscivore Species (P)
      {
        if(x[i,7]<=1) # se o número de P2 é menor ou igual a 1
        {
          p2[i] = 1 # atribuir o score 1
        }
        if(x[i,7]==2) # se o número de P2 é 2
        { 
          p2[i] = 3 # atribuir o score 3
        }
        if(x[i,7]>2) # se o número de P2 é maior que 2
        {
          p2[i] = 5 # atribuir o score 5
        }
      }
    }
    es.2 <- NULL # removendo esse vetor, pois não existem scores para o número de ES para zonas oligohalinas
    for(j in 1:length(x[,11]))  # criando ciclo para zonas mesohalinas
    if(x[j,11]>=5 & x[j,11]<=18) ## se os dados se referem a zonas mesohalinas
    {
      for(i in 1:length(x[,2])) # criando ciclo para valor de Species Richness (SR)
      {
        if(x[i,2]<=4) # se o valor de SR é menor ou igual a 4
        {
          sr[i] = 1 # atribuir o score 1
        }
        if(x[i,2]>=5 & x[i,2]<=10) # se o valor de SR está entre 5 e 10
        { 
          sr[i] = 3 # atribuir o score 3
        }
        if(x[i,2]>10) # se o valor de SR é maior que 10
        {
          sr[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,3])) # criando ciclo para percentual de Marine Migrants (MM)
      {
        if(x[i,3]<=10) # se o percentual de MM é menor ou igual a 10%
        {
          mm[i] = 1 # atribuir o score 1
        }
        if(x[i,3]>10 & x[i,3]<50) # se o percentual de MM está entre 10-50%
        { 
          mm[i] = 3 # atribuir o score 3
        }
        if(x[i,3]>=50) # se o percentual de MM é maior ou igual a 50%
        {
          mm[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,4])) # criando ciclo para percentual de Estuarine Species (ES)
      {
        if(x[i,4]<=10 || x[,4]>90) # se o percentual de ES é menor ou igual a 10% ou maior que 90%
        {
          es.1[i] = 1 # atribuir o score 1
        }
        if(x[i,4]>10 & x[i,4]<=30 || x[i,4]>=70 & x[i,4]<=90) # se o percentual de ES está entre 10-30% ou ou entre 70-90%
        { 
          es.1[i] = 3 # atribuir o score 3
        }
        if(x[i,4]>30 & x[i,4]<70) # se o percentual de ES está entre 30-70%
        {
          es.1[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,5])) # criando ciclo para número de Estuarine Species (ES)
      {
        if(x[i,5]<=1) # se o número de ES2 é menor ou igual a 1
        {
          es.2[i] = 1 # atribuir o score 1
        }
        if(x[i,5]>=2 & x[i,5]<3) # se o número de ES2 está entre 2 e 3
        { 
          es.2[i] = 3 # atribuir o score 3
        }
        if(x[i,5]>3) # se o número de ES2 é maior que 3
        {
          es.2[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,6])) # criando ciclo para percentual de Piscivore Species (P)
      {
        if(x[i,6]<=10 || x[i,6]>90) # se o percentual de P é menor ou igual a 10% ou maior que 90%
        {
          p1[i] = 1 # atribuir o score 1
        }
        if(x[i,6]>10 & x[i,6]<=30 || x[i,6]>=70 & x[i,6]<=90) # se o percentual de ES está entre 10-30% ou ou entre 70-90%
        { 
          p1[i] = 3 # atribuir o score 3
        }
        if(x[i,6]>30 & x[i,6]<70) # se o percentual de ES está entre 30-70%
        {
          p1[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,7])) # criando ciclo para número de Piscivore Species (P)
      {
        if(x[i,7]<=1) # se o número de P2 é menor ou igual a 1
        {
          p2[i] = 1 # atribuir o score 1
        }
        if(x[i,7]==2 & x[i,7]==3) # se o número de P2 está entre 2 e 3
        { 
          p2[i] = 3 # atribuir o score 3
        }
        if(x[i,7]>3) # se o número de P2 é maior que 3
        {
          p2[i] = 5 # atribuir o score 5
        }
      }
    }
    for(j in 1:length(x[,11])) # criando ciclo para zonas polihalinas
    if(x[j,11]>18) ## se os dados se referem a zonas polihalinas
    {
      for(i in 1:length(x[,2])) # criando ciclo para valor de Species Richness (SR)
      {
        if(x[i,2]<=5) # se o valor de SR é menor ou igual a 5
        {
          sr[i] = 1 # atribuir o score 1
        }
        if(x[i,2]>=6 & x[i,2]<=15) # se o valor de SR está entre 6 e 15
        { 
          sr[i] = 3 # atribuir o score 3
        }
        if(x[i,2]>15) # se o valor de SR é maior que 15
        {
          sr[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,3])) # criando ciclo para percentual de Marine Migrants (MM)
      {
        if(x[i,3]<=10) # se o percentual de MM é menor ou igual a 10%
        {
          mm[i] = 1 # atribuir o score 1
        }
        if(x[i,3]>10 & x[i,3]<50) # se o percentual de MM está entre 10-50%
        { 
          mm[i] = 3 # atribuir o score 3
        }
        if(x[i,3]>=50) # se o percentual de MM é maior ou igual a 50%
        {
          mm[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,4])) # criando ciclo para percentual de Estuarine Species (ES)
      {
        if(x[i,4]<=10 || x[,4]>90) # se o percentual de ES é menor ou igual a 10% ou maior que 90%
        {
          es.1[i] = 1 # atribuir o score 1
        }
        if(x[i,4]>10 & x[i,4]<=30 || x[i,4]>=70 & x[i,4]<=90) # se o percentual de ES está entre 10-30% ou ou entre 70-90%
        { 
          es.1[i] = 3 # atribuir o score 3
        }
        if(x[i,4]>30 & x[i,4]<70) # se o percentual de ES está entre 30-70%
        {
          es.1[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,5])) # criando ciclo para número de Estuarine Species (ES)
      {
        if(x[i,5]<=2) # se o número de ES2 é menor ou igual a 2
        {
          es.2[i] = 1 # atribuir o score 1
        }
        if(x[i,5]>=3 & x[i,5]<=5) # se o número de ES2 está entre 3 e 5
        { 
          es.2[i] = 3 # atribuir o score 3
        }
        if(x[i,5]>5) # se o número de ES2 é maior que 5
        {
          es.2[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,6])) # criando ciclo para percentual de Piscivore Species (P)
      {
        if(x[i,6]<=10 || x[i,6]>90) # se o percentual de P é menor ou igual a 10% ou maior que 90%
        {
          p1[i] = 1 # atribuir o score 1
        }
        if(x[i,6]>10 & x[i,6]<=30 || x[i,6]>=70 & x[i,6]<=90) # se o percentual de ES está entre 10-30% ou ou entre 70-90%
        { 
          p1[i] = 3 # atribuir o score 3
        }
        if(x[i,6]>30 & x[i,6]<70) # se o percentual de ES está entre 30-70%
        {
          p1[i] = 5 # atribuir o score 5
        }
      }
      for(i in 1:length(x[,7])) # criando ciclo para número de Piscivore Species (P)
      {
        if(x[i,7]<=2) # se o número de P2 é menor ou igual a 2
        {
          p2[i] = 1 # atribuir o score 1
        }
        if(x[i,7]>=3 & x[i,7]<=5) # se o número de P2 está entre 3 e 5
        { 
          p2[i] = 3 # atribuir o score 3
        }
        if(x[i,7]>5) # se o número de P2 é maior que 5
        {
          p2[i] = 5 # atribuir o score 5
        }
      }
    }
  }
  else # se o argumento zona for falso
  {
    for(i in 1:length(x[,2])) # criando ciclo para valor de Species Richness (SR)
    {
      if(x[i,2]<=10) # se o valor de SR é menor ou igual a 10
      {
        sr[i] = 1 # atribuir o score 1
      }
      if(x[i,2]>=11 & x[i,2]<=20) # se o valor de SR está entre 11 e 20
      { 
        sr[i] = 3 # atribuir o score 3
      }
      if(x[i,2]>20) # se o valor de SR é maior que 20
      {
        sr[i] = 5 # atribuir o score 5
      }
    }
    for(i in 1:length(x[,3])) # criando ciclo para percentual de Marine Migrants (MM)
    {
      if(x[i,3]<=10) # se o percentual de MM é menor ou igual a 10%
      {
        mm[i] = 1 # atribuir o score 1
      }
      if(x[i,3]>10 & x[i,3]<50) # se o percentual de MM está entre 10-50%
      { 
        mm[i] = 3 # atribuir o score 3
      }
      if(x[i,3]>=50) # se o percentual de MM é maior ou igual a 50%
      {
        mm[i] = 5 # atribuir o score 5
      }
    }
    for(i in 1:length(x[,4])) # criando ciclo para percentual de Estuarine Species (ES)
    {
      if(x[i,4]<=10 || x[,4]>90) # se o percentual de ES é menor ou igual a 10% ou maior que 90%
      {
        es.1[i] = 1 # atribuir o score 1
      }
      if(x[i,4]>10 & x[i,4]<=30 || x[i,4]>=70 & x[i,4]<=90) # se o percentual de ES está entre 10-30% ou ou entre 70-90%
      { 
        es.1[i] = 3 # atribuir o score 3
      }
      if(x[i,4]>30 & x[i,4]<70) # se o percentual de ES está entre 30-70%
      {
        es.1[i] = 5 # atribuir o score 5
      }
    }
    for(i in 1:length(x[,5])) # criando ciclo para número de Estuarine Species (ES)
    {
      if(x[i,5]<=2) # se o número de ES2 é menor ou igual a 2
      {
        es.2[i] = 1 # atribuir o score 1
      }
      if(x[i,5]>=3 & x[i,5]<=5) # se o número de ES2 está entre 3 e 5
      { 
        es.2[i] = 3 # atribuir o score 3
      }
      if(x[i,5]>5) # se o número de ES2 é maior que 5
      {
        es.2[i] = 5 # atribuir o score 5
      }
    }
    for(i in 1:length(x[,6])) # criando ciclo para percentual de Piscivore Species (P)
    {
      if(x[i,6]<=10 || x[i,6]>90) # se o percentual de P é menor ou igual a 10% ou maior que 90%
      {
        p1[i] = 1 # atribuir o score 1
      }
      if(x[i,6]>10 & x[i,6]<=30 || x[i,6]>=70 & x[i,6]<=90) # se o percentual de ES está entre 10-30% ou ou entre 70-90%
      { 
        p1[i] = 3 # atribuir o score 3
      }
      if(x[i,6]>30 & x[i,6]<70) # se o percentual de ES está entre 30-70%
      {
        p1[i] = 5 # atribuir o score 5
      }
    }
    for(i in 1:length(x[,7])) # criando ciclo para número de Piscivore Species (P)
    {
      if(x[i,7]<=5) # se o número de P2 é menor ou igual a 5
      {
        p2[i] = 1 # atribuir o score 1
      }
      if(x[i,7]>=6 & x[i,7]<=12) # se o número de P2 está entre 6 e 12
      { 
        p2[i] = 3 # atribuir o score 3
      }
      if(x[i,7]>12) # se o número de P2 é maior que 12
      {
        p2[i] = 5 # atribuir o score 5
      }
    }
  }
  x.scores <- data.frame(sr, mm, es.1, es.2, p1, p2, x[,8], x[,9], x[,10]) # cria um dataframe com os scores calculados e fornecidos
  score.final <- apply(x.scores, 1, sum) # soma os scores para cada ponto amostral
  quality <- rep(NA, length(score.final)) # cria um objeto para incluir a qualidade ecologica dos scores finais para cada ponto de amostragem
  for(k in 1:length(score.final)) # loop para compor o vetor de qualidade ecológica para os pontos de amostragem
  {
    if(score.final[k]>=7 & score.final[k]<=10) # se o score estiver entre os valores 7 e 10
    {
      quality[k]="bad" # atribuir o termo "bad"
    }
    if(score.final[k]>=11 & score.final[k]<=14) # se o score estiver entre os valores 11 e 14
    {
      quality[k]="poor" # atribuir o termo "poor"
    }
    if(score.final[k]>=15 & score.final[k]<=20) # se o score estiver entre os valores 15 e 20
    {
      quality[k]="moderate" # atribuir o termo "moderate"
    }
    if(score.final[k]>=21 & score.final[k]<=29) # se o score estiver entre os valores 21 e 29
    {
      quality[k]="good" # atribuir o termo "good"
    }
    if(score.final[k]>=30 & score.final[k]<=35) # se o score estiver entre os valores 30 e 35
    {
      quality[k]="high" # atribuir o termo "high"
    }
  }
  resulta <- data.frame(x[,1], score.final, quality) # dataframe do resultado com 3 colunas: (i) pontos de amostragem, (ii) score final de cada ponto e, (iii) qualidade ecológica
  names(resulta) <- c("Pontos de Amostragem", "Score", "Qualidade Ecológica") # nomeia as colunas do resultado
  return(resulta) # retorna o dataframe do resultado 
} # encerra o codigo da funcao

Arquivo da Função

Script da Função EFAI: efai.index.r

Script do Exemplo: exemplo.data.r

1)
Cabral, H.N.; Fonseca, V.F.; Gamito, R.; Gonçalves, C.I.; Costa, J.L.; Erzini, K.; Gonçalves, J.; Martins, J.; Leite, L.; Andrade, J.P.; Ramos, S.; Bordalo, A.; Amorim, E.; Neto, J.M.; Marques, J.C.; Rebelo, J.E.; Silva, C.; Castro, N.; Almeida, P.R.; Domingos, I.; Gordo, L.S.; Costa, M.J. (2012) Ecological quality assessment of transitional waters based on fish assemblages in Portuguese estuaries: The Estuarine Fish Assessment Index (EFAI). Ecological Indicators, 19:144-153
2)
Andrew, N.L. & Mapstone, B.D. (1987) Sampling and the description of spatial pattern in marine ecology. Oceanography and Marine Biology - An Annual Review, 25:39-90
05_curso_antigo/r2016/alunos/trabalho_final/gabrielbbarros/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)