Relação Hipsométrica
Warning
Esta biblioteca está em desenvolvimento, nenhuma das soluções apresentadas está disponível para download.
Estime as alturas das árvores ausentes com base nas alturas medidas em campo.
Parâmetros da Classe
HypRel(x, y, df, model, iterator)
Parâmetros | Descrição |
---|---|
x | Nome da coluna que contém os diâmetros/circunferências das árvores. |
y | Nome da coluna que contém as alturas das árvores. |
df | O DataFrame contendo os dados das árvores. |
model | (Opcional) Uma lista de modelos usados para estimar as alturas das árvores. Se None , usará todos os modelos disponíveis. Os modelos disponíveis são: ['curtis', 'parabolic', 'stofel', 'henriksen', 'prodan_i', 'prodan_ii', 'smd_fm', 'ann'] . |
iterator | (Opcional) Nome de uma coluna usada como iterador. Pode ser o nome da fazenda, nome da parcela, código ou qualquer identificador único. |
Métodos da Classe
HypRel.run()
HypRel.view_metrics()
HypRel.plots(dir = None, show = None)#(1)!
HypRel.get_coef()
HypRel.predict()
- dir = O diretório onde deseja salvar seus gráficos!
Sedir == None
, os gráficos serão exibidos na tela.
show = Exibe os gráficos na tela! Pode serTrue
ouFalse
.
Métodos | Descrição |
---|---|
.run() | Ajusta os modelos. |
.view_metrics() | Retorna uma tabela com as métricas de cada modelo avaliado. |
.plots(dir=None, show=True) | Retorna os gráficos de altura e resíduos. |
.get_coef() | Retorna os coeficientes de cada modelo. |
.predict() | Retorna as alturas previstas e os modelos utilizados em novas colunas. |
Exemplo de Uso
Utilizando os dados de Scolforo (2005), de um povoamento de Pinus taeda variando de 15 a 19 anos, com 5 parcelas de 420m² medidas, podemos ajustar modelos para prever as alturas faltantes.
Primeiras 5 linhas do arquivo:
Parcela | Dap (cm) | H (m) | Idade (anos) |
---|---|---|---|
p-1 | 22.28 | 0.0 | 15 |
p-1 | 23.87 | 22.2 | 15 |
p-1 | 25.46 | 0.0 | 15 |
p-1 | 25.78 | 24.5 | 15 |
p-1 | 26.74 | 22.2 | 15 |
- Importa a classe
HypRel
. - Importa o
pandas
para manipulação de dados.
hyp_rel_example.py | |
---|---|
- Carrega seu arquivo
.xlsx
. - Cria a variável
reg
contendo a classeHypRel
. Comomodel
não foi declarado, usará todos os modelos disponíveis.
Caso queira usar um modelo específico definamodel=['curtis']
por exemplo, dessa forma usará somente o modelo de curtis.
Caso queira ajustar os modelos para cada uma das parcelas utilizeiterator="Parcela"
.
Ex:reg = HypRel('Dap (cm)',"H (m)",df, iterator="Parcela")
- Executa os modelos e salva na variável
results
. - Avalia os modelos ajustados e salva as métricas na variável
metrics
. - Gera os gráficos para os modelos ajustados.
- Obtém os coeficientes de cada modelo ajustado.
- Obtém as alturas finais e os modelos utilizados para a estimativa.
Nesse caso, iterator
e model
não foram declarados, logo todas as equações foram ajustadas para o banco de dados inteiro.
Nesse caso, esses foram os outputs:
Saídas
Tabelas
results
(1)
- DataFrame contendo as alturas estimadas para cada um dos modelos e a altura medida no campo na coluna "Real Height".
curtis | parabolic | stofel | henriksen | prodan_i | prodan_ii | smd_fm | ann | Real Height |
---|---|---|---|---|---|---|---|---|
21.11 | 22.19 | 22.33 | 21.78 | 22.81 | 22.77 | 21.12 | 22.82 | 0.00 |
22.21 | 22.97 | 23.07 | 22.71 | 23.39 | 23.35 | 22.26 | 23.45 | 22.20 |
23.22 | 23.73 | 23.79 | 23.58 | 23.98 | 23.95 | 23.29 | 24.08 | 0.00 |
23.42 | 23.88 | 23.93 | 23.75 | 24.10 | 24.08 | 23.49 | 24.20 | 24.50 |
23.98 | 24.33 | 24.35 | 24.24 | 24.46 | 24.44 | 24.06 | 24.58 | 22.20 |
metrics
(1)
- DataFrame contendo as métricas obtidas para cada modelo, atribuindo um
Score=10
para o melhor modelo.
Modelo | MAE | MAPE | MSE | RMSE | R squared | Explained Var | Mean Error | score |
---|---|---|---|---|---|---|---|---|
henriksen | 2,2125 | 7,6139 | 6,9901 | 2,6439 | 0,4163 | 0,4163 | 5,08E-15 | 10 |
curtis | 2,1993 | 7,5325 | 7,0147 | 2,6485 | 0,4142 | 0,4154 | 0,1182 | 9 |
smd_fm | 2,2099 | 7,6004 | 7,0020 | 2,6461 | 0,4153 | 0,4153 | -0,0015 | 8 |
stofel | 2,2060 | 7,5649 | 7,0210 | 2,6497 | 0,4137 | 0,4148 | 0,1177 | 7 |
parabolic | 2,2183 | 7,6358 | 7,0099 | 2,6476 | 0,4146 | 0,4146 | 5,47E-16 | 6 |
ann | 2,2194 | 7,6453 | 7,0312 | 2,6516 | 0,4128 | 0,4128 | 0,0002 | 5 |
prodan_ii | 2,2008 | 7,5168 | 7,0921 | 2,6631 | 0,4077 | 0,4127 | 0,2434 | 4 |
prodan_i | 2,2020 | 7,5241 | 7,0886 | 2,6625 | 0,4080 | 0,4125 | 0,2323 | 3 |
df_coefficients
(1)
- DataFrame contendo os coeficientes de cada modelo e indicando qual deles foi o selecionado como melhor modelo.
Comoiterator
não foi declarado, a coluna fica vazia.
iterator | model | equation | b0 | b1 | b2 | selected_model |
---|---|---|---|---|---|---|
curtis | ln(h) = b0 + b1·(1/x) | 3,8139 | -17,0254 | False | ||
parabolic | h = b0 + b1·x + b2·x² | 8,9680 | 0,6891 | -0,0043 | False | |
stofel | ln(h) = b0 + b1·ln(x) | 1,6300 | 0,4755 | False | ||
henriksen | h = b0 + b1·ln(x) | -20,1429 | 13,5058 | True | ||
prodan_i | h = x² / (b0 + b1·x + b2·x²) | -7,7832 | 1,0345 | 0,0131 | False | |
prodan_ii | h - 1.3 = x² / (b0 + b1·x + b2·x²) | -7,9302 | 1,1027 | 0,0131 | False | |
smd_fm | y = log(y) ~ x = 1/x + 1/x² | 3,8008 | -16,0925 | False |
final_results
(1)
- DataFrame inical contendo duas novas colunas:
best_predicted_height
com a altura estimada pelo melhor modelo.
selected_model
indicando qual foi o melhor modelo.
Parcela | Dap (cm) | H (m) | Idade (anos) | best_predicted_height | selected_model |
---|---|---|---|---|---|
p-1 | 22,28 | 0 | 15 | 21,77502772 | henriksen |
p-1 | 23,87 | 22,2 | 15 | 22,2 | henriksen |
p-1 | 25,46 | 0 | 15 | 23,57696518 | henriksen |
p-1 | 25,78 | 24,5 | 15 | 24,5 | henriksen |
p-1 | 26,74 | 22,2 | 15 | 22,2 | henriksen |
Se você desejar que cada modelo seja ajustado para cada uma das parcelas basta substituir a linha:
reg = HypRel('Dap (cm)',"H (m)",df)
por:
reg = HypRel('Dap (cm)',"H (m)",df, iterator="Fazenda")
Gráficos
Como a linha reg.plots(r'C:/Your/path/to_save')
informou um diretório para serem salvos os gráficos gerados, serão criadas duas pastas nesse diretório:
Uma pasta chamada heights
contendo os gráficos das curvas ajustadas.
Uma pasta chamada residuals
contendo os gráficos de resíduos dos ajustes.


