Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2016:alunos:trabalho_final:bianca_vendramini:start

Bianca de Medeiros Vendramini

captura_de_tela_2015-05-31_20.24.06.png

Bióloga pela UFSCar campus Sorocaba, atualmente é mestranda em Ecologia, orientada pela professora Ana Lúcia Brandimarte. Desenvolve pesquisa na área de ecologia de riachos, tendo como tópico de interesse em sua tese a relação e padrão de colonização dos macroinvertebrados aquáticos com a decomposição foliar em diferentes fisionomias vegetais.

Meus Exercícios

Trabalho Final

Proposta A

Índices Bióticos para avaliação de qualidade da água tem sido implementados com frequência, como ferramentas para caracterizar os corpos d'água. Parte das inferências mais comuns são feitas em relação à composição de Famílias de macroinvertebrados presentes no ambiente como indicadores, classificando-as em um gradiente que vai desde Famílias resistentes a poluição, até aquelas mais sensíveis a alterações ambientais. A partir dessa abordagem a caracterização torna-se mais completa, indo além dos parâmetros físico químicos, para acessar também a diversidade da fauna e suas particularidades ecológicas.

Tendo cada Família uma pontuação atribuída em um ranking, torna-se possível a soma das pontuações, que permite classificar o ambiente analisado em classes de qualidade da água (variam em forma de cálculo e em número de classes para cada índice, de forma que alguns se calculam por dados de presença/ausência das famílias e outros por proporção de indivíduos).

Usando como dados de entrada um data frame com colunas referentes à localidade de coleta, família e número de indivíduos,a proposta da função será calcular todos os índices mais comuns(1-Biological Monitoring Working Party (BMWP); 2-Average Scopre per Taxon (ASPT); 3-Índice Biótico de Famílias (IBF); 4- Porcentagem de EPT (Ephemeroptera,Plecoptera e Trichoptera); 5-Relação EPT/Chironomidae) a partir dos dados inseridos e ranks pré-definidos na função segundo a literatura, e retornar ao usuário uma lista com os valores referentes a pontuação e classificação gerada por cada índice, tal como a representação gráfica desses dados para que o usuário possa compará-los e analisar qual melhor representa seus resultados.

Não entendi oq a função faria. Ela recebe os rankings e soma? É isso? Ou a ideia é calcular os ranks e depois uma série de indices a partir deles?

Como seriam os dados de entrada? Oq são os ranks?

Acho que tem futuro, mas é simples e ainda não está claro oq vc quer fazer. Tente reescrever pensando nesses aspectos mais práticos. Qq coisa pode perguntar aqui ou no forum!

Valeu,

—-Ogro

Oi Diogro! A ideia é que a função fizesse os cálculos e gerasse os índices sim, não apenas recebesse os dados!

Os ranks consistem em pontuar as famílias de acordo com seu nível de tolerância a alterações ambientais, e isso já é conhecido (não por número de indivíduos, e sim por ocorrência ou não da família. Que quanto mais rara, pontua um rank mais alto), e depois somar o de todas as famílias encontradas, e verificar em que intervalo de qualidade ela se encontra, o que varia de um índice para o outro. Então os dados de entrada seriam basicamente os pontos de coleta,o nome da família encontrada e a quantidade de cada um (que se aplica apenas aos dois últimos índices que citei na proposta, que fazem cálculos de proporção e não com base em ranks).

Obrigada pelo direcionamento!!

Bacana, então seus dados de entrada são um data frame com colunas para numero, especie e localidade. Vc vai calcular um rank para cada especie baseado no numero de localidades onde ela aparece, e, usando o rank e a abundancia por localidade, calcular uma série de indices.

Parece ok.

Vc pode escolher entra fazer uma função que calcula um índice escolhido pelo usuário, ou todos os indices e devolve uma tabela. Talvez um saída gráfica de índice por espécie tb seja uma boa opção.

Valeu,

—-Ogro

Proposta B

No ambiente aquático, a análise da perda de massa em experimentos de degradação foliar é calculada por um modelo exponencial negativo, em que é possível verificar a perda de massa vegetal ao longo do tempo de exposição. O cálculo é feito a partir de: Wt=Wo*e-kt Onde: Wt se refere a massa vegetal remanescente no tempo t; Wo à massa inicial; K ao coeficiente de decomposição (dias-1) O valor de k é calculado por: -k= log(%R/100)/t Na qual %R se refere a porcentagem de material foliar remanescente, Em log10 (x+1).

