The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

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

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.