Volume estimation and volumetric models"

knitr::opts_chunk$set(collapse = T, comment = "#>")
knitr::opts_chunk$set(fig.width=7, fig.height=5)
options(tibble.print_min = 6L, tibble.print_max = 6L)
library(forestmangr)

Let's calculate the section volume of felled trees using Smalian's method, according to the formula: $$ V_{secao} = \frac{AS_{i} + AS_{i+1}}{2} . L $$

We'll use the exfm7 dataframe as an exemple:

library(forestmangr)
data(exfm7)
data_ex <- exfm7
data_ex

First we'll calculate the volume with bark of each section with the smalianwb function. In it we input the dataframe, and names for the section diameter with bark, section height and tree variables:

data_ex_sma <- smalianwb(data_ex,"di_wb", "hi","TREE")
head(as.data.frame(data_ex_sma))

Now, we'll calculate the volume without bark per secction, using the smalianwb function. We'll input the same variables as before, and the variable name for the bark thickness. In our data, this variable is in millimeters, so, we'll use the bt_mm_to_cm as TRUE to convert it to centimeters:

data_ex_sma <- smalianwob(data_ex_sma,"di_wb","hi","bark_t","TREE",bt_mm_to_cm=T)
head(as.data.frame(data_ex_sma))

This can be done directly using pipes (%>%):

data_ex_sma <- data_ex %>% 
  smalianwb("di_wb", "hi", "TREE") %>% 
  smalianwob("di_wb", "hi", "bark_t", "TREE", bt_mm_to_cm=T)
head(as.data.frame(data_ex_sma))

We can also visualize the mean curve form of the trees in the area, using Kozak's model with the average_tree_curve function:

avg_tree_curve(df=data_ex_sma,d="di_wb",dbh="DBH",h="hi",th="TH")

To calculate the volume of each tree, we'll use the vol_summarise function. We input the data, and dbhm height, volume with bark, volume without bark and tree variables:

data_ex_vol_arvore <- vol_summarise(data_ex_sma, dbh = "DBH", th = "TH", 
                                  vwb="VWB",tree = "TREE",vwob="VWOB")
data_ex_vol_arvore

Now to determine the most adequate volumetric model for this data, we'll fit two models, and compare them using plots for their residuals with the resid_plot function.

Schumacher's volumetric model: $$ Ln(V) = \beta_0 + \beta_1Ln(dbh) + \beta_2Ln(H) $$

Husch's volumetric model: $$ Ln(V) = \beta_0 + \beta_1*Ln(dbh) $$

We'll use the output "merge_est" from the lm_table function. This will estimate the volume for the observed data automatically. Then, we'll use resid_plot to compare the observed variable with the estimated ones:

data_ex_vol_arvore %>% 
  lm_table(log(VWB) ~  log(DBH) + log(TH),output="merge_est",est.name="Schumacher") %>%
  lm_table(log(VWB) ~  log(DBH),output="merge_est",est.name="Husch") %>%
resid_plot("VWB", "Schumacher", "Husch")

Schumacher's model was more symmetrical, and can be considered the better model for this dataset. To safe it's coefficients in a dataframe, we'll fit the model again, but with the standard output:

tabcoef_vwb <- lm_table(data_ex_vol_arvore, log(VWB) ~  log(DBH) + log(TH) )
tabcoef_vwb

And do the same for the volume without bark:

tabcoef_vwob <- lm_table(data_ex_vol_arvore, log(VWOB) ~  log(DBH) + log(TH) )
tabcoef_vwob


Try the forestmangr package in your browser

Any scripts or data that you put into this service are public.

forestmangr documentation built on Nov. 24, 2023, 1:07 a.m.