Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2014:alunos:trabalho_final:rb.angelica:start

Angélica Robatino

1011373_683738601652215_1479197151_n.jpg

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. 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!

—- 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
}

funcao_fitotab.r → script da função

help_fitotab.txt → página de ajuda

simula_fitotab.csv → arquivo de dados para testes

05_curso_antigo/r2014/alunos/trabalho_final/rb.angelica/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)