Nathália Helena Azevedo [ecoR]
05_curso_antigo:r2014:alunos:trabalho_final:helena.nathalia:start
Mestranda no Departamento de Ecologia do IB-USP, no Laboratório de Ecologia de Florestas Tropicais
A descrição de comunidades constitui etapa importante nos estudos de ecologia, representando o primeiro passo para a compreensão dos processos subjacentes aos padrões observados e permitindo, potencialmente, um melhor entendimento dos mecanismos estruturadores da comunidade em estudo. A caracterização de comunidades vegetais geralmente resulta em planilhas extensas e que contém vários tipos de medidas dos indivíduos (altura, dap, tamanho de copa, entre outras) bem como informações temporais e do ambiente em que foram amostrados.
Nesse contexto, minha proposta é construir uma função que simplifique a etapa de descrição básica da comunidade, automatizando algumas comparações corriqueiras. A entrada seria uma tabela de dados contendo: (i) a identificação da espécie, (ii) as medidas de tamanho dos indivíduos, (iii) as parcelas (ou ambientes) em que eles foram encontrados e (iv) o número do censo (informação temporal).
A função geraria uma descrição básica da comunidade em cada intervalo de tempo. Contendo: (a) o número total de espécies, (b) o número total de indivíduos, (c ) índices de diversidade e (d) uma comparação de a-d para diferentes tipos de ambiente e\ou tempo). A função também calcularia um índice alométrico (a ser escolhido ainda e com base na literatura) por indivíduo e faria diferentes comparações entre as demais informações da tabela de dados brutos. Seria útil também separar os indivíduos por classes (baseado nos valores do índice alométrico) de acordo com a localidade e em diferentes tempos.
Também no contexto de descrição inicial de comunidades vegetais, é comum transformarmos os dados espaciais (de ocorrência de indivíduos) em tabelas. Entretanto, em alguns casos, é preciso plotar esses dados em mapas para compará-los com outros (contendo variáveis ambientais por exemplo) ou para retomar informações perdidas.
Minha proposta é criar uma função que plote a localização dos indivíduos em diferentes mapas. A entrada seria uma tabela contendo (i) identificação da espécie (possivelmente um número, para que a imagem final não fique muito poluída), (ii) as coordenadas de localização da espécie e (iii) a informação temporal (número do censo). Junto com essa tabela também seria fornecida a imagem na qual as espécies devem ser plotadas.
A função retornaria o número de mapas equivalentes ao número de censos e em cada mapa as espécies estariam indicadas com um ponto e seu respectivo número. (Se eu conseguir chegar até aqui , também acho interessante gerar um mapa adicional de mortes e nascimentos ao longo dos censos).
A proposta A parece boa e factível. Você poderia seguir com ela sem problemas.
A proposta B também é interessante, mas vou pedir para alguém que entenda de trabalhar com mapas no R comentar em mais detalhe. Não tenho experiência no assunto para avaliar a proposta. —- Débora
Comentários As duas propostas estão ótimas, muito bem explicadas e interessantes. Só acho que na A vc. se entusiasmou demais no final. Como assim incluir tb. alometria de indivíduos? Só a parte de comunidade já está de bom tamanho, juntar coisas demais em diferentes níveis organizacionais deixa a proposta muito mega… logo mais está construindo a função para "dominar o mundo".
Na B faltou apenas definir que tipo de coordenadas a função requer. Sugiro que restrinja, a principio, para coordenadas cartesianas (x, y) planas, para não entrar na complicação de projeções das coordenadas geográficas, isso pode ser um argumento depois que faça a transformação entre coordenadas… (um outro momento!)
Fique a vontade para escolher qq uma das duas e bom trabalho.
— Alexandre Adalardo de Oliveira 2014/04/25 18:35
Proposta executada: A
cbc               package:bie5782_2014                R Documentation
Fornece um resumo com a caracterização básica de uma comunidade acompanhada ao longo de um tempo e considerando estados ambientais distintos.
A função pede para o usuário digitar o tamanho da área monitorada (em ha).
Para cada censo, a função calcula: o número total de indivíduos amostrados, o número total de espécies, a densidade absoluta de indivíduos e
os índices de diversidade de Shannon-Weiner (H') e de equitabilidade de Pielou (J').
Também calcula: as densidades, frequências e dominâncias relativas e absolutas e o Índice de Valor de Importância das espécies para cada censo e ambiente.
cbc(dados)
dados:data.frame contendo seis colunas;
a primeira coluna contém os eventos do censo da coleta (censo) e deve ser preenchida com letras minúsculas;
a segunda coluna contém o número da parcela em que foram coletados os dados (parcela);
a terceira coluna contém o nome da espécie (especie);
a quarta coluna contém o número de indivíduos da espécie por parcela (individuos);
a quinta coluna contém a média dos valores de dap, em centímetros, por espécie amostrada (dap);
a sexta coluna contém os diferentes estados ambientais do local de amostragem (ambiente) e deve ser preenchido com letras maiúsculas.
area: corresponde ao tamanho da área do local de amostragem, deve ser colocado em hectares quando solicitada pela função.
Usar zero para dados faltantes
Os parâmetros calculados de acordo com os diferentes estados ambientais e censos são:
Uma matrix de resumo, contendo:
Indivíduos: Total de Indivíduos - Número total de indivíduos por estado ambiental e por censo
Espécies: Total de Espécies - Número total de espécies por estado ambiental e por censo
Dens_Ind: Densidade de Indivíduos - Número total de indivíduos por unidade de área amostrada
Shannon: índice de diversidade de Shannon-Weiner (H')
Pielou: índice de equitabilidade de Pielou (J')
Um data.frame detalhado por ambiente e censo com informações por espécie, contendo:
AMB: o ambiente em que a espécie foi encontrada
CENSO: em que a espécie foi amostrada
N.IND.:total de indivíduos
DA: Densidade Absoluta - Número de indivíduos por espécie por unidade de área amostrada
DR: Densidade Relativa - Porcentagem da espécie em relação ao total de indivíduos amostrados
FA: Frequência Absoluta - Porcentagem de parcelas (unidades amostrais) onde foi amostrada a espécie
FR: Frequência Relativa - Porcentagem de ocorrência de uma espécie com relação ao total de ocorrências
DA: Dominância Absoluta - Área basal total (em m2) que uma espécie ocupa na área amostrada
DR: Dominância Relativa - Porcentagem da área basal total ocupada por indivíduos de uma espécie
IVI: Índice de valor de Importância - Expressa numericamente a importância de uma espécie para a comunidade amostrada
A nomeação das colunas para a tabela de entrada dos dados deve respeitar a grafia citada e o nome do arquivo deve ser "dados"
As categorias de ambiente e de censo devem ser preenchidas com letras na tabela de entrada dos dados, sendo o ambiente preenchido com letras maiúsculas e o censo com letras minúsculas.
Deve-se usar "." como separador de decimais na coluna "dap".
Azevedo, N.H.(helena.nathalia@gmail.com)
DURIGAN, G. 2003. Métodos em análise de vegetação arbórea. In: Cullen, L. Rudran, R. Valladares-Paudua, C. (orgs.).
Métodos de Estudo em Biologia da Conservação e Manejo da Vida Silvestre. IPÊ/ Fundação Boticário/UFPR. Curitiba.
SCOLFORO, J. R.; CARVALHO, L. M. T.(Ed.). Inventário Florestal de Minas Gerais: Floresta Estacional Decidual -
Florística, Estrutura, Similaridade, Distribuição Diamétrica e de Altura, Volumetria, Tendências de Crescimento e
Manejo Florestal. Lavras: UFLA, 2008. cap. 6, p.118-133.
censos<-c("a","b","c") #Considerando apenas 3 censos
numero.parc<-c(1:5)
nomes.sp=c("sp1","sp2","sp3","sp4","sp5","sp6","sp7","sp8","sp9","sp10")
numero.ind<-c(1:15)
est.amb<-c("A","B")
require(utils) #chama pacote com a funcao expand.grid  que garante que nos meus dados não haverá inconsistencia na combinação parcelaXcensoXambiente por espécie
dados<-expand.grid(numero.parc,nomes.sp,est.amb,censos) #agrupa parcela, especie e censo sem inconsistencias, evitano por exemplo que uma parcela apareca +de uma vez num censo
colnames(dados)<-c("parcela","especie","ambiente","censo") #nomeia as colunas
dados$individuos<-round(runif(length(dados[,1]),0,8)) #cria df
dados$dap<-runif(length(dados[,1]),1,15) #criando coluna do dap para o numero de linhas que a combinação na criacao do df permitiu
#   CARACTERIZACAO BASICA DA COMUNIDADE   #
#                  cbc                    #
cbc<-function(dados) #criação da função
readinteger<-function() #função interativa
area.cal<-readline(prompt="Digite o valor da área em hectares: ")
return(as.integer(area.cal))->area #criação do objeto com a resposta do usuário
print(readinteger())->area #exibe o valor da área digitada e salva em um objeto
#criação de uma função para contar os valores diferentes de zero em uma coluna
contagem<-function(x)
return(length(which(x!=0)))
#dados$especie,dados$ambiente,dados$censo-> sequencia de ordenação que quero manter para que o vetor de somatório faça a ciclagem correta sem perda de dados
#adição de uma coluna chamada daptotal ao df de entrada e que calcula a soma dos daps de uma espécie
dados$daptotal<-dados$dap*dados$individuos
#criação da saída resultado e da coluna de soma dos indivíduos, coluna x
resultado<-aggregate(dados$individuos,by=list(dados$ambiente,dados$censo,dados$especie),FUN=sum)
#criação da coluna de dap total de cada espécie, por ambiente e censo e inserção no df de saída
resultado$daptotal<-aggregate(dados$daptotal,by=list(dados$ambiente,dados$censo,dados$especie),FUN=sum)$x
#criação da coluna com os novos valores de dap da espécie e inserção no df de saída
resultado$dap<-resultado$daptotal/resultado$x
##DENSIDADES##
#criação da coluna de densidade absoluta de indivíduos na área fornecida pelo usuário e inserção no df de saída
resultado$da<-resultado$x/area
#criação do objeto nindiv, que é o número de indivíduos por censo e ambiente
nindiv<-aggregate(resultado$x,by=list(resultado$Group.1,resultado$Group.2),FUN=sum)$x
#criação da coluna de densidade relativa por espécie espécie
resultado$dr<-100*(resultado$x/nindiv)
#Calculo da densidade total
sum(dados$individuos)/area->dens.total
##FREQUÊNCIAS##
#criação da coluna de frequência absoluta por espécie e inserção no df de saída, considera as parcelas que a especie aparece e divide pela soma das parcelas, usando a função contagem
resultado$fa<-aggregate(dados$individuos,by=list(dados$ambiente,dados$censo,dados$especie),FUN=contagem)$x/length(unique(dados$parcela)) #inserção no df de saída do calculo da frequência absoluta, considerando o numero de parcelas que a espécie aparece dividido pelo total de parcelas, com a função unique e lenght
#calculo da frequência relativa e inserção no df de saída
resultado$fr<-100*(resultado$fa/sum(resultado$fa))
##DOMINÂNCIAS##
#calculo da área basal e conversão dela de cm2 para m2 e inserção no df de saída
resultado$abasal<-((resultado$dap/2)^2)*pi/10000
#calculo da dominância absoluta e inserção no df de saida
resultado$doa<-resultado$abasal/area
#criação da coluna abasal.camb que é a área basal total da espécie por censo e ambiente
abasal.camb<-aggregate(resultado$abasal,by=list(resultado$Group.1,resultado$Group.2),FUN=sum)$x
#calculo da dominância relativa
resultado$dor<-100*(resultado$abasal/abasal.camb)
##ÍNDICE DE VALOR DE IMPORTÂNCIA##
#calculo do índice de valor de importância das espécies
resultado$ivi<-resultado$dor+resultado$dr+resultado$fr
##ÍNDICE DE DIVERSIDADE DE SHANNON-WINER##
aggregate(dados$individuos, FUN=sum, by=list(dados$especie))->abund.spp #total de indivíduos por espécie
sum(dados$individuos)->total.ind #total de indivíduos
abund.spp$x/total.ind->shan1 #calculo da abundancia das espécies
-sum(log(shan1)*shan1)->H #indice de shannon
##ÍNDICE DE EQUITABILIDADE DE PIELOU##
#total de espécies
length(unique(dados$especie))->total.sp
log(total.sp)->Hmax
H/Hmax->J
##SAÍDA DOS DADOS##
#nomeia as colunas do df de saída
colnames(resultado)<-c("AMB","CENSO","SP","N.IND.", "DAP.TOTAL", "NEW.DAP", "DA", "DR","FA","FR","ABasal","DomA","DomR","IVI")
resultado[,-c(5,6,11)]
#matrix com saida de resultados resumo
list(total.ind,total.sp,dens.total,H,J)->resultado.resumo #agrupa os resultados do resumo
resultado.resumo<-matrix(resultado.resumo,nrow=1, ncol=5) #cria uma matriz
colnames(resultado.resumo)<-c("Indivíduos","Espécies","DensInd","Shannon","Pielou") #nomeia as colunas da matriz
rownames(resultado.resumo)<-(" ") #nomeia as linhas da matriz
#resultados da função
return(list(resultado.resumo, resultado))
05_curso_antigo/r2014/alunos/trabalho_final/helena.nathalia/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)