{ 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 } } } return(optimum.tolerance) #Retorno da Função é um array com o ótimo e a tolerância de cada espécie para cada variável. } ##FIM! } <\code> optimum(x, y) **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