Funzioni di profilo per la gestione forestale

Teak in Sri Lanka

Author
Affiliation

Roberto Scotti (scotti@uniss.it)

NuoroForestrySchool-DipAGR-UniSS.it

Published

14 / Aug / 2023

Introduzione

L’articolo di Wijenayake et al. (2019) intitolato “Comparative Study on Commercial Log Production Managed Under Different Conditions: Evaluating Plantation Grown Teak of Sri Lanka”, offre spunti per esercizi relativi a ‘funzioni di profilo’ impiegate operativamente.

La Fig. 2 del testo mostra come varia il prezzo di un metro cubo di teak al progredire del diametro della sezione di testa (diametro minimo).

Il lavoro è volto a fornire uno strumento di stima del valore di quanto è prevedibile prelevare e vendere a fine turno dagli impianti esistenti.

Distinguendo tre situazioni caratterizzate da cure selvicolturali diversamente carenti, il lavoro fornisce, quale strumento per l’assortimentazione, delle tavole che consentono di stimare a che altezza si trova la sezione corrispondente a ciascuno dei diametri minimi indicati dall’agenzia statale per la gestione forestale.

Curve ipsometriche

Modello di regressione per le curve ipsometriche

“where H is the tree height, D is the DBH, and a and b are model parameters to be estimated.”

# "Table 4 Height-DBH equations chosen for each three plantation sites"
teak_HC <- tribble(
  ~Site,           ~a,       ~b,      ~`R^2`, 
  "I"  ,    -7.4777,     7.3159,     0.31687, 
  "II" ,    -13.117,     8.5110,     0.39258, 
  "III",    -11.640,     9.6799,     0.39674,
  )
teak_height <- function(D, site, coeff_table) {
  coeff <- coeff_table |> 
    filter(Site == site) |> 
    select(a, b) |> 
    as.list() |> 
    list_simplify()
  
  coeff["a"] +coeff["b"] * log(D)
}

Verifica

# Ricreazione "Fig. 3 Height-DBH curves of the sites"

tibble(
  Site = teak_HC$Site,
  height = map(Site,
                function(s, hc) {
        tibble(
          D = seq(20, 45, 5),
          H = teak_height(D, s, hc))
      }, teak_HC)
      ) |> 
  unnest(cols = c(height)) |> 
  ggplot(aes(D, H, linetype = Site)) +
  geom_line() +
  ggtitle("Curve ipsometriche utilizzate per le diverse aree considerate")

Funzioni di profilo

Diametro relativo

“where Dr is the relative diameter, D is the diameter at a specified height, and D0.9 is the diameter at 1/10 tree height

Altezza relativa

“where Hr is the relative tree height, H is the tree height at a speci- fied point, and Ht is the total tree height.”

“Third order segmented polynomial taper function was applied according to results of Yin and Yamamoto (2013) to create the relative taper curves across an entire range of tree-height data. (Eq. (4))”

Modello per le funzioni di profilo

“where a, b, and c are model coefficients to be estimated.”

# From: "Table 5 Relative taper equations coefficients for three plantation sites"
teak_TC <- tribble(
  ~Site,      ~a,          ~b,       ~c,    ~`R^2`,
  "I"  ,  2.6048,   -4.2281,     2.8158,     0.85917, 
  "II" ,  2.4643,   -4.3249,     3.0406,     0.78866, 
  "III",  3.4737,   -5.7529,     3.4887,     0.87944, 
  )
teak_r_taper <- function(rh, site, coeff_table) {
  coeff <- coeff_table |> 
    filter(Site == site) |> 
    select(a, b, c) |> 
    as.list() |> 
    list_simplify()
  
  coeff["a"]*rh^3 +coeff["b"]*rh^2 +coeff["c"]*rh
}

Verifica

# Ricreazione "Fig. 4 Relative taper curves of the sites"

tibble(
  Site = teak_TC$Site,
  profile = map(Site,
                function(s, tc) {
        tibble(
          rh = seq(0, 1, 0.1),
          rd = teak_r_taper(rh, s, tc))
      }, teak_TC)
      ) |> 
  unnest(cols = c(profile)) |> 
  ggplot(aes(rh, rd, linetype = Site)) +
  geom_line() +
  ggtitle("Profili relativi per le diverse aree considerate")

