====== 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}}