A função proposta realizaria esses cálculos (gerados a partir das médias das réplicas de cada ponto amostral), retornando ao usuário a perda de massa ao longo do tempo, o coeficiente de decaimento e o seu enquadramento nos intervalos: Degradação Rápida (k>0,0173 d^-1); Degradação Intermediária 0,0041>k<0,0173 d^-1, e Degradação Lenta (k<0,0041 d^-1), além do erro e desvio padrão. Para comparação entre as curvas,a função fará o teste de Tukey.

A ideia é receber os dados de decaimento e ajustar uma exponencial? Se é isso pq usar a média de cada ponto? Usar todas as medidas de cada ponto te daria uma ideia melhor do erro associado à estimativa da curva.

No geral é uma boa proposta, e se tiver uma saída gráfica bacana pode ser bem útil. Seria legal também eventualmente incluir um teste de diferença entre duas curvas? Tem interesse nisso?

Valeu!

—-Ogro

Tem razão Diogro, faz sentido usar as medidas de cada ponto!Obrigada. Quanto ao teste, você tem razão, esqueci de incluir na proposta antes, mas o planejado seria fazer um teste de Tukey para comparar as curvas.Tenho interesse sim, torna o dado mais completo e melhora a análise!

Novamente, obrigada!!

Help da Função