Funzione di profilo assoluto

teak_taper <- function(h, D, H, site, coeff_table){
  D0_9 <- D / teak_r_taper(1-1.3/H, site, coeff_table)
  D0_9 * teak_r_taper(1-h/H, site, coeff_table)
}

Verifica

# from: "Table 6 Calculated stand characteristics of each site"
tibble(
  Site = c( "I",    "II",  "III"), 
  D = c(    32.0,   31.8,   27.7),  # Average DBH (cm)
  H = c(    17.5,   15.3,   19.7)   # Average total height (m)
) %>% mutate(
  profilo = pmap(data.frame(D, H, Site), 
                 function(D, H, Site, TC) tibble(
                   h_sez = c(seq(0, H, 1), H),
                   d_sez = teak_taper(h_sez, D, H, Site, TC)
                 ), teak_TC)
) |> 
  unnest(cols = c(profilo)) |> 
  ggplot(aes(h_sez, d_sez, linetype = Site)) +
  geom_line() +
  geom_vline(xintercept = 1.3, linetype = "dotted", colour = "grey") +
  ggtitle("Profili (assoluti) realtivi a misure (D, H) medie per ciascun area",
          "da Tabella 6")

Assortimenti

In questo lavoro l’assortimentazione si basa sui sguenti criteri.

  • “Teak logs, elephant poles, fence posts, and round poles are the main products of teak timber (State Timber Corporation, 20171). The teak log is the raw material for furniture production.”

  • “Teak timber grading ranges from 2–3 m log length as the State Timber Corporation grading standards. Teak logs are categorized and evaluated according to the diameter values of log and the log length depends on the defects and customer requirement at the field, except for super prime logs (3 m or over log length, ≥ 31.8 cm mid diameter, minimum surface and form defects). According to the price manuals of State Timber Corporation, the main commercial diameter values of teak logs of State Timber Corporation are 47.7 cm, 38.2 cm, 31.8 cm, 25.5 cm, 19.7 cm, 12.7 cm and 10.8 cm for teak poles.”

    Il lavoro fornisce, quale strumento per l’assortimentazione, delle tavole, differenziate per area, che consentono di stimare a che altezza si trova la sezione corrispondente a ciascuno dei diametri minimi stabiliti dall’agenzia statale per la gestione forestale (State Timber Corporation).

# Source:
# State Timber Corporation. (2017) 
# Annual price list of timber products. Battaramulla, Sri Lanka
d_testa <- c(47.7, 38.2, 31.8, 25.5, 19.7, 12.7, 10.8)  # [cm]

Curve di stima dell’altezza delle sezioni di testa

Il lavoro fornisce, quale strumento per l’assortimentazione, delle tavole, differenziate per area, che consentono di stimare a che altezza si trova la sezione corrispondente a ciascuno dei diametri minimi indicati dall’agenzia statale per la gestione forestale.

Le tabelle sono lunghe, dettagliate per valori di diametro a scansione di 1 cm. Per renderle fruibili e per verificarle è opportuno ricalcolarle, con scansione meno dettagliata, 5 cm bastano.

Già ad una prima verifica i valori risultano incongruenti! Utilizzando, nell’equazione 4, i valori dei coefficienti, per Site = “I”, nella tabella 5, si ottiene la funzione che stima il ‘diametro relativo’ (dr), data l’altezza relativa (hr). Poichè dr(h) = d_sez(h) / d_sez(0.9 * H), occorre detreminare il valore del denominatore per poter calcolare il profilo assoluto: d_sez(h) = d_sez(0.9 * H) * dr(h) Ma D = d_sez(1.3) = dr(1.3) * d_sez(0.9 * H) da cui d_sez(0.9 * H) = D / dr(1.3). Questi sono i calcoli che svolge la funzione teak_taper(). Possiamo quindi verificare che diametro corrisponde a alle altezze esposte, ad esempio, in tabella 8, all’ultima riga. Dovremmo trovare che i diamtri corrispondono ai valori minimi stabiliti dalla agenzia statale. Invece così non è!

