# Cubagem e modelos volumétricos

Vamos calcular o volume da seção de dados cubados pelo método de Smalian, conforme a fórmula: \[ V_{secao} = \frac{AS_{i} + AS_{i+1}}{2} . L \]

Vamos utilizar como exemplo os dado exfm7:

    library(forestmangr)
    data(exfm7)
    dados <- exfm7
    dados
    #> # A tibble: 3,393 × 11
    #>   MAP     PROJECT SPACING STRATA GENCODE  TREE   DBH    TH    hi di_wb bark_t
    #>   <chr>   <fct>   <fct>    <int> <fct>   <int> <dbl> <dbl> <dbl> <dbl>  <dbl>
    #> 1 FOREST1 PEQUI   3x3          4 FM00100     1  12.4  22.1   0.1  13.1      6
    #> 2 FOREST1 PEQUI   3x3          4 FM00100     1  12.4  22.1   0.5  12.6      6
    #> 3 FOREST1 PEQUI   3x3          4 FM00100     1  12.4  22.1   1    12.4      5
    #> 4 FOREST1 PEQUI   3x3          4 FM00100     1  12.4  22.1   1.5  12.3      5
    #> 5 FOREST1 PEQUI   3x3          4 FM00100     1  12.4  22.1   2    11.8      4
    #> 6 FOREST1 PEQUI   3x3          4 FM00100     1  12.4  22.1   4    11.3      4
    #> # ℹ 3,387 more rows

Primeiro, calculamos o volume com casca por seção, com a função `smalianwb`. Inserimos nela o dataframe, o diametro com casca, a altura da seção, e a variável árvore:

    dados_sma <- smalianwb(dados,"di_wb", "hi","TREE")
    head(as.data.frame(dados_sma))
    #>       MAP PROJECT SPACING STRATA GENCODE TREE      DBH   TH  hi    di_wb bark_t
    #> 1 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 0.1 13.05071      6
    #> 2 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 0.5 12.57324      6
    #> 3 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 1.0 12.41409      5
    #> 4 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 1.5 12.25493      5
    #> 5 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 2.0 11.77747      4
    #> 6 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 4.0 11.30000      4
    #>       CSA_WB         VWB
    #> 1 0.01337697 0.005158610
    #> 2 0.01241607 0.006129952
    #> 3 0.01210373 0.005974776
    #> 4 0.01179537 0.005672382
    #> 5 0.01089416 0.020922907
    #> 6 0.01002875 0.018694737

Agora, calculamos o volume sem casca por seção, utilizamos a função `smalianwb`. Fornecemos as mesmas variáveis de antes, e a variável correspondente à espessura da casca. Como essa variável está em milímetros, utilizamos o argumento `bt_mm_to_cm` como verdadeiro, para converte-la para centímetros:

    dados_sma <- smalianwob(dados_sma, "di_wb", "hi", "bark_t","TREE", bt_mm_to_cm = T)
    head(as.data.frame(dados_sma))
    #>       MAP PROJECT SPACING STRATA GENCODE TREE      DBH   TH  hi    di_wb bark_t
    #> 1 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 0.1 13.05071    0.6
    #> 2 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 0.5 12.57324    0.6
    #> 3 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 1.0 12.41409    0.5
    #> 4 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 1.5 12.25493    0.5
    #> 5 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 2.0 11.77747    0.4
    #> 6 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 4.0 11.30000    0.4
    #>       CSA_WB         VWB   di_wob     CSA_WOB        VWOB
    #> 1 0.01337697 0.005158610 11.85071 0.011030070 0.004237849
    #> 2 0.01241607 0.006129952 11.37324 0.010159172 0.005097861
    #> 3 0.01210373 0.005974776 11.41409 0.010232273 0.005045296
    #> 4 0.01179537 0.005672382 11.25493 0.009948911 0.004853333
    #> 5 0.01089416 0.020922907 10.97747 0.009464421 0.018123438
    #> 6 0.01002875 0.018694737 10.50000 0.008659016 0.016363277