Modelos Disponíveis
Adaptação do pacote Julia "Forest Mensuration" por SILVA (2022), usado para realizar regressões utilizando diferentes tipos de transformações do diâmetro à altura do peito e altura nos processos de relação hipsométrica.
Transformações de Y
- \( y \)
- \( \log(y) \)
- \( \log(y - 1.3) \)
- \( \log(1 + y) \)
- \( \frac{1}{y} \)
- \( \frac{1}{y - 1.3} \)
- \( \frac{1}{\sqrt{y}} \)
- \( \frac{1}{\sqrt{y - 1.3}} \)
- \( \frac{x}{\sqrt{y}} \)
- \( \frac{x}{\sqrt{y - 1.3}} \)
- \( \frac{x^2}{y} \)
- \( \frac{x^2}{y - 1.3} \)
Transformações de X
- \( x \)
- \( x^2 \)
- \( \log(x) \)
- \( \log(x)^2 \)
- \( \frac{1}{x} \)
- \( \frac{1}{x^2} \)
- \( x + x^2 \)
- \( x + \log(x) \)
- \( x + \log(x)^2 \)
- \( x + \frac{1}{x} \)
- \( x + \frac{1}{x^2} \)
- \( x^2 + \log(x) \)
- \( x^2 + \log(x)^2 \)
- \( x^2 + \frac{1}{x} \)
- \( \log(x) + \log(x)^2 \)
- \( \log(x) + \frac{1}{x} \)
- \( \log(x) + \frac{1}{x^2} \)
- \( \log(x)^2 + \frac{1}{x} \)
- \( \log(x)^2 + \frac{1}{x^2} \)
- \( \frac{1}{x} + \frac{1}{x^2} \)
Explicação sobre Redes Neurais Artificiais abaixo.
Rede Neural Artificial
Ao selecionar o modelo 'ann', 4 diferentes estruturas de redes neurais artificiais serão testadas. Apenas o resultado de um modelo será retornado. O modelo retornado será selecionado pela função de classificação.
Para o modelo 'ann', o módulo sklearn.neural_network.MLPRegressor é utilizado.
Função de Ranqueamento
Para selecionar os modelos com melhor desempenho e classificá-los adequadamente, as seguintes métricas são calculadas:
Nome da Métrica | Estrutura |
---|---|
Erro Médio Absoluto (MAE) | \( MAE = \frac{1}{n} \sum_{i=1}^{n} \|y_i - \hat{y}_i\| \) |
Erro Percentual Médio Absoluto (MAPE) | \( MAPE = \frac{100}{n} \sum_{i=1}^{n} \left\|\frac{y_i - \hat{y}_i}{y_i}\right\| \) |
Erro Quadrático Médio (MSE) | \( MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \) |
Raiz do Erro Quadrático Médio (RMSE) | \( RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} \) |
R² (Coeficiente de Determinação) | \( R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} \) |
Variância Explicada (EV) | \( EV = 1 - \frac{Var(y - \hat{y})}{Var(y)} \) |
Erro Médio | \( Erro\ Médio = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i) \) |
Após obter as métricas para cada modelo testado, o melhor modelo recebe uma pontuação de 10, enquanto os demais recebem pontuações de 9, 8 e assim por diante.
Referências
CURTIS, R. O. (1967). Height-Diameter and Height-Diameter-Age Equations For Second-Growth Douglas-Fir. Forest Science, 13(4), 365–375. https://doi.org/10.1093/forestscience/13.4.365
SCOLFORO, J. R. S. (2005). Biometria Florestal: Parte I: Modelos de regressão linear e não-linear; Parte II: Modelos para relação hipsométrica, volume, afilamento e preso de matéria seca. Lavras: UFLA/FAEPE, pp. 224–226.
SILVA, M. D. (2022). Forest Mensuration.jl: Uma Introdução à Aplicações em Julia. 128 p. Trabalho de Conclusão de Curso (Graduação em Engenharia Florestal) – Universidade Federal de Santa Maria, Frederico Westphalen, RS, 2022.
JAMES, G.; WITTEN, D.; HASTIE, T.; TIBSHIRANI, R. (2013). An Introduction to Statistical Learning. In Springer Texts in Statistics. Springer New York. https://doi.org/10.1007/978-1-4614-7138-7