macroinvert.index                package:unknown                R Documentation

  Cálculo de índices relacionados a utilização de macroinvertebrados
  como indicadores da qualidade da água, retornando um data.frame com
  os valores de cada índice e a classificação que indicam, para análise comparativa.
  
  Description:
  
  A função fornece a comparação dos dados de dois ambientes, através do cálculos 
  dos índices BMWP, ASPT,IBF, EPT(número de familias), EPT(porcentagem) e relação EPT/Chironomidae.
  
    
  Usage:
  
  macroinver.index(indice.data)
  
  Arguments:
  
  indice.data: Objeto de classe data.frame que contenha dados de nome do local,ordem, familia,quantidades e rankings(para BMWP e IBF).
  
  Details:
  
  Os componentes do data.frame são as seguintes colunas:
    
  local1 e local2: nome dos ambientes analisados
  
  ordem1 e ordem2: ordens de macroinvertebrados aquáticos de cada ambiente
  
  familia1 e familia2: famílias de macroinvertebrados aquáticos de cada ambiente
  
  quantidade1 e quantidade2: quantidades de organismos para cada família em cada ambiente
  
  rankBMWP1 e rankBMWP2:scores de BMWP para as famílias de cada ambiente (atribuidos pelo usuário de acordo com a bibliografia que deseja seguir)
  
  rankIBF1 e rankIBF2:scores de IBF para as famílias de cada ambiente (atribuidos pelo usuário de acordo com a bibliografia que deseja seguir)
  
  Value:
  
  Os valores retornados no data.frame, com seus respectivos significados, são:
  - Índice BMWP : calculado a partir da soma da pontuação dos scores para cada 
  familia amostrada (baseado apenas em presença e ausência);
  Pode retornar as classes: Qualidade Ótima(maior de 150), Qualidade Boa(entre 121 e 150); Qualidade Aceitável(entre 101 e 120); Qualidade Duvidosa (entre 61 e 100),Água Poluída(entre 36 e 60),Água Muito Poluída(entre 16 e 35) 
  
  - Índice ASPT : calculado a partir do resultado obtido em BMWP, dividido
  pelo número de famílias amostradas (como forma de reduzir a influência do tamanho amostral);
  Pode retornar as classes: Qualidade Muito Boa (acima de 7),Qualidade Boa (entre 6 e 7), Qualidade Intermediária(entre 5 e 5.9),Qualidade Ruim(entre 4 e 4.9),Qualidade Muito Ruim (abaixo de 4)
  
  - IBF:calculado a partir da soma da quantidade de organismos * seu score / quantidade total de organismos;
  Pode retornar as classes: Qualidade Excelente( entre 0 e 3.5),Qualidade Muito Boa (entre 3.51 e 4.5), Qualidade Boa (entre 4.51 e 5.5),Qualidade Razoável(entre 5.51 e 6.5),Qualidade Razoavelmente Ruim(entre 6.51 e 7.50), Qualidade Ruim (entre 7.51 e 8.50),Qualidade Muito Ruim (entre 8.51 e 10 pra cima)
  
  - EPT: calculado com a soma do número de famílias pertencentes às ordens Ephemeroptera,Plecoptera e Trichoptera,
  reconhecidamente bioindicadoras de qualidade de água boa (por serem sensíveis a distúrbios ambientais);
  Pode retornar as classes: Excelente(acima de 27),Bom(entre 21 e 27), Médio(14 e 20),Razoável(entre 7 e 13),Pobre(entre 0 e 6)
  
  - EPT/total : calculado pela quantidade de EPT em relação ao total amostral;
  Pode retornar as classes: Qualidade Muito Boa (acima de 80%),Qualidade Boa (entre 50% e 80%),Qualidade Média(entre 20% e 50%),Qualidade Ruim (abaixo de 20%) 
  
  - EPT/Chironomidae:calculado pela quantidade de organismos das ordens EPT (sensíveis) dividido pela quantidade
  de organismos da familia Chironomidae (resistente a alteração ambiental);
  Pode retornar as classes: Alteração Ambiental (se menor que 1), Ambiente Estável(se maior que 1)   
  
  Author(s):
  
  Bianca de Medeiros Vendramini (bianca_vendramini@hotmail.com)
  
  References:
  
    -Índice utilizado pela prefeitura do Paraná:http://www.meioambiente.pr.gov.br/modules/conteudo/conteudo.php?conteudo=91
    -Índice EPT, segundo o Instito Científico de Bacias Hidrográficas:http://ftp.wcc.nrcs.usda.gov/ftpref/wntsc/strmRest/wshedCondition/EPTIndex.pdf
    -Silva, F.H; Favero, S; Sabino,J;Garnés,S.J.A. 2011. Índices bióticos para avaliação de qualidade ambiental em trechos do rio Correntoso, Pantanal do Negro,
    Estado do Mato Grosso do Sul, Brasil Acta Scientiarum Biological Sciences. 33(3):289-299.
    -Ouse & Adur Rivers Trust:http://www.oart.org.uk/our-work/projects/water-quality/biological-monitoring
    -Scores,metodos e protocolos:http://citeseerx.ist.psu.edu/viewdoc/downloaddoi=10.1.1.516.2776&rep=rep1&type=pdf
    -Hannaford,M.J;Resh,V.H.1995. Variability in macroinvertebrate rapid-bioassessment surveys and habitat assessments in a northern California stream.Journal of The North American Benthological.14(3):430-439.
    -Rapid Bioassessment Protocols:https://nepis.epa.gov/Exe/ZyPDF.cgi/20004OQK.PDF?Dockey=20004OQK.PDF
  
  See Also:
  
  pacote "biotic" também realiza cálculo de BMWP e ASPT.
  
  Examples:
    
  ##Simulando dados para entrada em um data.frame:
  #Dados para ambiente1
  local1 = rep("Lagoa",4)
  ordem1 = c("Diptera","Plecoptera","Coleoptera","Ephemeroptera")
  familia1 = c("Chironomidae","Perlidae","Elmidae","Baetidae")
  quantidade1= c(23,5,8,12)
  rankBMWP1= c(2,10,6,5)
  rankIBF1 = c(6,1,4,4)
  indice.ambiente1= data.frame(local1,ordem1,familia1,quantidade1,rankBMWP1,rankIBF1)
  indice.ambiente1 #Unindo tudo em um data.frame

  #Dados para ambiente2    
  local2 = rep("Rio",4)
  ordem2= c("Ephemeroptera","Anisoptera","Diptera","Plecoptera")
  familia2 = c("Baetidae","Gomphidae","Chironomidae","Perlidae")
  quantidade2= c(10,15,8,5)
  rankBMWP2= c(5,8,2,10)
  rankIBF2= c(4,1,6,1)
  indice.ambiente2= data.frame(local2,ordem2,familia2,quantidade2,rankBMWP2,rankIBF2)
  indice.ambiente2 #Unindo tudo em um data.frame
  
  #data.frame unindo os dados do ambiente 1 e 2
  indice.data = data.frame(indice.ambiente1,indice.ambiente2)
  indice.data #data.frame pronto para ser inserido na função

  macroinver.index(indice.data) #Testando a função e seu retorno   

Função (macroinver.index)

