====== 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