##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. }