################################################################
##################Função macroinvert.index######################
################################################################
macroinver.index = function(indice.data) #Input: dados em formato data.frame
{
  if(is.data.frame(indice.data)==FALSE) #Teste lógico para saber se o objeto de entrada é um data frame.
  {
  stop("É necessário que os arquivos de input sejam do tipo data.frame") #Mensagem de erro caso não seja um data.frame
  }
#############Apresentando os dados graficamente#################
Q=c(indice.data$quantidade1,indice.data$quantidade2) #atribuindo os valores de quantidade de ambos os locais a um vetor
locais= c(local1,local2) #atribuindo os nomes de locais a um vetor
minimo= min(Q) #definindo o menor valor dentre as quantidades (para usar como limite no plot)
maximo = max(Q) #definindo o maior valor entre as quantidades (para usar como limite no plot)
boxplot(Q~locais,xlab="Local",ylab="Quantidade de organismos",ylim=c(minimo,maximo)) #plotando os dados da quantidade para visualização do usuário
#######################################
####Inicio dos calculos para local1####
#######################################  
  for(local1 in indice.data) #indicando que as operações seguintes só serão feitas para o local1
{
#######Calculando o indice BMWP para o local1########  
  BMWP = sum(indice.data$rankBMWP1) #Calculando o índice BMWP com base na somatória dos scores (sem levar em conta quantidade,apenas presença ou ausência)
  if(BMWP>150) # Se o valor se encaixa nessa condição...
  {
    resultadoBMWP1 = c(BMWP,"Qualidade Ótima") #...essa resposta é devolvida. Caso contrário, o valor segue para as próximas condições até se encaixar.
  }
  if(BMWP>121 & BMWP<150)
  {
    resultadoBMWP1 = c(BMWP,"Qualidade Boa")
  }
  if(BMWP>101 & BMWP<120)
  {
    resultadoBMWP1 = c(BMWP,"Qualidade Aceitável")
  }
  if (BMWP>61 & BMWP<100)
  {
    resultadoBMWP1 = c(BMWP,"Qualidade Duvidosa")
  }
  if (BMWP>36 & BMWP<60)
  {
    resultadoBMWP1 = c(BMWP,"Água Poluída")
  }
  if (BMWP>16 & BMWP<35)
  {
    resultadoBMWP1 = c(BMWP,"Água Muito Poluída")
  }
  if(BMWP<16)
  {
    resultadoBMWP1 = c(BMWP,"Água Fortemente Poluída")
  } #fim da verificação e do cálculo de BMWP
###############Calculo do indice BMWP-ASPT para o local1###############
familiasASPT1 = length(indice.data$rankBMWP1)# É calculado através do score BMWP/numero de familias coletadas, 
#como forma de reparar a falha do BMWP original em sofrer muito efeito do tamanho amostral
ASPT = round((BMWP/familiasASPT1),2) #arredondando os valores para duas casas decimais
  if (ASPT>7) #Verificando em qual condição o valor se encaixa
  {
    resultadoASPT1 = c(ASPT, "Qualidade Muito Boa")
  }
  if (ASPT>6 & ASPT<7)
  {
    resultadoASPT1 = c(ASPT,"Qualidade Boa")
  }
  if (ASPT>5 & ASPT<5.9)
  {
    resultadoASPT1 = c(ASPT,"Qualidade Intermediária")
  }
  if (ASPT>4 & ASPT<5)
  {
    resultadoASPT1 = c(ASPT,"Qualidade Ruim")
  }
  if (ASPT<4)
  {
    resultadoASPT1 = c(ASPT,"Qualidade Muito Ruim")
  } #fim da verificação e do cálculo de ASPT
##############Calculo de IBF - Indice Biotico por Familia para local1########
soma1 = sum(indice.data$quantidade1 * indice.data$rankIBF1) #soma da quantidade de organismos por familia*pontuação
total1 = sum(indice.data$quantidade1) #calculando o numero total de organismos amostrado
IBF = soma1/total1 #Calculando o índice, baseado nos dois parâmetros calculados acima
IBF=round(IBF,2) #arredondando o valor para 2 casas decimais
  if(IBF>0 & IBF<3.5) #Verificando em qual condição e classificação o resultado se encaixa
  {
    resultadoIBF1 = c(IBF, "Qualidade Excelente")
  }
  if(IBF>3.51 & IBF<4.5)
  {
    resultadoIBF1 = c(IBF,"Qualidade Muito Boa")
  }
  if(IBF>4.51 & IBF<5.5)
  {
    resultadoIBF1 = c(IBF,"Qualidade Boa")
  }
  if(IBF>5.51 & IBF<6.50)
  {
    resultadoIBF1 = c(IBF,"Qualidade Razoável")
  }
  if(IBF>6.51 & IBF<7.50)
  {
  resultadoIBF1 = c(IBF, "Qualidade Razoavelmente Ruim")
  }
  if(IBF>7.51 & IBF<8.50)
  {
  resultadoIBF1 = c(IBF,"Qualidade Ruim")
  }
  if(IBF>8.51 & IBF<10)
  {
    resultadoIBF1 = c(IBF,"Qualidade Muito Ruim")
  } #Fim da verificação e do cálculo de IBF
##############Calculo de EPT para o local1#######################
tabela= list(indice.data$quantidade1, indice.data$ordem1) #criando uma lista para as ordens e quantidades
EPHE = indice.data[indice.data$ordem1 == "Ephemeroptera",] #selecionando o que se refere a ordem Ephemeroptera
PLEC = indice.data[indice.data$ordem1 == "Plecoptera",] #selecionando o que se refere a ordem Plecoptera
TRIC = indice.data[indice.data$ordem1 == "Trichoptera",] #selecionando o que se refere a ordem Trichoptera
famE=length(EPHE$familia1) #Calculando quantas famílias há de cada ordem
famP=length(PLEC$familia1)
famT= length(TRIC$familia1)
totalEPT=sum(famE,famP,famT) #Esse indice se baseia na soma da quantidade de familias distintas dentro dessas três ordens 
  if(totalEPT>27) #Verificando onde o valor do índice se encaixa
  {
    resultadoEPT1 = c(totalEPT,"Excelente")
  }
  if(totalEPT>21 & totalEPT<27)
  {
    resultadoEPT1 = c(totalEPT,"Bom")
  }
  if(totalEPT>14 & totalEPT<20)
  {
    resultadoEPT1 = c(totalEPT,"Medio")
  }
  if(totalEPT>7 & totalEPT<13)
  {
    resultadoEPT1 = c(totalEPT,"Razoavel")
  }
  if(totalEPT>0 & totalEPT<6)
  {
    resultadoEPT1 = c(totalEPT,"Pobre")
  } #Fim da verificação e do cálculo para o indice EPT
#########Calculo para porcentagem de indivíduos EPT em relação a amostra total para local1###############
EPT = sum(EPHE$quantidade1, PLEC$quantidade1,TRIC$quantidade1, na.rm=T) #quantidade de organismos pertencentes as 3 Ordens indicadoras de boa qualidade
total = sum(indice.data$quantidade1)#somando a quantidade total de organismos
EPTporc =round(EPT/total*100) #Calculando porcentagem de organismos EPT amostrados em relação ao todo
  if (EPTporc>80) #Começando a verificação de onde o valor se encaixa
  {
    porcentagemEPT1 = c(EPTporc,"Qualidade Muito Boa")
  }
  if (EPTporc<80 & EPTporc>50)
  {
    porcentagemEPT1 = c(EPTporc,"Qualidade Boa")
  }
  if (EPTporc<50 & EPTporc>20)
  {
    porcentagemEPT1 = c(EPTporc, "Qualidade Media")
  }
  if (EPTporc<20)
  {
    porcentagemEPT1 = c(EPTporc,"Qualidade Ruim")
  } #Fim da verificação e do cálculo da porcentagem de EPT/total
##############Calculo de EPT/Chironomidae para local1###########
CHI= indice.data[indice.data$familia1 == "Chironomidae",] #selecionando onde aparece a familia
EPTChir=round((EPT/CHI$quantidade1),2) #arredondando o valor do cálculo
  if (EPTChir < 1) #Iniciando a verificação das condições
  {
    EPTC1 = c(EPTChir,"Alteração Ambiental")
  }
  if (EPTChir > 1)
  {
    EPTC1 = c(EPTChir,"Ambiente estável")
  } # Fim do cálculo e da verificação de EPT/Chirnonomidae
} # Fim do loop "for" para os valores do local 1. 
############################################################################  
###########Inicio dos calculos para local 2#################################
############################################################################
  
  for(local2 in indice.data) #inicio do loop for para os dados referentes ao local 2
{
#######Calculando o indice BMWP para local2########  
    BMWP2 = sum(indice.data$rankBMWP2) #Calculando o índice BMWP com base na somatória dos scores (sem levar em conta quantidade,apenas presença ou ausência)
    if(BMWP2>150) #iniciando a verificação de condições
    {
      resultadoBMWP2 = c(BMWP2,"Qualidade Ótima")
    }
    if(BMWP2>121 & BMWP2<150)
    {
      resultadoBMWP2 = c(BMWP2,"Qualidade Boa")
    }
    if(BMWP2>101 & BMWP2<120)
    {
      resultadoBMWP2 = c(BMWP2,"Qualidade Aceitável")
    }
    if (BMWP2>61 & BMWP2<100)
    {
      resultadoBMWP2 = c(BMWP2,"Qualidade Duvidosa")
    }
    if (BMWP2>36 & BMWP2<60)
    {
      resultadoBMWP2 = c(BMWP2,"Água Poluída")
    }
    if (BMWP2>16 & BMWP2<35)
    {
      resultadoBMWP2 = c(BMWP2,"Água Muito Poluída")
    }
    if(BMWP2<16)
    {
      resultadoBMWP2 = c(BMWP2,"Água Fortemente Poluída")
    } #Fim da verificação e do cálculo para BMWP
###############Calculo do indice BMWP-ASPT para local2###############
  familiasASPT2 = length(indice.data$rankBMWP2) #Calculo da quantidade de familias
  ASPT2 = round((BMWP2/familiasASPT2),2) #arredondando o valor para 2 casas decimais
    if (ASPT2>7) #iniciando verificação de condições
    {
      resultadoASPT2 = c(ASPT2, "Qualidade Muito Boa")
    }
    if (ASPT2>6 & ASPT2<7)
    {
      resultadoASPT2 = c(ASPT2,"Qualidade Boa")
    }
    if (ASPT2>5 & ASPT2<5.9)
    {
      resultadoASPT2 = c(ASPT2,"Qualidade Intermediária")
    }
    if (ASPT2>4 & ASPT2<5)
    {
      resultadoASPT2 = c(ASPT2,"Qualidade Ruim")
    }
    if (ASPT2<4)
    {
      resultadoASPT2 = c(ASPT2,"Qualidade Muito Ruim")
    } #Fim da verificação e cálculo de ASPT
##############Calculo de IBF - Indice Biotico por Familia para local2########
  soma2 = sum(indice.data$quantidade2 * indice.data$rankIBF2) #soma da quantidade de organismos * pontuações
  total2 = sum(indice.data$quantidade2) #soma da quantidade total de organismos
  IBF2 = soma2/total2 #calculando o indice
  IBF2=round(IBF2,2) #arredondando o valor para 2 casas decimais
  if(IBF2>0 & IBF2<3.5) #iniciando verificação de condições
  {
    resultadoIBF2 = c(IBF2, "Qualidade Excelente")
  }
  if(IBF2>3.51 & IBF2<4.5)
  {
    resultadoIBF2 = c(IBF2,"Qualidade Muito Boa")
  }
  if(IBF2>4.51 & IBF2<5.5)
  {
    resultadoIBF2 = c(IBF2,"Qualidade Boa")
  }
  if(IBF2>5.51 & IBF2<6.50)
  {
    resultadoIBF2 = c(IBF2,"Qualidade Razoável")
  }
  if(IBF2>6.51 & IBF2<7.50)
  {
    resultadoIBF2 = c(IBF2, "Qualidade Razoavelmente Ruim")
  }
  if(IBF2>7.51 & IBF2<8.50)
  {
    resultadoIBF2 = c(IBF2,"Qualidade Ruim")
  }
  if(IBF2>8.51 & IBF2<10)
  {
    resultadoIBF2 = c(IBF2,"Qualidade Muito Ruim")
  } #Fim da verificação e cálculo de IBF 
##############Calculo de EPT para local2#######################
tabela2= list(indice.data$quantidade2, indice.data$ordem2) #listando quantidade e ordem
EPHE2 = indice.data[indice.data$ordem2 == "Ephemeroptera",] #selecionando para Ephemeroptera
PLEC2 = indice.data[indice.data$ordem2 == "Plecoptera",] #selecionando para Plecoptera
TRIC2 = indice.data[indice.data$ordem2 == "Trichoptera",] #selecionando para Trichoptera
famE2=length(EPHE2$familia2) #Calculando quantas famílias há de cada ordem
famP2=length(PLEC2$familia2)
famT2= length(TRIC2$familia2)
totalEPT2=sum(famE2,famP2,famT2) #Esse indice se baseia na soma da quantidade de familias distintas dentro dessas tres ordens 
  if(totalEPT2>27) #inicio da verificação
  {
    resultadoEPT2 = c(totalEPT2,"Excelente")
  }
  if(totalEPT2>21 & totalEPT2<27)
  {
    resultadoEPT2 = c(totalEPT2,"Bom")
  }
  if(totalEPT2>14 & totalEPT2<20)
  {
    resultadoEPT2 = c(totalEPT2,"Medio")
  }
  if(totalEPT2>7 & totalEPT2<13)
  {
    resultadoEPT2 = c(totalEPT2,"Razoavel")
  }
  if(totalEPT2>0 & totalEPT2<6)
  {
    resultadoEPT2 = c(totalEPT2,"Pobre")
  }  #Fim da verificação
#########Calculo para porcentagem de indivíduos EPT em relação a amostra total para local2###############
EPT2 = sum(EPHE2$quantidade2, PLEC2$quantidade2,TRIC2$quantidade2, na.rm=T) #quantidade de organismos pertencentes as 3 Ordens indicadoras de boa qualidade
total2 = sum(indice.data$quantidade2)#somando a quantidade total de organismos
EPTporc2 =round(EPT2/total2*100) #arredondando o valor
  if (EPTporc2>80) #iniciando verificação
  {
    porcentagemEPT2 = c(EPTporc2,"Qualidade Muito Boa")
  }
  if (EPTporc2<80 & EPTporc2>50)
  {
    porcentagemEPT2 = c(EPTporc2,"Qualidade Boa")
  }
    if (EPTporc2<50 & EPTporc2>20)
  {
    porcentagemEPT2 = c(EPTporc2, "Qualidade Media")
  }
    if (EPTporc2<20)
  {
    porcentagemEPT2 = c(EPTporc2,"Qualidade Ruim")
  } #fim da verificação e cálculo da porcentagem de EPT/total
##############Calculo de EPT/Chironomidae###########
CHI2= indice.data[indice.data$familia2 == "Chironomidae",] #selecionando os dados para a família
EPTChir2=round((EPT2/CHI2$quantidade2),2) #arredondando em 2 casas decimais
  if (EPTChir2 < 1) #verificando condições
  {
    EPTC2 = c(EPTChir2,"Alteração Ambiental")
  }
  if (EPTChir2 > 1)
  {
    EPTC2 = c(EPTChir2,"Ambiente estável")
  } #fim da verificação e do cálculo de EPT/Chironomidae
}  #fim do loop "for" para local2
#####################Construindo o data.frame final########################
  BMWPfinal=c(resultadoBMWP1,resultadoBMWP2) #agrupando dados do indice para os dois locais analisados
  ASPTfinal= c(resultadoASPT1,resultadoASPT2) #agrupando dados do indice para os dois locais analisados
  IBFfinal = c(resultadoIBF1,resultadoIBF2) #agrupando dados do indice para os dois locais analisados
  EPTfinal = c(resultadoEPT1,resultadoEPT2) #agrupando dados do indice para os dois locais analisados
  porcentagemEPTfinal= c(porcentagemEPT1,porcentagemEPT2) #agrupando dados do indice para os dois locais analisados
  EPTCfinal = c(EPTC1,EPTC2) #agrupando dados do indice para os dois locais analisados
  tabela.indices= data.frame(BMWPfinal,ASPTfinal,IBFfinal,EPTfinal,porcentagemEPTfinal,EPTCfinal) #Atribuindo todos os resultados a um novo data.frame
  colnames(tabela.indices) <- paste(c("BMWP","ASPT","IBF", "EPT( num. de familias)","EPT(porcentagem do total)","EPT/Chironomidae")) #renomeando colunas
  rownames(tabela.indices) <-paste(c("Valor ambiente 1","Classificação ambiente 1","valor Ambiente 2", "Classificação Ambiente 2"))  #renomeando linhas
return(tabela.indices) #trazendo o data.frame final como resultado que a função retorna
}  #Fim da função macroinver.index

macroinver.index(indice.data) #teste da função e seu retorno

Arquivos da Função

05_curso_antigo/r2016/alunos/trabalho_final/bianca_vendramini/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)