====== Angela Maria da Silva Lehmkuhl ====== {{:bie5782:01_curso_atual:alunos:trabalho_final:angela_ecologia:diatom_mandala.jpg?200|}} Bióloga, mestre em Botânica pela UFPR, atualmente sou doutoranda no programa Biologia Vegetal da UNESP de Rio Claro - SP, e meu projeto de pesquisa é com uso de Diatomáceas como Bioindicadoras da qualidade da água de reservatórios do estado de São Paulo. {{:bie5782:01_curso_atual:alunos:trabalho_final:angela_ecologia:silva_et_al._2010.pdf|}} [[.:exec]] **CÓDIGO** #Entrada dos dados se dará com duas matrizes, matriz x com abundâncias das espécies, de maneira que as nas colunas ficam as espécies e nas linhas os pontos de coleta. A matriz y com as variáveis, terão as variáveis ambientais nas colunas e nas linhas os pontos de coleta. Ambas as matrizes devem ter o mesmo número de linhas. Não é aceito NA nos dados. Aceita-se valores igual a zero. optimum <- function(x,y) { if(is.matrix(x)==FALSE) #Teste lógico para saber se o objeto de entrada é uma matriz. { stop("O objeto não é uma matriz") #Mensagem caso o objeto não seja uma matriz. } if(is.matrix(y)==FALSE) #Teste lógico para saber se o objeto de entrada é uma matriz. { stop("O objeto não é uma matriz") } if(nrow(x)!=nrow(y)) #Teste para saber se as matrizes tem o mesmo número de linhas { stop("As matrizes devem ter o mesmo número de linhas") } matriz.optimum<- matrix(NA, nrow=ncol(x), ncol=ncol(y), dimnames=list(colnames(x), colnames(y))) #Cria uma matriz para guardar os valores de ótimo ecológico que vão ser calculados. Os nomes das linhas serão os nomes das espécies e o nome das colunas serão os nomes das variáveis. matriz.tolerance<- matrix(NA, nrow=ncol(x), ncol=ncol(y), dimnames=list(colnames(x), colnames(y)))#Cria uma matriz para guardar os valores de tolerância ecológica que vão ser calculados. Os nomes das linhas serão os nomes das espécies e o nome das colunas serão os nomes das variáveis. for(i in 1:ncol(x)) #Fazendo uma série de loopings para dar início ao cálculo do ótimo. Aqui os valores da matriz de abundância serão acessados. { for(j in 1:ncol(y)) #Fazendo uma série de loopings o cálculo do ótimo. Aqui os valores da matriz de variáveis serão acessados. { matriz.optimum[i,j]<-weighted.mean(y[,j],x[,i]) #Calculo do ótimo utilizando a função da média ponderada (weighted.media) o segundo conjunto de dados tem que ser aquele que vai fornecer o peso para a média ponderada. Assim, se a ordem de entrada das matrizes for alterada, o valor será alterado também. Para o cálculo do ótimo, o conjunto de valores que forncem o peso para a média ponderada são os valores das abundâncias. } } for(i in 1:ncol(x)) #Fazendo uma série de loopings para dar início ao da tolerância. Aqui os valores da matriz de abundância serão acessados. { for(j in 1:ncol(y)) #Fazendo uma série de loopings para dar início ao cálculo da tolerância. Aqui os valores da matriz de abundância serão acessados. { matriz.tolerance[i,j]<-((sum(x[,i]*(y[,j]-weighted.mean(y[,j],x[,i]))^2))/sum(x[,i]))^0.5 ##Calculo da tolerância ecológica. } } optimum.tolerance<-array(c(matriz.optimum,matriz.tolerance) ,dim=c(ncol(x),ncol(y),2), dimnames=list(colnames(x) ,colnames(y) ,c("Ótimo Ecológico","Tolerância Ecológica"))) #Array com os dados do ótimo e da tolerância será o retorno da função. for(i in 1:ncol(y)) #Fazendo uma série de loopings para a saída gráfica de cada espécie. Aqui acessará os dados para o eixo x que são os valores das variáveis. { for(j in 1:ncol(x)) #Fazendo uma série de loopings para a saída gráfica de cada espécie. Aqui acessará os dados para o eixo y que são os valores das abundâncias. { names.axis.x<- colnames(y) #criando um objeto para dar nomes ao eixo x names.axis.y<- colnames(x) #criando um objeto para dar nomes ao eixo y plot(y[,i],x[,j],ylim=c(0,max(x)),xlab=names.axis.x[i],ylab=names.axis.y[j]) #Plota um gráfico de distribuição das espécies em relação à variável analisada. var.range<- min(y[,i]):max(y[,i]) #objeto para guardar os valores entre mínimo da variável ambiental e máxima da variável ambiental para ser utilizada na equação de regressão da curva. yA<- (max(x[,j]))*exp(-0.5*(var.range - matriz.optimum[j,i])^2/matriz.tolerance[j,i]^2) #Regressão para plotar a curva no gráfico. lines(var.range,yA,lty=1,col="black") #Plota a curva da regressão na cor preta. abline(v=matriz.optimum[j,i],lty=2) #Plota uma linha pontilhada mostrando o valor do ótimo ambiental. valor.optimum<-paste("u =",as.character(round(matriz.optimum[j,i],2)),sep=" ") # valor do ótimo ambiental text(0.7*max(y),max(x), labels=valor.optimum) #Plota o valor do ótimo na área do gráfico } } (optimum.tolerance) #Retorno da Função é um array com o ótimo e a tolerância de cada espécie para cada variável. } ##FIM! **Help da Função** Ótimo package:unknown R Documentation Cáculo do Ótimo ecológico e da tolerância ecológica de espécies. Description: A função calcula o ótimo ecológico e a tolerância ecológica de espécies em relação a variáveis ambientais de interesse. Para isso utiliza-se uma matriz de abundância e uma matriz com os valores das variáveis ambientais de interesse. A função retorna os resultados em um array e um gráfico com o ótimo de cada espécie. Usage: optimum(x,y) Arguments: x matriz com os dados de abundância ou densidade das espécies y matriz com os dados para variável ambiental Details: A matriz (x) de abundância ou de densidade de espécies deve apresentar as espécies nas colunas. A matriz (y) com as variáveis ambientais deve apresentar as variáveis em cada coluna. Ambas as matrizes devem ter o mesmo número de linhas. A função aceita valores de zero. A função não aceita NAs. Value: A função retorna no Console duas matrizes em um objeto de array. A primeira matriz trará os valores dos ótimos ecológicos de cada espécie. A segunda matriz trará os valores de tolerância ecológica de cada espécie. Nas linhas estarão as espécies e nas colunas as variáveis ambientais. Se o objeto não for uma matriz, a função retornará uma mensagem de aviso. Se as matrizes não tiverem o mesmo número de linhas, a função retornará um aviso. Warning: Se houver mais de 100 espécies, a função não retornará todos os gráficos. Author(s): Angela Maria da Silva Lehmkuhl e-mail: angela_ecologia@yahoo.com.br References: Crawley, M. 2007. The R book. John Wiley & Sons Ltd, England. Ter Braak, C.J.F e Van Dam, H (1989). Inferring ph from diatoms: a comparison of old and new calibration methods. Hydrobiologia 178:209-223. Examples: x<- matrix(sample(c(seq(from=10, to=1000, length=10), seq(from=1, to=100, length=10), seq(from=50, to=500, length=10))), nrow=10, ncol=3, dimnames=list(c(1:10), c("sp1","sp2", "sp3"))) #Matriz de aundância de espécies y<- matrix(sample(round(c(seq(from=0.2, to=200, length = 10), seq(from=3.0, to=8.0, length = 10 )))), nrow=10, ncol=2, dimnames=list(c(1:10),c("var1", "var2"))) #Matriz das variáveis ambientais ** ****PROPOSTA DE TRABALHO FINAL****** Angela, suas propostas estão confusas, mas pelo que entendi suas duas propostas se resumem a cálculos de índices, sem desafio. Minha sugestão seria elaborar suas propostas, deixando a teoria de lado e se focando no que a função tem que fazer, ou partir prum plano C vrios81@gmail.com ** ****PROPOSTA DE TRABALHO FINAL****** Olá Vitor. Pois bem, na proposta A do ótimo ecológico, a função calcularia o ótimo ecológico e a tolerância ecológica de espécies frente a uma variável ambiental. Para isso, os dados de abundância relativa ou densidade de espécies entraria em uma matriz, onde nas colunas estariam as espécies e nas linhas os pontos de coleta. Em outra matriz estariam os dados das variáveis ambientais, de modo que nas colunas estariam as variáveis e nas linhas os pontos de coleta. A partir disso calcularia o ótimo ecológico e em seguida a tolerância ecológica de cada espécie para cada variável desejada. A função retornaria um array com os valores dos ótimos e das tolerâncias para cada espécie em cada variável ambiental. Ainda a função deve retornar um gráfico onde no eixo y seria a densidade ou abundância da espécie k e no eixo x estariam o gradiente da variável ambiental. O gráfico seria uma curva, onde os limites dados pelo valor de tolerância, o pico da curva seria no ótimo e a altura da curva seria dada pela máxima abundância ou densidade. Acho que pode ajustar a proposta A com os comentário do Vitor. Deixe o gráfico de lado, retorne apenas o ótimo ecológico e a tolerância para cada espécie/varíável. Garanta que a função rode para várias espécies e um conjunto de variáveis ambientais. Gostei, uma função que homenageia os trabalhos de Ter Braak na dećada de 80.. Angela, pode fazer a proposta A como Alê falou acima, sem os gráficos vrios81@gmail.com Se eu conseguir rodar o gráfico, posso deixar? Sim, sem problemas vrios81@gmail.com **Proposta A** PROPOSTA REVISADA! A função calcularia o ótimo ecológico e a tolerância ecológica de espécies frente a uma variável ambiental. Para isso, os dados de abundância relativa ou densidade de espécies entraria em uma matriz, onde nas colunas estariam as espécies e nas linhas os pontos de coleta. Em outra matriz estariam os dados das variáveis ambientais, de modo que nas colunas estariam as variáveis e nas linhas os pontos de coleta. A partir disso calcularia o ótimo ecológico e em seguida a tolerância ecológica de cada espécie para cada variável desejada. A função retornaria um array com os valores dos ótimos e das tolerâncias para cada espécie em cada variável ambiental. Ainda a função deve retornar um gráfico onde no eixo y seria a densidade ou abundância da espécie k e no eixo x estariam o gradiente da variável ambiental. O gráfico seria uma curva, onde os limites dados pelo valor de tolerância, o pico da curva seria no ótimo e a altura da curva seria dada pela máxima abundância ou densidade. A proposta é baseada no trabalho de Ter Braak, C.J.F e Van Dam, H (1989). Inferring ph from diatoms: a comparison of old and new calibration methods. Hydrobiologia 178:209-223. Embora o trabalho se baseie em diatomáceas, o cálculo pode ser aplicado para outras espécies aquáticas utilizadas em biomonitoramento, ou mesmo em estudos autoecológicos, e quiçá a função possa ser aplicad O cálculo do ótimo (ũk) é dado pela somatória da abundância da espécie k na amostra i (yik) multiplicado pelo valor da variável ambiental na amostra (xi) dividido pela somatória da abundância da espécie k na amostra i (yik). ũk= ∑(1* yik* xi)/∑(1*yik) A tolerância (tk) é calculada pela somatória da abundância da espécie k na amostra i (yik) multiplicado pela diferença entre o valor da variável ambiental na amostra i (xi) e o valor do ótimo ecológico (ũk) elevado ao quadrado, dividido pela somatória da abundância da espécie k na amostra i (yik). Tudo isso elevado à ½. tk= {∑(yik)*((xi- ũk)^2)/(∑(yik)}^(1\2) ** Proposta B** Índices de qualidade de água utilizando organismos aquáticos vêm sendo amplamente desenvolvidos para dar agilidade e rapidez no diagnóstico da qualidade dos corpos d’água. Comumente, são desenvolvidos utilizando a comunidade de diatomáceas e de macroinvertebrados. Os índices utilizam como base a abundância relativa das espécies e um valor de sensibilidade das espécies a uma característica do ambiente, por exemplo, grau de eutrofização ou mesmo saprobicidade da água. Assim, a proposta tem como objetivo, elaborar uma função que retorne o resultado do índice com a classificação do ambiente. Para isso, a proposta baseia-se no Índice Trófico de Qualidade de Água (ITQA) de Lobo et al. (2016) que utiliza diatomáceas, no entanto, esse índice poderá ser ajustado para outras comunidades aquáticas. ITQA= ∑(vt*h)/∑h Onde: vt= é o valor trófico para cada espécie, que vai constara na matriz de entrada para a função; h: aundância relativa de cada espécie. O valor do ITQA vai variar de 1 a 4. ITQA Níveis de poluição 1,0 - 1,5 Oligotrófico (poluição desprezível) 1,5 - 2,5 β-mesotrófico (poluição moderada) 2,5 - 3,5 α-mesotrófico (poluição forte) 3,5 - 4,0 Eutrófico (poluição excessiva)