##CRIACAO DA FUNCAO
analisar <- function(x, indices = c("Shannon", "Simpson"), grafico = TRUE, save.csv = TRUE){ #Estrutura da funcao.
dados.brutos <- read.csv(x, header=TRUE,sep=";", as.is=TRUE, na.strings = c("")) #Leitura de planilha de input, incluindo NAs em celulas vazias, caso haja.
if(length(indices) >= 1 & length(indices[indices == "Shannon" | indices == "Simpson"]) == 0){ #Criacao de mensagem de erro, caso nenhum indice ou indice incorreto seja incluido.
stop("\t Indices incorretos! Favor indicar quais os indices a serem calculados. \n")
}
if(length(dados.brutos[is.na(dados.brutos)]) >= 1){ #Criacao de mensagem de atencao, caso NAs (celulas vazias) sejam encontrados na planilha.
warning("\t Atencao: Celulas vazias (NAs) presentes! Observacoes contendo NAs foram desconsideradas da analise. \n")
}
##CALCULO DA ABUNDANCIA TOTAL DE ESPECIMES REGISTRADOS
abundancia.total <- length(dados.brutos$nome_cientifico[!is.na(dados.brutos$nome_cientifico)]) #Calculo da abundancia total de especimes registrados, considerando todos os locais de amostragem.
##CALCULO DA RIQUEZA TOTAL DE ESPECIES REGISTRADAS
riqueza.total <- length(unique(dados.brutos$nome_cientifico[!is.na(dados.brutos$nome_cientifico)])) #Calculo da riqueza total de especies a partir dos especimes registrados, considerando todos os locais de amostragem.
##CALCULO DA ABUNDANCIA POR LOCAL (AREA DE AMOSTRAGEM)
abundancia.local <- table(dados.brutos$local,dados.brutos$nome_cientifico) #Separando dados de abundancia das especies por locais de amostragem, para posterior calculo da abundancia por local de amostragem.
abundancia.local.1 <- apply(abundancia.local, MARGIN = 1, FUN = sum) #Calculo da abundancia por local de amostragem.
##CALCULO DA RIQUEZA POR LOCAL (AREA DE AMOSTRAGEM)
nomes_areas <- rownames(abundancia.local) #Selecao de nomes das areas de amostragem preenchidas na coluna "local", para criacao de dataframe que contera valores de riqueza por local.
riqueza.local <- data.frame(nomes_areas, "riqueza" = 0) #Criacao de dataframe com valores de riqueza = zero para serem preenchidos com valores de riqueza calculados para cada local.
for(i in 1:nrow(abundancia.local)){ #Preenchimento da coluna denominada riqueza no dataframe criado com a contagem do numero de especies por local, isso considerando a soma de valores maiores que zero nas linhas do dataframe "abundancia.local".
riqueza.local$riqueza[i] <- length(abundancia.local[i,abundancia.local[i,] > 0])
}
##CRIACAO DE GRAFICO DE ABUNDANCIA RELATIVA DAS ESPECIES, CONSIDERANDO TODOS AS AREAS DE AMOSTRAGEM (LOCAIS) CONJUNTAMENTE
abundancia.especie <- data.frame(table(dados.brutos$nome_cientifico)) #Calculo da abundancia por especie,considerando todas as areas de amostragem (locais), para posterior elaboracao do grafico de abundancia relativa das especies.
abundancia.especie["porcent"] <- c((abundancia.especie$Freq*100)/sum(abundancia.especie$Freq)) #Inclusao de nova coluna no dataframe denominado "abundancia.especie" contendo os valores de abundancia relativa por especie(porcentagem).
abundancia.especie.ord <- abundancia.especie[order(abundancia.especie$porcent, decreasing=T), ] #Organizacao do dataframe em ordem decrescente de abundancia relativa (porcentagem).
if(grafico == TRUE){ #Elaboracao de grafico de abundancia relativa das especies, se consideradas todas as areas de amostragem conjuntamente, caso essa opcao seja escolhida pelo usuario.
png("Grafico_Abundancia.Relativa.png") #Caso opcao de confeccao do grafico seja escolhida pelo usuario, o mesmo sera salvo automaticamente no diretorio em uso.
par(mar = c(13.1,4.1,4.1,2.1)) #Controle do tamanho das margens do grafico.
plot(abundancia.especie.ord$porcent,pch=19,col="black",ylab="Abundancia Relativa das Especies", xlab = "",ylim=c(0,100),tcl=-0.5,cex.lab=1, xaxt = "n") #Plotagem e formatacao dos pontos, titulo dos eixos, formatacao dos ticks do eixo y, nao inclusao de titulo no eixo x.
axis(side = 1, at = c(1:length(abundancia.especie.ord$Var1)), labels = FALSE) #Preparando eixo x para receber nome das especies.
text(abundancia.especie$Var1,-50,xpd = TRUE,labels= abundancia.especie.ord$Var1, srt=90,cex=1, font = 3 ) #Inclusao e formatacao da legenda eixo x = nome das especies.
par(mar=c(5.1,4.1,4.1,2.1)) #Retornando margens do grafico para padrao do R, para caso outro grafico seja produzido posteriormente, fora desta funcao.
dev.off() #Fechamento de janela de grafico.
}
##RETORNANDO RESULTADOS DE ABUNDANCIA(TOTAL E LOCAL)E RIQUEZA (TOTAL E LOCAL)
resultado.final <- data.frame("Abundancia" = abundancia.local.1, "Riqueza" = riqueza.local$riqueza) #Criacao de um dataframe contendo valores de abundancia e riqueza para cada area amostrada (local).
linha.total <- c(abundancia.total,riqueza.total) #Criacao de um vetor contendo valores de abundancia e riqueza total, ou seja, considerando todas as areas de amostragem (locais) conjuntamente.
resultado.final["Total",] <- c(linha.total) #Criacao de uma linha de "Total" contendo abundancia e riqueza total, para insercao no dataframe criado.
resultado.final #Insercao da linha de "Total" criada no dataframe contendo os resultados.
##PREPARANDO VALORES DE INPUT PARA CALCULO DOS INDICES
abundancia.especie.1 <- apply(abundancia.local, MARGIN = 2, FUN = sum) #Calculo da abundancia por especie, considerando todas as areas de amostragem (locais) conjuntamente.
prop <- abundancia.especie.1/sum(abundancia.especie.1) #Calculo da proporcao da especie i em relacao ao numero total de individuos na amostra, para calculo de Indice de Shannon e de Simpson, considerando todas as areas de estudo conjuntamente (locais).
total.especies <- riqueza.total #Calculo do numero total de especies, o qual sera utilizado para calculo dos valores de equitabilidade de Shannon ou de Simpson.
##CALCULO DOS INDICES DE DIVERSIDADE E EQUITABILIDADE DE SHANNON
if(length(indices[indices == "Shannon"]) >= 1){ #Calculo de indice de diversidade e equitabilidade de Shannon, se consideradas todas as areas de amostragem conjuntamente (locais), se este for o conjunto de indices escolhido pelo usuario.
shannon.total <- -sum(prop*log(prop)) #Calculo da diversidade de Shannon.
equitabilidade.shannon.total <- shannon.total/log(total.especies) #Calculo da equitabilidade de Shannon.
#Calculo do indice de diversidade de Shannon para cada area de amostragem (local), considerando a proporcao de cada especie, por cada area de amostragem (local), a partir da selecao de dados de todas as colunas do dataframe "abundancia.local" (informacoes de especies), para todas as linhas do mesmo dataframe (informacoes de local).
shannon.local <- c()
x <- c()
for(k in 1:nrow(abundancia.local)){
for(j in 1:ncol(abundancia.local)){
x[j] <- abundancia.local[k,j]/sum(abundancia.local[k,])
}
x <- x[x!=0] #Porque nao existe logaritmo de zero.
shannon.local[k] <- -sum(x*log(x))
x <- c()
}
#Calculo do indice de equitabilidade de Shannon para cada area de amostragem (local).
equitabilidade.shannon.local <- c()
for(l in 1:nrow(abundancia.local)){
equitabilidade.shannon.local[l] <- shannon.local[l]/log(riqueza.local$riqueza[l])
}
#Retornando resultados do conjunto de indices escolhido pelo usuario: Shannon
resultados.1 <- c(shannon.total)
resultados.2 <- c(shannon.local)
resultados.3 <- c(equitabilidade.shannon.total)
resultados.4 <- c(equitabilidade.shannon.local)
diversidade <- c(resultados.2,resultados.1) #Criacao de um vetor com os valores do indice de diversidade de Shannon, por local e total (todas os locais conjuntamente).
diversidade
resultado.final
resultado.final[,"Diversidade de Shannon"] <- diversidade #Inclusao de coluna com os indices de diversidade de Shannon, por local e total, no dataframe de resultados de riqueza e abundancia já criado.
resultado.final
equitabilidade <- c(resultados.4,resultados.3) #Criacao de um vetor com os valores do indice de equitabilidade de Shannon, por local e total (todos os locais conjuntamente).
equitabilidade
resultado.final
resultado.final[,"Equitabilidade de Shannon"] <- equitabilidade #Inclusao de coluna com os indices de equitabilidade de Shannon, por local e total, no dataframe de resultados de riqueza e abundancia já criado.
resultado.final
}
##CALCULO DOS INDICES DE DIVERSIDADE E EQUITABILIDADE DE SIMPSON
if(length(indices[indices == "Simpson"]) >= 1){ #Calculo de indice de diversidade e equitabilidade de Simpson, se consideradas todas as areas de amostragem conjuntamente (locais), se este for o conjunto de indices escolhido pelo usuario.
simpson.total <- sum((prop)^2) #Calculo de indice de diversidade de Simpson.
equitabilidade.simpson.total <- (1/simpson.total)/total.especies #Calculo do indice de equitabilidade de Simpson.
#Calculo do indice de diversidade de Simpson para cada area de amostragem (local), considerando a proporcao de cada especie, por cada area de amostragem (local), a partir da selecao de dados de todas as colunas do dataframe "abundancia.local" (informacoes de especies), para todas as linhas do mesmo dataframe (informacoes de local).
simpson.local <- c()
y <- c()
for(m in 1:nrow(abundancia.local)){
for(n in 1:ncol(abundancia.local)){
y[n] <- abundancia.local[m,n]/sum(abundancia.local[m,])
}
simpson.local[m] <- 1 - sum((y)^2)
}
#Calculo do indice de equitabilidade de Simpson para cada area de amostragem (local).
equitabilidade.simpson.local <- c()
for(o in 1:nrow(abundancia.local)){
equitabilidade.simpson.local[o] <- (1/simpson.local[o]) / riqueza.local$riqueza[o]
}
#Retornando resultados do conjunto de indices escolhido pelo usuario: Simpson
resultados.1 <- c(simpson.total)
resultados.2 <- c(simpson.local)
resultados.3 <- c(equitabilidade.simpson.total)
resultados.4 <- c(equitabilidade.simpson.local)
diversidade <- c(resultados.2,resultados.1) #Criacao de um vetor com os valores do indice de diversidade de Simpson, por local e total (todas os locais conjuntamente).
diversidade
resultado.final
resultado.final[,"Diversidade de Simpson"] <- diversidade #Inclusao de coluna com os indices de diversidade de Simpson, por local e total, no dataframe de resultados de riqueza e abundancia já criado.
resultado.final
equitabilidade <- c(resultados.4,resultados.3) #Criacao de um vetor com os valores do indice de equitabilidade de Shannon, por local e total (todos os locais conjuntamente).
equitabilidade
resultado.final
resultado.final[,"Equitabilidade de Simpson"] <- equitabilidade #Inclusao de coluna com os indices de equitabilidade de Shannon, por local e total, no dataframe de resultados de riqueza e abundancia já criado.
resultado.final
}
#Se escolhida a opcao de salvar automaticamente no diretorio de trabalho um arquivo .csv denominado "Resultados_Finais" contendo todos os resultados calculados (riqueza total e local, abundancia total e local e diversidade total e local, conforme indice(s) escolhido(s)).
if(save.csv == TRUE){
write.table(resultado.final,file="Resultados_Finais.csv",sep=";")
}
return(resultado.final) #Retornando dataframe final, contendo todos os resultados calculados e escolhidos pelo usuário.
}