====== Angélica Robatino ====== {{:bie5782:01_curso_atual:alunos:trabalho_final:rb.angelica:1011373_683738601652215_1479197151_n.jpg?200|}} Sou aluna de doutorado pela PG em Ecologia da Unicamp. Minha tese está relacionada à arquitetura hidráulica de plantas de Cerrado submetidas à disponibilidades hídricas contrastantes. Meu orientador é o Prof. Dr. Fernando R. Martins e meus co-orientadores são a Profa. Sandra M. Carmello- Guerreiro e o Prof. Dr. Rafael S. Oliveira. **Meus exercícios:** [[.:exec]] **Proposta de Trabalho Final** **Principal** Parâmetros fitossociológicos são usados com freqüência na descrição da estrutura de comunidades vegetais. Tais parâmetros permitem a ordenação das espécies de acordo com sua importância relativa na estruturação da comunidade. Minha proposta é criar uma função que calcule os parâmetros fitossociológicos (frequência, densidade e dominância (absolutas e relativas), além do índice de valor de importância (IVI) ), a partir de dados brutos. O objeto de entrada seria um data.frame contendo nas colunas o código das unidades amostrais (parcelas por exemplo), as espécies e os valores de cap ou dap (cap= circunferência à altura do peito; dap= diâmetro à altura do peito). O objeto de saída seria um data.frame contendo os parâmetros calculados ordenados a partir dos valores de IVI [1]. Além disso, poderia ser gerado um gráfico mostrando a contribuição de cada parâmetro para o IVI. [1] Trecho de uma tabela de parâmetros fitossociológicos para exemplificar o objeto de saída. {{:bie5782:01_curso_atual:alunos:trabalho_final:rb.angelica:tabela.jpg|}} Referências: Robatino, A. //Estrutura da comunidade de trepadeiras de dois fragmentos de floresta estacional semidecidual em diferentes estágios de conservação//, 2010. Dissertação (mestrado em Botânica), UNESP, Botucatu. Martins, F.R. //Estrutura de uma floresta mesófila//. Campinas: Edunicamp, 1993. **Plano B** A densidade da madeira pode ser considerada um importante atributo funcional, por estar relacionada à estabilidade, defesa, estoque de C, crescimento potencial e arquitetura hidráulica. Em geral, plantas que apresentam baixa densidade da madeira associada a amplos vasos condutores, tendem a apresentar crescimento rápido, devido ao baixo custo de construção e à maior condutividade hidráulica. Por outro lado, uma elevada densidade da madeira associada a vasos condutores estreitos, pode aumentar as taxas de sobrevivência, devido à segurança biomecânica e hidráulica, além da maior resistência a diversos tipos de dano. Sendo assim, meu plano B seria elaborar uma função que realizasse cálculos de densidade da madeira para diferentes espécies e relacionasse esses valores de densidade a valores de área do lume de vasos condutores através de uma regressão linear. Considerando-se que a densidade da madeira é dada pela razão entre a massa seca e o volume, os dados de entrada seriam dois data.frames. No primeiro estariam em diferentes colunas, os nomes das espécies, os valores de massa seca e os valores de volume. No segundo data.frame estariam os nomes das espécies e os valores medidos da área do lume dos vasos condutores. Os objetos de saída dessa função, seriam um data.frame contendo os valores calculados de densidade da madeira por espécie e o resultado da regressão com os devidos gráficos diagnósticos. Referência: Pérez-Harguindeguy, N et al. New handbook for standardised measurement of plant functional traits worldwide. //Australian Journal of Botany//, 2013. Angélica, suas propostas são um pouco específicas, mas parecem úteis. A proposta A está ok. Seria legal deixar a entrada dos dados no data frame bem explicada no help, para que a função fique aplicável para outras pessoas. Vai ter como optar por partir do cap ou do dap? Só não ficou claro o que é o gráfico da contribuição de cada parâmetro. É um gráfico para cada espécie? Ou é geral, para depois comparar áreas diferentes? Já na proposta B, pelo que eu entendi, você espera uma relação negativa entre densidade e área dos vasos. Por que você terá dois data frames separados? Não daria para juntar em um só? Mas achei interessante! ----//[[sheinak@gmail.com| Sheina]]// **Página de ajuda** fito.tab package:nenhum R Documentation Description: Calcula os parâmetros fitossociológicos, frequência, densidade e dominância (absolutas e relativas), além do índice de valor de importância (IVI). Permite a utilização de valores de diâmetro (dap) ou circunferência/perímetro (cap) do caule para cálculo de área basal, além da possível remoção de dados relativos a plantas mortas. Usage: fito.tab (x, dap= T, rm.mortas= T, col= F) Arguments: x Data frame contendo nas colunas os códigos das unidades amostrais, nomes dos taxa de interesse e valores de diâmetro (dap) ou circunferência/perímetro (cap) dos caules. A coluna contendo os códigos das unidades amostrais deve receber o nome “parcelas”. A coluna com dados de taxa deve receber o nome “taxon” e a coluna com os valores de diâmetro ou circunferência do caule deve receber o nome “dap” ou “cap” respectivamente. A nomeação das colunas deve respeitar a grafia citada; não devem ser colocados acentos nem as aspas. dap Permite a realização do cálculo de área basal a partir de valores de diâmetro ou circunferência (perímetro) do caule. O default é a realização dos cálculos a partir de dados de diâmetro rm.mortas Permite a remoção de linhas do data frame que contém dados referentes a plantas mortas(rm.mortas= T, default). Caso haja dados associados a essas plantas é possível mantê-los para a realização dos cálculos, neste caso rm.mortas= F. col Permite que o gráfico de saída seja colorido ou em tons de cinza, sendo este o default. Details: É indiferente o número de colunas e tipos de dados presentes no data frame de entrada na função, desde que existam colunas contendo os códigos das unidades amostrais, os taxa de interesse e os valores de diâmetro ou circunferência do caule. Além disso, tais colunas devem ser nomeadas da seguinte forma “parcelas”, “taxon” e “dap” ou “cap”, respectivamente, sem o acréscimo de acentos ou aspas. A coluna “dap” ou “cap” é numérica e será tratada como tal. Para isso, o símbolo “.” deve ter sido previamente definido como o separador de decimais no data frame de entrada. Caso haja indivíduos mortos, deve ser escrita a palavra “morta” (em letra minúscula, sem as aspas), na coluna “taxon”, na linha referente a tal indivíduo. Isso permitirá a exclusão desse(s) indivíduo(s) dos cálculos, ou sua inserção nos cálculos pertencendo à categoria de plantas mortas junto com outros indivíduos na mesma condição. Value: fito.tab retorna um barplot com os 5 maiores valores de IVI, onde é possível observar o quanto cada parâmetro (De.R, Freq.R e Do.R) influência o IVI de cada táxon. Retorna ainda um data frame com os seguintes parâmetros fitossociológicos calculados: De.A Densidade absoluta – Número de indivíduos de cada táxon na área amostrada De.R Densidade relativa - Porcentagem com que um táxon é encontrado na amostragem em relação ao total de indivíduos amostrados (ni/N*100) Freq.A Frequência absoluta - Porcentagem de unidades amostrais onde foi amostrado um determinado táxon (Pi/Pt*100) Freq.R Frequência relativa - Porcentagem de ocorrência de um táxon em relação ao total de ocorrências (Freq.Ai/∑Freq.A*100) Do.A Dominância absoluta - Área basal total (em m2) que um táxon ocupa na área amostral Do.R Dominância relativa - Porcentagem da área basal total ocupada por indivíduos de um determinado táxon (ABTi/ABT*100) IVI Índice de valor de importância (De.R + Freq.R + Do.R) ## onde: Ni= número de indivíduos do táxon “i” N= total de indivíduos amostrados Pi= unidades amostrais onde o táxon “i” foi encontrado Pt= total de unidades amostrais ∑Freq.A = somatório das freqüências absolutas de todas as espécies ABTi= somatório da área basal do caule de todos os indivíduos do táxon “i” ABT= somatório da área basal do caule de todos os indivíduos amostrados Warning: É imprescindível a definição do símbolo “.” como separador de decimais na coluna “dap” ou “cap”. Caso contrário, a função pode não funcionar corretamente. Author: Angélica Robatino (rb.angelica@gmail.com) Aluna de doutorado pela PG Ecologia – Unicamp - SP References: Felfili, J.M. et al. Fitossociologia no Brasil: métodos e estudos de caso. Viçosa: Editora UFV, 2011. Martins, F.R. Estrutura de uma floresta mesófila. Campinas: Edunicamp, 1993. Example: taxon= sample(c("sp1","sp2","sp3","sp4","morta","sp5","sp6","sp7","sp8","sp9")) parcelas= rep(c(1:5), each=4) dap = sample(seq (from = 1, to = 5, length = 10)) cap= sample (seq (from= 5, to= 9, length= 10)) exemplo = data.frame (parcelas,taxon,dap,cap) fito.tab (exemplo) fito.tab (exemplo, col=T) fito.tab (exemplo, dap=F, rm.mortas=F) **Código da função (Proposta principal)** ## função que gera a tabela de fitossociologia, e gráfico anexo, a partir de um data frame x ## fito.tab= function (x, dap=T, rm.mortas=T, col=F) # objeto de entrada "x" deve ser um data frame, o default é fazer os cálculos de área basal a partir do dap, # e remover do data frame as linhas contendo plantas mortas { dados = x # transforma o data frame inserido, no objeto dados, manipulável pela função colnames(dados) <- tolower(colnames(dados)) # renomeia as colunas do data frame usando apenas letras minúsculas if (rm.mortas== T) # se a opção for remover as plantas mortas do data frame { filtro = tolower(dados$taxon) == "morta" # transforma para letra minúscula todas as palavras "morta" no objeto dados dados = dados[!filtro, ] # remoção das linhas contendo plantas mortas do data frame cat ("\n", sum(filtro), "morta(s) removida(s) da tabela \n") # exibe na tela uma mensagem com o número de "mortas" removidas do data frame } dados$parcelas= factor(dados$parcelas) # transforma a coluna parcelas em fator dados$taxon= factor(dados$taxon) # transforma a coluna taxon em fator tabela.fito= data.frame(taxon=unique(dados$taxon)) # cria o objeto (data frame) de saída dos dados tabela.fito$taxon= tabela.fito[order(tabela.fito$taxon),] # cria a primeira coluna do data frame resultante De.A= table (dados$taxon) # calcula a densidade absoluta tabela.fito$De.A= as.data.frame(De.A)[,2] # insere os dados de densidade absoluta no data frame resultante De.R= (De.A/length(dados$taxon))*100 # calcula a densidade relativa tabela.fito$De.R = as.data.frame(De.R)[,2] # insere os dados de densidade relativa no data frame resultante npar= ncol (table (dados$taxon, dados$parcelas)) # encontra o número total de parcelas dens.par= table (dados$taxon, dados$parcelas) # mostra a densidade de cada táxon por parcela rowSums(dens.par>=1) #soma as linhas onde a densidade dos taxa é >=1 Freq.A= (rowSums(dens.par>=1)/npar)*100 # calcula a frequência absoluta tabela.fito$Freq.A = as.data.frame(Freq.A)[,1] # insere os dados de frequência absoluta no data frame resultante Freq.T= sum(Freq.A) # somatória de todas as frequências Freq.R=(Freq.A/Freq.T)*100 # calcula a frequência relativa tabela.fito$Freq.R= as.data.frame(Freq.R)[,1] # insere os dados de frequência relativa no data frame if (dap==F) # caso sejam inseridos dados de cap (circunferência) ao invés de dap (diâmetro) { AB= ((dados$cap)^2/4*pi) # calcula a área basal a partir dos valores de cap dados$AB = ((dados$cap)^2/4*pi)*0.0001 # transforma a área basal em m² e insere os valores no objeto dados } else # caso sejam inseridos valores de dap { AB= pi*(((dados$dap)^2)/4) # calcula a área basal a partir dos valores de dap dados$AB= pi*(((dados$dap)^2)/4)*0.0001 # transforma a área basal em m² e insere os valores no objeto dados } Do.A= aggregate(dados$AB, FUN= sum, by= list(dados$taxon)) # calcula a dominância absoluta tabela.fito$Do.A = as.data.frame(Do.A)[,2] # insere os dados de dominância absoluta no data frame resultante ABt= sum(dados$AB) # calcula a área basal total Do.R= (Do.A$x/ABt)*100 # calcula a dominância relativa tabela.fito$Do.R = as.data.frame(Do.R)[,1] # insere os dados de dominância relativa no data frame resultante IVI= De.R+ Freq.R+ Do.R # calcula o índice de valor de importância (IVI) tabela.fito$IVI = as.data.frame(IVI)[,2] # insere os dados de IVI no data frame resultante tabela.fito= tabela.fito[order(tabela.fito$IVI,decreasing=T), ] # ordena de forma decrescente o data frame resultante a partir dos valores de IVI ### criando o gráfico ### if (length(tabela.fito$taxon)<=4) # se o número de nívels na coluna "taxon" do data frame for <=4 { plot.tab= tabela.fito[,c("De.R", "Freq.R", "Do.R")] # seleciona no data frame resultante, os dados dos parâmetros densidade relativa, # freqência relativa e dominância relativa (componentes do IVI) plot.tab= as.matrix(t(plot.tab)) # transpõe os elementos do data frame gerado e o transforma em "matrix", para que esteja adequado à função barplot colnames(plot.tab)= tabela.fito$taxon # nomeia as colunas da matriz } else # se o número de nívels na coluna "taxon" do data frame for >=5 { plot.tab= tabela.fito[1:5, c("De.R", "Freq.R", "Do.R")] # seleciona no data frame resultante, apenas os 5 primeiros valores dos parâmetros, densidade relativa, # freqência relativa e dominância relativa (componentes do IVI) plot.tab= as.matrix(t(plot.tab)) # transpõe os elementos do data frame gerado e o transforma em "matrix", para que esteja adequado à função barplot colnames(plot.tab)= tabela.fito$taxon[1:5] # nomeia as colunas da matriz } x11() # abre uma janela gráfica par (bty= "L", tcl= 0.3, tcl= -0.3) # define parâmetros gráficos (borda e marcadores) par(mar= c(5.1,12,4,1.5)) # define as margens do gráfico if (col==T) # quando é selecionada a opção gráfico colorido { barplot(plot.tab, horiz= T, border= NA, font= 3, beside=F, las=1, col= c("darkcyan","turquoise","lightcyan"), # plota um gráfico de barras horizontais com os componentes do IVI, legend.text = c("De.R (%)","Freq.R (%)", "Dom.R (%)"), args.legend = list(x = "topright", cex= 1, bty="n")) # usando tons de ciano, com legenda no canto superior direito mtext("IVI", side= 1, line = 2.5, font= 2) # coloca legenda no eixo X } else # quando é mantido o default (gráfico em tons de cinza) { barplot(plot.tab, horiz= T, border= NA, font= 3, beside=F, las=1, # plota um gráfico de barras horizontais com os componentes do IVI, em tons de cinza, legend.text = c("De.R (%)","Freq.R (%)", "Dom.R (%)"), args.legend = list(x = "topright", cex= 1, bty="n")) # com legenda no canto superior direito mtext("IVI", side= 1, line = 2.5, font= 2) # coloca legenda no eixo X } return (tabela.fito) # retorna na tela a tabela resultante } {{:bie5782:01_curso_atual:alunos:trabalho_final:rb.angelica:funcao_fitotab.r|}} -> script da função {{:bie5782:01_curso_atual:alunos:trabalho_final:rb.angelica:help_fitotab.txt|}} -> página de ajuda {{:bie5782:01_curso_atual:alunos:trabalho_final:rb.angelica:simula_fitotab.csv|}} -> arquivo de dados para testes