# piccola verifica delle incongruenze tra i dati nelle tabelle
# e le stime che derivano dalle formule
  # ultima riga in "Table 8 Upper tree height prediction – site I"
  D = 55; H = 21.84
tibble(
  hl = c(3.15,      6.93,    10.70,      14.27,      16.37,     18.47,      18.89),
  d_testa = d_testa,
  dhl = teak_taper(hl, D, H, "I", teak_TC),
  diff = dhl - d_testa) |> 
  kbl() |> 
  kable_styling()
hl d_testa dhl diff
3.15 47.7 48.37488 0.674878
6.93 38.2 39.92517 1.725174
10.70 31.8 34.87960 3.079601
14.27 25.5 29.48818 3.988183
16.37 19.7 24.60036 4.900364
18.47 12.7 17.56463 4.864626
18.89 10.8 15.83719 5.037188

Per procedere a ricalcolare le tabelle di assortimentazione occorre disporre della seconda funzione tipicmente connessa alle funzioni di profilo, quella che consente di stimare a che altezza si trova un determinato diametro. Il lavoro non specifica come abbiano provveduto alla bisogna. In questo caso il modello matematico adottato consentirebbe lo sviluppo di una soluzione algebrica ma, per generalità e semplicità adottiamo la soluzione numerica (per tentativi) sviluppara in un apprezzabile recente pacchetto ‘dyntaper’ (2022) di Oscar Garcia2

hlevel <- function(ds, D, H, site, coeff_table) 
{
    f <- function(h, ds, D, H, site, coeff_table) {
        ds - teak_taper(h, D, H, site, coeff_table)
    }
    stopifnot(length(ds) == 1)
    if (sign(f(0, ds, D, H, site, coeff_table)) == 
        sign(f(H, ds, D, H, site, coeff_table))) 
        return(NA)
    uniroot(f, c(0, H), ds, D, H, site, coeff_table, f.upper = ds)$root
}
# Modified from SOURCE:
# <bytecode: 0x55da4cca1230>
# <environment: namespace:dyntaper>

Ricalcolo tabella per “Site I”

site <- teak_TC$Site[1]

tibble(
  D = seq(20, 55, 5),
  H =  teak_height(D, site, teak_HC),
  h_sez =map2(H, D, function(H, D) {
    tibble(
      d_testa = d_testa,
      h_sez_testa = map_dbl(d_testa, 
                            function(h) hlevel(h, D, H, site, teak_TC))
    )})
  ) |> 
  unnest(cols = c(h_sez)) |> 
  pivot_wider(names_from = d_testa, values_from = h_sez_testa) |> 
  kbl(digits = 2)
D H 47.7 38.2 31.8 25.5 19.7 12.7 10.8
20 14.44 NA NA NA NA 1.44 7.89 9.83
25 16.07 NA NA NA 1.10 4.28 11.36 12.46
30 17.41 NA NA 0.69 3.30 8.30 13.56 14.35
35 18.53 NA 0.34 2.47 6.18 11.68 15.22 15.86
40 19.51 NA 1.87 4.60 9.72 13.87 16.57 17.11
45 20.37 0.60 3.59 7.29 12.56 15.50 17.71 18.19
50 21.14 1.92 5.63 10.37 14.53 16.80 18.71 19.13
55 21.84 3.38 8.09 12.94 16.04 17.91 19.59 19.98

Bibliografia

Garcia, O. (2022). Dynamic Stem Profile Models, AKA Tree Taper Equations - CRAN Package: dyntaper. https://github.com/ogarciav/dyntaper
Wijenayake, P. R., Hiroshima, T., and Yamamoto, H. (2019). Comparative Study on Commercial Log Production Managed under Different Conditions: Evaluating Plantation Grown Teak of Sri Lanka. Journal of Forest Planning, 25(2), 27–37. https://doi.org/10.20659/jfp.2019.003

Footnotes

  1. State Timber Corporation. (2017) Annual price list of timber products. Battaramulla, Sri Lanka: 7–8↩︎

  2. https://orcid.org/0000-0002-8995-1341↩︎