Esse processo pode ser feito de forma direta, utilizando pipes (`%>%`)

    dados_sma <- dados %>%
      smalianwb("di_wb", "hi", "TREE") %>%
      smalianwob("di_wb", "hi", "bark_t", "TREE", bt_mm_to_cm = T)
    head(as.data.frame(dados_sma))
    #>       MAP PROJECT SPACING STRATA GENCODE TREE      DBH   TH  hi    di_wb bark_t
    #> 1 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 0.1 13.05071    0.6
    #> 2 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 0.5 12.57324    0.6
    #> 3 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 1.0 12.41409    0.5
    #> 4 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 1.5 12.25493    0.5
    #> 5 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 2.0 11.77747    0.4
    #> 6 FOREST1   PEQUI     3x3      4 FM00100    1 12.41409 22.1 4.0 11.30000    0.4
    #>       CSA_WB         VWB   di_wob     CSA_WOB        VWOB
    #> 1 0.01337697 0.005158610 11.85071 0.011030070 0.004237849
    #> 2 0.01241607 0.006129952 11.37324 0.010159172 0.005097861
    #> 3 0.01210373 0.005974776 11.41409 0.010232273 0.005045296
    #> 4 0.01179537 0.005672382 11.25493 0.009948911 0.004853333
    #> 5 0.01089416 0.020922907 10.97747 0.009464421 0.018123438
    #> 6 0.01002875 0.018694737 10.50000 0.008659016 0.016363277

Podemos visualizar a curva média das árvores desta área, utilizando o modelo de Kozak, com a função `average_tree_curve`:

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

Para calcular o volume por árvore, utilizamos a função `vol_summarise`. Informamos o dataframe e as variáveis dap, altura, volume com casca e sem casca, e árvore:

    dados_vol_arvore <- vol_summarise(dados_sma, dbh = "DBH", th = "TH",
                                      vwb="VWB",tree = "TREE",vwob="VWOB")
    dados_vol_arvore
    #> # A tibble: 197 × 10
    #>    TREE   DBH    TH    CSA   VWB  VWOB  FFWB FFWOB FFWB_mean FFWOB_mean
    #>   <int> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl>     <dbl>      <dbl>
    #> 1     1  12.4  22.1 0.0121 0.131 0.113 0.489 0.424     0.468      0.412
    #> 2     2  13.1  22.3 0.0134 0.145 0.126 0.487 0.423     0.468      0.412
    #> 3     3  13.2  20   0.0137 0.126 0.108 0.459 0.393     0.468      0.412
    #> 4     4  13.2  19.4 0.0137 0.139 0.123 0.521 0.463     0.468      0.412
    #> 5     5  13.4  23.7 0.0140 0.156 0.133 0.470 0.401     0.468      0.412
    #> 6     6  13.5  21.5 0.0144 0.139 0.124 0.450 0.401     0.468      0.412
    #> # ℹ 191 more rows

Agora, para determinar o modelo volumétrico mais adequado para os dados, vamos ajustar dois modelos, e compará-los utilizando `resid_plot`.

Modelo volumétrico de Schumacher: \[ Ln(V) = \beta_0 + \beta_1*Ln(dbh) + \beta_2*Ln(H) \]

Modelo volumétrico de Husch: \[ Ln(V) = \beta_0 + \beta_1*Ln(dbh) \]

Vamos utilizar o o output `merge_est` da função `lm_table`. Isso irá estimar o volume para os dados observados automaticamente. Em seguida, iremos utilizar a função `resid_plot`, e comparar a variável observada com as estimadas:

    dados_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")

O modelo de schumacher foi mais simétrico, portanto vamos utilizá-lo. Para salvar os coeficientes em um dataframe, ajustamos o modelo novamente, e utilizamos o output padrão:

    tabcoef_vwb <- lm_table(dados_vol_arvore, log(VWB) ~  log(DBH) + log(TH) )
    tabcoef_vwb
    #>          b0       b1        b2      Rsqr  Rsqr_adj  Std.Error
    #> 1 -9.595863 1.889372 0.9071631 0.9966646 0.9966303 0.04855508

Fazemos o mesmo para o volume sem casca:

    tabcoef_vwob <- lm_table(dados_vol_arvore, log(VWOB) ~  log(DBH) + log(TH) )
    tabcoef_vwob
    #>          b0       b1       b2      Rsqr  Rsqr_adj  Std.Error
    #> 1 -9.808975 1.918007 0.908154 0.9961152 0.9960752 0.05301495