====== Bianca de Medeiros Vendramini ======
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:captura_de_tela_2015-05-31_20.24.06.png?200|}}
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 =====
[[.:exec]]
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:exercicio1_revisado.r|Exercicio1}}
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:exercicios_aula4.r|Exercicio4}}
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:exercicio_5.r|Exercicio5}}
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:exercicio72.r|Exercicio7a}}
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:exercicios_7b.r|Exercicio7b}}
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:exercicio8.r|Exercicio8}}
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:exercicio_numero92.r|Exercicio9}}
===== 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,
----//[[diogro@gmail.com|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,
----//[[diogro@gmail.com|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!
----//[[diogro@gmail.com|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 =====
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:funcao_macroinver_index.r|Função macroinver.index}}
{{:bie5782:01_curso_atual:alunos:trabalho_final:bianca_vendramini:help_da_funcao.r|Help da função macroinver.index}}