Volumetria
Warning
Esta biblioteca está em desenvolvimento, nenhuma das soluções apresentadas está disponível para download.
Processe dados de inventário florestal e ajuste equações volumétricas e funções de afilamento para uso posterior.
Parâmetros da Classe
Volumetrics(df, tree_identifier, tree_height, tree_dbh, tree_bark,
segment_height, segment_diameter, tree_bark)
Parâmetros | Descrição |
---|---|
df | O dataframe contendo os dados de cubagem. |
tree_identifier | Nome da coluna que contém os identificadores únicos das árvores. |
tree_height | Nome da coluna que contém as alturas totais das árvores (metros). |
tree_dbh | Nome da coluna contendo os valores do diâmetro à altura do peito (DAP) das árvores (centímetros). |
tree_bark | (Opcional) Nome da coluna contendo os valores da espessura da casca das árvores (centímetros). Se tree_bark == None , retorna apenas volumes com casca no método get_volumes() . |
segment_height | (Opcional) Nome da coluna contendo as alturas dos segmentos cubados das árvores (metros). Obrigatório para o método fit_taper_functions() . |
segment_diameter | (Opcional) Nome da coluna contendo os diâmetros dos segmentos cubados das árvores (centímetros). Obrigatório para o método fit_taper_functions() . |
tree_bark | (Opcional) Nome da coluna contendo a casca das árvores (centímetros). |
Métodos da Classe
Volumetrics.get_volumes()
Volumetrics.fit_taper_functions(models, iterator, save_dir = None)#(1)!
Volumetrics.fit_volumetric_functions(models, iterator, vol_column,
save_dir = None)#(2)!
Volumetrics.get_individual_diameter(hi, tree_height, tree_dbh)#(3)!
Volumetrics.get_individual_taper_volume(tree_height, tree_dbh, stump=0.1)#(4)!
Volumetrics.get_individual_volume(tree_height, tree_dbh)#(5)!
-
models = (Opcional) Lista de modelos a serem ajustados! Se
models == None
, utiliza todos os modelos disponíveis.
Modelos disponíveis:['schoepfer', 'bi', 'kozak','johnson', 'matte', 'ann']
iterator = (Opcional) Nome de uma coluna a ser usada como iterador. Pode ser o nome da fazenda, nome da parcela, código ou qualquer identificador único.
save_dir = (Opcional) Diretório para salvar os parâmetros da função ajustada e o modelo ANN. -
models = (Opcional) Lista de modelos a serem ajustados! Se
models == None
, utiliza todos os modelos disponíveis.
iterator = (Opcional) Nome de uma coluna a ser usada como iterador. Pode ser o nome da fazenda, nome da parcela, código ou qualquer identificador único.
vol_column = (Opcional) Nome da coluna com os valores de volume. Sevol_column == None
, utiliza os volumes obtidos pelo métodoget_volumes()
para ajustar as funções volumétricas.
save_dir = (Opcional) Diretório para salvar os parâmetros da função ajustada e o modelo ANN. -
hi = Fração da altura da árvore para a qual se deseja obter o diâmetro (metros).
tree_height = Altura total da árvore (metros).
tree_dbh = Diâmetro à altura do peito (DAP) da árvore (centímetros). -
tree_height = Altura total da árvore (metros).
tree_dbh = Diâmetro à altura do peito (DAP) da árvore (centímetros).
stump = Altura do toco (metros). Por padrão, usastump = 0.1
. -
tree_height = Altura total da árvore (metros).
tree_dbh = Diâmetro à altura do peito (DAP) da árvore (centímetros).
Métodos | Descrição |
---|---|
.get_volumes() | Retorna o volume de cada segmento cubado e o volume total de cada árvore, separado por tree_identifier . Se tree_bark == None , retorna apenas o volume com casca; caso contrário, retorna o volume com e sem casca. |
.fit_taper_functions() | Ajusta os modelos disponíveis de funções de afilamento. Salva um arquivo .json com os coeficientes para cada modelo ajustado e um arquivo .pkl para os modelos de ANN ajustados. |
.get_individual_diameter() | Retorna um dataframe pandas com o diâmetro em uma altura hi da árvore para cada modelo de afilamento ajustado. |
.get_individual_taper_volume() | Retorna um DataFrame pandas com o volume estimado para a altura e diâmetro à altura do peito fornecidos para cada função de afilamento ajustada. Utiliza a integração das funções de afilamento para obter o resultado. |
.get_individual_volume() | Retorna um DataFrame pandas com o volume estimado para a altura e diâmetro à altura do peito fornecidos para cada função volumétrica ajustada. |
Exemplo de Uso
Considere uma base de dados de cubagem composta por 50 árvores do gênero Eucalyptus, nas quais os diâmetros foram mensurados nas alturas de 0,1 metro, 0,6 metro, 1,30 metro e, a partir desse ponto, em intervalos de 2 metros ao longo do fuste.
Primeiras 5 linhas do arquivo:
Fazenda | arvore_n | dap (cm) | altura_total (m) | seção (m) | diametro_c_casca (cm) | diametro_s_casca (cm) | casca (cm) |
---|---|---|---|---|---|---|---|
Fazenda 1 | 1 | 24,8 | 28,0 | 0,1 | 30,05 | 26,51 | 1,74 |
Fazenda 1 | 1 | 24,8 | 28,0 | 0,6 | 26,55 | 23,15 | 1,96 |
Fazenda 1 | 1 | 24,8 | 28,0 | 1,3 | 24,75 | 21,93 | 1,94 |
Fazenda 1 | 1 | 24,8 | 28,0 | 2,0 | 23,85 | 21,48 | 1,90 |
Fazenda 1 | 1 | 24,8 | 28,0 | 4,0 | 21,40 | 19,30 | 1,11 |
taper_functions_example.py | |
---|---|
- Importa a classe
Volumetrics
. - Importa o
pandas
para manipulação de dados.
- Carrega seu arquivo
.xlsx
. - Cria a variável
vol
contendo a classeVolumetrics
. - Calcula os volumes para cada árvore e segmento, separando por
iterator
e salva os resultados na variávelcalculated_volumes_df
.
Será retornado o DataFrame incial com as seguintes colunas adicionais:segment_vol_with_bark
,segment_vol_without_bark
,tree_vol_with_bark
,tree_vol_without_bark
,bark_factor
emean_bark_factor
. - Salva o DataFrame com os volumes calculados em
exemplo_volumetrics_with_vol.xlsx
. - Ajusta as funções de afilamento e rede neural artificial para cada
iterator
e salva as métricas de desempenho na variávelmetrics_taper
. Isso criará um arquivo.json
com os coeficientes dos modelos e arquivos.pkl
para os modelos ajustados de RNA e salvará os arquivos gerados emsave_dir
. - Obtém o diâmetro a 10 metros de uma árvore com altura total de 31 metros e diâmetro à altura do peito (DAP) de 30 centímetros usando os ajustes realizados e salva na variável
individual_diameter
. - Obtém os volumes calculados pela integração das funções de afilamento para uma árvore com altura de 35 metros, diâmetro à altura do peito de 32 centímetros, considerando uma altura de toco de 0,15 metros e salve na variável
taper_volume
. - Ajusta todas funções volumétricas para cada
iterator
e salva emsave_dir
, salvando as métricas na variávelmetrics_vol
. Como nenhuma coluna de volumesvol_column
foi fornecida, usará o volume obtido pelo métodoget_volumes
para ajuste dos volumes. - Calcula o volume de uma árvore de 21,8 metros de altura e 19 centímetros de dap usando todas as funções volumétricas e salva na variável
individual_volume
.
Saídas
Tabelas
calculated_volumes_df
(1)
- DataFrame incial com as seguintes colunas adicionais:
segment_vol_with_bark
,segment_vol_without_bark
,tree_vol_with_bark
,tree_vol_without_bark
,bark_factor
emean_bark_factor
.
Fazenda | arvore_n | dap (cm) | altura_total (m) | seção (m) | diametro_c_casca (cm) | diametro_s_casca (cm) | casca (cm) | segment_vol_with_bark | segment_vol_without_bark | tree_vol_with_bark | tree_vol_without_bark | bark_factor | mean_bark_factor |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Fazenda 1 | 1 | 24,84076433 | 28 | 0,1 | 30,05 | 26,51 | 1,74 | 0,007092165 | 0,005544635 | 0,559879936 | 0,387477996 | 0,692073373 | 0,682430303 |
Fazenda 1 | 1 | 24,84076433 | 28 | 0,6 | 26,55 | 23,15 | 1,96 | 0,031450877 | 0,023341421 | 0,559879936 | 0,387477996 | 0,692073373 | 0,682430303 |
Fazenda 1 | 1 | 24,84076433 | 28 | 1,3 | 24,75 | 21,93 | 1,94 | 0,036171179 | 0,026055822 | 0,559879936 | 0,387477996 | 0,692073373 | 0,682430303 |
Fazenda 1 | 1 | 24,84076433 | 28 | 2,0 | 23,85 | 21,48 | 1,90 | 0,032463883 | 0,02310445 | 0,559879936 | 0,387477996 | 0,692073373 | 0,682430303 |
Fazenda 1 | 1 | 24,84076433 | 28 | 4,0 | 21,40 | 19,30 | 1,11 | 0,080407591 | 0,065402308 | 0,559879936 | 0,387477996 | 0,692073373 | 0,682430303 |
Fazenda 1 | 1 | 24,84076433 | 28 | 6,0 | 20,50 | 19,17 | 1,81 | 0,068942643 | 0,047175553 | 0,559879936 | 0,387477996 | 0,692073373 | 0,682430303 |
Sobre as colunas geradas
segment_vol_with_bark
: Volume do segmento do fuste com casca, calculado entre duas seções consecutivas de medição.segment_vol_without_bark
: Volume do segmento do fuste sem casca, calculado entre duas seções consecutivas de medição.tree_vol_with_bark
: Volume total da árvore com casca, obtido pela soma dos volumes de todos os segmentos com casca.tree_vol_without_bark
: Volume total da árvore sem casca, obtido pela soma dos volumes de todos os segmentos sem casca.bark_factor
: Fator de casca do segmento, calculado como a razão entre o volume com casca e o volume sem casca para aquele segmento.mean_bark_factor
: Fator de casca médio da árvore, calculado como a média dos fatores de casca de todos os segmentos.
metrics_taper
(1)
- DataFrame com as métricas de avaliação geradas para cada
iterator
e modelo de afilamento e rede neural artificial, incluindo a pontuação atribuída a cada modelo com base em seu desempenho.
iterator | model | MAE | MAPE | MSE | RMSE | R squared | Explained Var | Mean Error | score |
---|---|---|---|---|---|---|---|---|---|
Fazenda 1 | kozak | 0,580666 | 5,718699 | 0,572843 | 0,756864 | 0,994621 | 0,994621 | -0,000167 | 10 |
Fazenda 1 | bi | 0,635942 | 5,972947 | 0,643045 | 0,801901 | 0,993962 | 0,994016 | -0,075560 | 9 |
Fazenda 1 | ann | 0,576319 | 5,651187 | 0,560707 | 0,748804 | 0,994735 | 0,994739 | 0,020658 | 8 |
Fazenda 1 | schoepfer | 0,769151 | 7,532993 | 1,033545 | 1,016634 | 0,990295 | 0,990356 | -0,080168 | 7 |
Fazenda 1 | johnson | 1,078775 | 10,108434 | 1,978243 | 1,406500 | 0,981425 | 0,981571 | -0,124507 | 6 |
Fazenda 1 | matte | 1,424262 | 14,718423 | 3,337336 | 1,826838 | 0,968664 | 0,969344 | 0,269282 | 5 |
Fazenda 2 | ann | 1,342497 | 7,238220 | 3,318417 | 1,821652 | 0,988023 | 0,988023 | 0,001891 | 10 |
Fazenda 2 | kozak | 1,350729 | 7,357823 | 3,468079 | 1,862278 | 0,987483 | 0,987483 | -0,002186 | 9 |
Fazenda 2 | bi | 1,374535 | 7,880664 | 3,483492 | 1,866412 | 0,987427 | 0,987435 | -0,045863 | 8 |
Fazenda 2 | schoepfer | 1,678529 | 8,785657 | 4,895865 | 2,212660 | 0,982329 | 0,982373 | 0,110280 | 7 |
Fazenda 2 | matte | 2,180025 | 13,928099 | 7,414827 | 2,723018 | 0,973238 | 0,974475 | 0,585444 | 6 |
Fazenda 2 | johnson | 2,216439 | 12,099970 | 9,165003 | 3,027376 | 0,966921 | 0,966956 | 0,097858 | 5 |
individual_diameter
(1)
- DataFrame com os diâmetros individuais estimados pelas funções de afilamento e rede neural artificial para cada
iterator
e modelo de afilamento para uma árvore de 31 metros de altura, 30 centímetros de DAP, em uma altura de 10 metros.
iterator | model | Predicted_diameter (cm) |
---|---|---|
Fazenda 1 | schoepfer | 22,75296935 |
Fazenda 1 | bi | 22,35954058 |
Fazenda 1 | kozak | 22,45146956 |
Fazenda 1 | johnson | 23,41945889 |
Fazenda 1 | matte | 22,83651908 |
Fazenda 1 | ann | 23,33443805 |
Fazenda 2 | schoepfer | 21,48912862 |
Fazenda 2 | bi | 23,08526645 |
Fazenda 2 | kozak | 22,40805692 |
Fazenda 2 | johnson | 22,46401882 |
Fazenda 2 | matte | 21,43830806 |
Fazenda 2 | ann | 23,71472482 |
taper_volume
(1)
- DataFrame com os volumes estimados pela integração das funções de afilamento e rede neural artificial para cada
iterator
e modelo de afilamento para uma árvore de 35 metros de altura, 32 centímetros de DAP.
iterator | model | Predicted_volume (m³) |
---|---|---|
Fazenda 1 | schoepfer | 1,166056704 |
Fazenda 1 | bi | 1,143061281 |
Fazenda 1 | kozak | 1,165284829 |
Fazenda 1 | johnson | 1,201758409 |
Fazenda 1 | matte | 1,150231088 |
Fazenda 1 | ann | 1,326654958 |
Fazenda 2 | schoepfer | 1,055148596 |
Fazenda 2 | bi | 1,179288353 |
Fazenda 2 | kozak | 1,147756782 |
Fazenda 2 | johnson | 1,108690858 |
Fazenda 2 | matte | 1,066598472 |
Fazenda 2 | ann | 1,178903371 |
metrics_vol
(1)
- DataFrame com as métricas de avaliação geradas para cada
iterator
, modelo volumétrico e rede neural artificial, incluindo a pontuação atribuída a cada modelo com base em seu desempenho.
iterator | model | MAE | MAPE | MSE | RMSE | R squared | Explained Var | Mean Error | score |
---|---|---|---|---|---|---|---|---|---|
Fazenda 1 | honner | 0,028987 | 6,510184 | 0,001409 | 0,037535 | 0,998022 | 0,998143 | -0,009291 | 10 |
Fazenda 1 | ann | 0,020789 | 5,362507 | 0,000713 | 0,026703 | 0,998999 | 0,998999 | -0,000569 | 9 |
Fazenda 1 | takata | 0,027501 | 5,250705 | 0,001291 | 0,035934 | 0,998187 | 0,998214 | -0,004318 | 8 |
Fazenda 1 | spurr_log | 0,026612 | 4,438766 | 0,001235 | 0,035137 | 0,998267 | 0,998277 | -0,002731 | 7 |
Fazenda 1 | schumacher_hall | 0,027584 | 4,649301 | 0,001203 | 0,034683 | 0,998311 | 0,998321 | -0,002636 | 6 |
Fazenda 1 | meyer | 0,025136 | 6,229777 | 0,001112 | 0,033346 | 0,998439 | 0,998439 | 0,000000 | 5 |
Fazenda 1 | stoate | 0,026301 | 6,530368 | 0,001158 | 0,034029 | 0,998374 | 0,998374 | 0,000000 | 4 |
Fazenda 1 | spurr | 0,026008 | 9,348743 | 0,001177 | 0,034306 | 0,998348 | 0,998348 | 0,000000 | 3 |
Fazenda 1 | naslund | 0,024859 | 11,898225 | 0,001020 | 0,031930 | 0,998569 | 0,998571 | 0,001263 | 2 |
Fazenda 1 | ogaya | 0,410646 | 151,1923 | 0,213968 | 0,462567 | 0,699650 | 0,719168 | -0,117918 | 1 |
Fazenda 2 | naslund | 0,153069 | 6,603060 | 0,048230 | 0,219612 | 0,974528 | 0,974529 | -0,001349 | 10 |
Fazenda 2 | schumacher_hall | 0,160824 | 9,781453 | 0,048410 | 0,220023 | 0,974433 | 0,974447 | -0,005183 | 9 |
Fazenda 2 | spurr_log | 0,160540 | 9,932109 | 0,048446 | 0,220105 | 0,974414 | 0,974428 | -0,005270 | 8 |
Fazenda 2 | takata | 0,159037 | 6,922203 | 0,049057 | 0,221488 | 0,974091 | 0,974091 | -0,000386 | 7 |
Fazenda 2 | ann | 0,150892 | 5,508166 | 0,043498 | 0,208562 | 0,977027 | 0,977053 | 0,007015 | 6 |
Fazenda 2 | meyer | 0,155147 | 8,411204 | 0,047824 | 0,218687 | 0,974742 | 0,974742 | 0,000000 | 5 |
Fazenda 2 | stoate | 0,161432 | 14,918844 | 0,048986 | 0,221328 | 0,974129 | 0,974129 | 0,000000 | 4 |
Fazenda 2 | spurr | 0,181962 | 28,583026 | 0,055897 | 0,236425 | 0,970479 | 0,970479 | 0,000000 | 3 |
Fazenda 2 | honner | 0,189541 | 6,829942 | 0,062964 | 0,250927 | 0,966746 | 0,967397 | 0,035110 | 2 |
Fazenda 2 | ogaya | 0,430466 | 40,223791 | 0,284181 | 0,533086 | 0,849913 | 0,850523 | 0,034001 | 1 |
individual_volume
(1)
- DataFrame com os volumes estimados pelas funções volumétricas e rede neural artificial para cada
iterator
para uma árvore de 21,8 metros de altura, 19 centímetros de DAP.
iterator | model | Predicted_volume (m³) |
---|---|---|
Fazenda 1 | spurr | 0,241827831 |
Fazenda 1 | schumacher_hall | 0,248607044 |
Fazenda 1 | honner | 0,262977386 |
Fazenda 1 | ogaya | 0,860375777 |
Fazenda 1 | naslund | 0,245824632 |
Fazenda 1 | takata | 0,255820523 |
Fazenda 1 | spurr_log | 0,251481659 |
Fazenda 1 | meyer | 0,228396501 |
Fazenda 1 | stoate | 0,241410100 |
Fazenda 1 | ann | 0,271805848 |
Fazenda 2 | spurr | 0,421606899 |
Fazenda 2 | schumacher_hall | 0,332105882 |
Fazenda 2 | honner | 0,232727813 |
Fazenda 2 | ogaya | 0,939382897 |
Fazenda 2 | naslund | 0,324612548 |
Fazenda 2 | takata | 0,287273333 |
Fazenda 2 | spurr_log | 0,336234242 |
Fazenda 2 | meyer | 0,200621992 |
Fazenda 2 | stoate | 0,242861095 |
Fazenda 2 | ann | 0,284503571 |
Arquivos .json
Para cada função de afilamento e função volumétrica, são gerados arquivos .json contendo os coeficientes estimados de cada modelo. Um arquivo .json
individual é criado para cada iterator, nomeado de acordo com o respectivo identificador.
- taper_functions_coefficients_Fazenda 1.json
- taper_functions_coefficients_Fazenda 2.json
- volumetrics_functions_coefficients_Fazenda 1.json
- volumetrics_functions_coefficients_Fazenda 2.json
Arquivos .pkl
Da mesma forma, para cada rede neural artificial ajustada para afilamento ou predição de volume, é gerado um arquivo .pkl
contendo o modelo treinado, nomeado de acordo com o respectivo iterator.
- taper_model_ann_Fazenda 1.pkl
- taper_model_ann_Fazenda 2.pkl
- volumetric_ann_Fazenda 1.pkl
- volumetric_ann_Fazenda 2.pkl
Embora não seja possível visualizar diretamente esse tipo de arquivo, ele armazena os parâmetros da rede neural e suas configurações internas, que serão utilizados posteriormente na geração dos sortimentos.
Funções de afilamento disponíveis
Notação
- \( β_n \): Parâmetros ajustados
- \( p \): Parâmetro geométrico/auxiliar (inicialmente 0.1)
- \( d_i \): Diâmetro (cm)
- \( \text{dap} \): Diâmetro à altura do peito (cm)
- \( H \): Altura total (m)
- \( h_i \): Altura do segmento (m)
Rede Neural Artificial
Ao selecionar o modelo 'RNA', 6 diferentes estruturas de redes neurais artificiais serão testadas. Apenas o resultado de 1 modelo será retornado. O modelo retornado será selecionado pela função de classificação.
Para o modelo 'RNA', utiliza-se o módulo sklearn.neural_network.MLPRegressor.
Modelos volumétricos disponíveis
Utilize os mesmos modelos de RNA usados para a função de afilamento.
Notação
- \( b_n \): Parâmetros ajustados
- \( V \): Volume estimado (m³)
- \( \text{dap} \): Diâmetro à altura do peito (cm)
- \( H \): Altura total (m)
Função de Classificação
Para selecionar os modelos com melhor desempenho e classificá-los adequadamente, são obtidas as seguintes métricas:
Nome da métrica | Estrutura |
---|---|
Erro Médio Absoluto (MAE) | \( MAE = \frac{1}{n} \sum_{i=1}^{n} \|y_i - \hat{y}_i\| \) |
Erro Médio Percentual Absoluto (MAPE) | \( MAPE = \frac{100}{n} \sum_{i=1}^{n} \left\|\frac{y_i - \hat{y}_i}{y_i}\right\| \) |
Erro Médio Quadrático (MSE) | \( MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \) |
Raiz do Erro Médio Quadrático (RMSE) | \( RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} \) |
R Quadrado (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) \) |
Notação
- \( y_i \): Valor observado para a i-ésima observação
- \( \hat{y}_i \): Valor estimado (predito) para a i-ésima observação
- \( n \): Número total de observações
- \( \bar{y} \): Média dos valores observados
Após obter as métricas para cada modelo testado, o melhor modelo recebe a pontuação 10, enquanto os demais recebem pontuações decrescentes (9, 8 e assim por diante).
Referências
BI, H. (2000). Trigonometric variable-form taper equations for Australian eucalypts. Forest Science, 46(3), 397–409.
JOHNSON, T. (1911). Taxatariska undersökringar om skogsträdens form. Skgsvardsföreningens tiedskrifle. Häfte, Berlim, 9(10), 285–329.
KOZAK, A. (2004). My last words on taper equations. The Forestry Chronicle, 80(4), 507–515.
MATTE, L. (1949). The taper of coniferous species with special reference to Loblolly Pine. Forestry Chronicle, Mattawa, 25(1), 21–31.
MEYER, H. A. (1940). A mathematical expression for height curves. Journal of Forestry, 38, 415–420. https://doi.org/10.1093/jof/38.5.415
NÄSLUND, M. (1936). Skogsförsöksanstaltens gallringsförsök i tallskog. Meddelanden från Statens Skogsförsöksanstalt, Swedish Institute of Experimental Forestry, 29: 169.
SCHÖEPFER, W. (1966). Automatisierung des Massen-, Sorten- und Wertberechnung stehender Waldbestände. Schriftenreihe Bad. Wurtt-Forstl.
SCHUMACHER, F. X.; HALL, F. S. (1933). Logarithmic expression of timber tree volume. Journal of Agricultural Research, Washington, 47(9), 719–734.
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.
SPURR, S. R. (1952). Forest inventory. New York: Ronald Press, 476 p.
STOATE, I. N. (1945). The use of a volume equation in pine stands. Australian Forestry, Canberra, 9, 48–52.