The StemAnalysis R package

Abstract

Purpose

Accurate information about age dynamics of timber production and carbon storage in forest ecosystems is frequently required by scientists, stakeholders, and policymakers. Stem analysis is a technique for measuring tree growth (Salas-Eljatib, 2021). The computational burden of reconstructing temporal, radial, and longitudinal patterns of tree growth, fitting height-diameter relationships, and calculating outside-bark diameter from radial annual-ring increment sequences measured on multiple cross-sectional discs, may present a hindrance to application of stem analysis methodology in forest research investigations and operational forest multifunctional management (Newton, 2019). Therefore, a standardized tool, StemAnalysis R package, is developed to calculate tree growth dynamics and then make the stem analysis technique more conveniently applied to forest multifunctional investigation.

1. Installation

install.packages("StemAnalysis")

2. Load the package

require(StemAnalysis)
require(knitr) # To input tables in this document

3. Load the stem analysis data stored in the package

stemdata is a dataset containing the input data of stem analysis. Note: If a user uses the StemAnalysis package to analysis a very big tree, the number of inner growth rings that diameter measured for some cross-sectional discs may be more than 11, the Dnobark12, Dnobark13, and much more variables can be added, which also could successfully run.

data(stemdata)
str(stemdata)
#> 'data.frame':    97 obs. of  18 variables:
#>  $ No        : int  1 2 3 4 5 6 7 8 9 10 ...
#>  $ Treeno    : int  1 1 1 1 1 1 1 1 1 1 ...
#>  $ TreeTH    : num  9 9 9 9 9 9 9 9 9 9 ...
#>  $ stemheight: num  0 0.5 1.3 1.5 2.5 3.5 4.5 5.5 6.5 7.5 ...
#>  $ stemage   : int  7 6 5 5 4 4 3 3 2 2 ...
#>  $ Dwithbark : num  13.6 11.2 10 10 8.8 7.9 6.5 5.8 4.4 3.1 ...
#>  $ Dnobark0  : num  12.3 10.5 9.6 9.3 8.2 7.4 6 5.2 4 2.8 ...
#>  $ Dnobark1  : num  11.1 9.1 8 7.8 6.7 5.7 4.5 3.6 2.1 0.7 ...
#>  $ Dnobark2  : num  8.3 7.1 6.1 5.8 4.6 3.4 2.2 1.4 0 0 ...
#>  $ Dnobark3  : num  6.4 5.4 4.4 3.9 2.4 1.2 0 0 0 0 ...
#>  $ Dnobark4  : num  3.7 2.8 1.7 1.4 0 0 0 0 0 0 ...
#>  $ Dnobark5  : num  1.2 0.6 0 0 0 0 0 0 0 0 ...
#>  $ Dnobark6  : num  0.4 0 0 0 0 0 0 0 0 0 ...
#>  $ Dnobark7  : num  0 0 0 0 0 0 0 0 0 0 ...
#>  $ Dnobark8  : num  0 0 0 0 0 0 0 0 0 0 ...
#>  $ Dnobark9  : num  0 0 0 0 0 0 0 0 0 0 ...
#>  $ Dnobark10 : num  0 0 0 0 0 0 0 0 0 0 ...
#>  $ Dnobark11 : int  0 0 0 0 0 0 0 0 0 0 ...

The list of input variables and their description in stemdata dataset

No: The line number

Treeno: The tree number for the sampled tree, the same number represents the same tree

TreeTH: Tree total height (m)

stemheight: The stem height that the cross-sectional discs were obtained (m). The detail information see Figure 1

stemage: The age at the stem height, namely the number of growth rings of the cross-sectional disc (year)

Dwithbark: The maximum outside-bark diameter of the cross-sectional disc (cm)

Dnobark0: The maximum inside-bark diameter of the cross-sectional disc without bark (cm)

Dnobark1: The diameter for the 1th age class inner growth ring of the cross-sectional disc (cm). The detail information see Figure 2

Dnobark2: The diameter for the 2th age class inner growth ring of the cross-sectional disc (cm)

Dnobark3: The diameter for the 3th age class inner growth ring of the cross-sectional disc (cm)

Dnobark4: The diameter for the 4th age class inner growth ring of the cross-sectional disc (cm)

Dnobark5: The diameter for the 5th age class inner growth ring of the cross-sectional disc (cm)

Dnobark6: The diameter for the 6th age class inner growth ring of the cross-sectional disc (cm)

Dnobark7: The diameter for the 7th age class inner growth ring of the cross-sectional disc (cm)

Dnobark8: The diameter for the 8th age class inner growth ring of the cross-sectional disc (cm)

Dnobark9: The diameter for the 9th age class inner growth ring of the cross-sectional disc (cm)

Dnobark10: The diameter for the 10th age class inner growth ring of the cross-sectional disc (cm)

Dnobark11: The diameter for the 11th age class inner growth ring of the cross-sectional disc (cm)

4. Load the allompardata dataset stored in the package

Tree biomass estimated using allometric models [ln(B)=ln(a)+b×ln(DBH)+c×ln(H)] (National Forestry and Grassland Administration, 2014). The allompardata dataset, including parameters a, b, c, and carbon concentration for tree aboveground and belowground, are optional inputs.

data(allomPardata)
str(allomPardata)
#> 'data.frame':    4 obs. of  7 variables:
#>  $ X             : int  1 3 2 4
#>  $ DBH           : chr  ">5" "<5" ">5" "<5"
#>  $ tissues       : chr  "aboveground" "aboveground" "belowground" "belowground"
#>  $ a             : num  0.0654 0.1907 0.0164 0.0347
#>  $ b             : num  2.02 1.35 2.53 2.06
#>  $ c             : num  0.494 0.495 -0.117 -0.117
#>  $ Cconcentration: num  0.5 0.5 0.488 0.488

The list of input variables and their description in allomPardata dataset

DBH: The tree diameter at breast height, DBH<5 indicate that DBH is <5 cm, DBH>5 indicate that DBH is >=5 cm

tissues: The tree tissues including aboveground and belowground components

a: The parameter a in the allometric model ln(B)=ln(a)+b×ln(DBH)+c×ln(H)

b: The parameter b in the allometric model ln(B)=ln(a)+b×ln(DBH)+c×ln(H)

c: The parameter c in the allometric model ln(B)=ln(a)+b×ln(DBH)+c×ln(H)

Cconcentration: The carbon concentration in each tree tissues (kg C kg-1)

5. Load the biomass conversion factor data stored in the package

Total tree biomass estimated using volume model [V×BCF×(1+RSR)] (IPCC, 2003). The biomass conversion factor data, including parameters a, b, and c for Biomass Conversion Factor (BCF) and Root-to-Shoot ratio (RSR), as well as total tree C concentration, are optional inputs.

data(volumePardata)
str(volumePardata)
#> 'data.frame':    4 obs. of  7 variables:
#>  $ X             : int  1 3 2 4
#>  $ DBH           : chr  ">5" "<5" ">5" "<5"
#>  $ factors       : chr  "BCF" "BCF" "RSR" "RSR"
#>  $ a             : num  0.962 1.028 0.251 0.182
#>  $ b             : num  0.179 0.138 0.512 0.712
#>  $ c             : num  -0.504 -0.504 -0.612 -0.612
#>  $ Cconcentration: num  0.499 0.499 0.499 0.499

The list of input variables and their description in volumePardata dataset

DBH: The tree diameter at breast height, DBH<5 indicate that DBH is <5 cm, DBH>5 indicate that DBH is >=5 cm

factors: The tree biomass estimation factors including BCF and RSR

BCF: The Biomass Conversion Factor, the estimation model is ln(BCF)=ln(a)+b×ln(DBH)+c×ln(H)

RSR: The Root-to-Shoot Ratio, , the estimation model is ln(RSR)=ln(a)+b×ln(DBH)+c×ln(H)

a: The parameter a in the estimation model of BCF and RSR

b: The parameter b in the estimation model of BCF and RSR

c: The parameter c in the estimation model of BCF and RSR

Cconcentration: The total tree carbon concentration (kg C kg-1)

6. Application of StemAnalysis package

6.1 Stem growth analysis

Table 1 The tree age chronosequence and the corresponding growth data of DBH, stem height, and stem volume. stemdj is the age class of a tree growths (year); DBHt is the tree diameter at breast height (cm); Height is the tree height (m); Volume is the tree stem volume (m3); AnincreD is the mean annual increment of diameter at breast height (cm); AvincreD is the current annual increment of diameter at breast height (cm); AnincreH is the mean annual increment of tree height (m); AvincreH is the current annual increment of tree height (m); AnincreV is the mean annual increment of tree stem volume (m3); AvincreV is the current annual increment of tree stem volume (m3).

Figure 3 Stem growth patterns of an individual tree. (a) shows the stem growth pattern; (b), (c), and (d) are the cumulative growth and (e), (f), and (g) are the mean annual increment (red dotted line) and current annual increment (blue dashed line) of DBH, tree height, and stem volume, respectively.

6.2 Estimation Of tree carbon accumulation

6.2.1 Tree biomass and carbon accumulation estimated by allometric models

If set ‘treecarbon = TRUE’ and provide allompardata data, tree biomass and carbon accumulation estimated by allometric models.

allomcarbon <- stemanalysism(xtree = 8, treecarbon = TRUE, stemdata = stemdata, allompardata = allomPardata)
knitr::kable(allomcarbon)
stemdj DBHt Height Volume AnincreD AvincreD AnincreH AvincreH AnincreV AvincreV
0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Dnobark9 2 0.000 0.839 0.000 0.000 0.000 0.419 0.419 0.000 0.000
Dnobark8 4 2.093 2.200 0.001 1.046 0.523 0.681 0.550 0.001 0.000
Dnobark7 6 5.134 4.787 0.008 1.520 0.856 1.294 0.798 0.003 0.001
Dnobark6 8 6.111 6.720 0.011 0.489 0.764 0.966 0.840 0.002 0.001
Dnobark5 10 7.197 8.826 0.017 0.543 0.720 1.053 0.883 0.003 0.002
Dnobark4 12 8.392 10.908 0.027 0.597 0.699 1.041 0.909 0.005 0.002
Dnobark3 14 9.043 11.333 0.034 0.326 0.646 0.213 0.810 0.003 0.002
Dnobark2 16 9.586 12.446 0.040 0.272 0.599 0.556 0.778 0.003 0.002
Dnobark1 18 9.695 12.467 0.044 0.054 0.539 0.010 0.693 0.002 0.002
Dnobark0 20 10.347 12.600 0.052 0.326 0.517 0.067 0.630 0.004 0.003
treeage abovegroundB belowgroundB totalB abovegroundC belowgroundC totalC
0 0.000 0.000 0.000 0.000 0.000 0.000
2 0.000 0.000 0.000 0.000 0.000 0.000
4 0.765 0.145 0.910 0.382 0.071 0.453
6 3.844 0.854 4.698 1.923 0.417 2.340
8 6.461 1.276 7.736 3.232 0.622 3.855
10 10.283 1.868 12.151 5.145 0.912 6.056
12 15.564 2.688 18.252 7.787 1.312 9.098
14 18.444 3.233 21.677 9.228 1.578 10.805
16 21.730 3.705 25.435 10.871 1.808 12.680
18 22.247 3.812 26.059 11.130 1.860 12.990
20 25.501 4.488 29.989 12.758 2.190 14.948

Table 2 The stem growth data (the same to Table 1) and tree biomass and carbon storage that estimated by allometric models. treeage is the age class of a tree growths (year); abovegroundB is the aboveground biomass of a sampled tree (kg); belowgroundB is the belowground biomass of a sampled tree (kg); totalB is the total tree biomass of a sampled tree (kg); abovegroundC is the aboveground carbon storage of a sampled tree (kg); belowgroundC is the belowground carbon storage of a sampled tree (kg); totalC is the total tree carbon storage of a sampled tree (kg).

Figure 4 The age dynamics of total tree biomass (a) and carbon storage (b) for the 20-year-old Chinese fir tree estimated using allometric models.

6.2.2 Tree biomass and carbon accumulation estimated by volume model

If set ‘treecarbon = TRUE’ and provide biomass conversion factor data, tree biomass and carbon accumulation estimated by volume model.

volumecarbon <- stemanalysism(xtree = 8, treecarbon = TRUE, stemdata = stemdata, volumepardata = volumePardata)
knitr::kable(volumecarbon)
stemdj DBHt Height Volume AnincreD AvincreD AnincreH AvincreH AnincreV AvincreV
0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Dnobark9 2 0.000 0.839 0.000 0.000 0.000 0.419 0.419 0.000 0.000
Dnobark8 4 2.093 2.200 0.001 1.046 0.523 0.681 0.550 0.001 0.000
Dnobark7 6 5.134 4.787 0.008 1.520 0.856 1.294 0.798 0.003 0.001
Dnobark6 8 6.111 6.720 0.011 0.489 0.764 0.966 0.840 0.002 0.001
Dnobark5 10 7.197 8.826 0.017 0.543 0.720 1.053 0.883 0.003 0.002
Dnobark4 12 8.392 10.908 0.027 0.597 0.699 1.041 0.909 0.005 0.002
Dnobark3 14 9.043 11.333 0.034 0.326 0.646 0.213 0.810 0.003 0.002
Dnobark2 16 9.586 12.446 0.040 0.272 0.599 0.556 0.778 0.003 0.002
Dnobark1 18 9.695 12.467 0.044 0.054 0.539 0.010 0.693 0.002 0.002
Dnobark0 20 10.347 12.600 0.052 0.326 0.517 0.067 0.630 0.004 0.003
treeage BCF RSR abovegroundB belowgroundB totalB abovegroundC belowgroundC totalC
0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
2 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
4 0.765 0.190 0.944 0.179 1.123 0.471 0.089 0.561
6 0.586 0.222 4.724 1.050 5.774 2.357 0.524 2.881
8 0.510 0.197 5.744 1.134 6.878 2.866 0.566 3.432
10 0.458 0.182 7.885 1.433 9.318 3.935 0.715 4.650
12 0.423 0.173 11.291 1.950 13.241 5.634 0.973 6.607
14 0.420 0.175 14.142 2.479 16.621 7.057 1.237 8.294
16 0.405 0.171 16.085 2.743 18.828 8.026 1.369 9.395
18 0.406 0.171 17.985 3.082 21.066 8.974 1.538 10.512
20 0.408 0.176 21.176 3.727 24.903 10.567 1.860 12.427

Table 3 The stem growth data (the same to Table 1) and tree biomass and carbon storage that estimated by volume model. treeage is the age class of a tree growths (year); BCF is the estimated Biomass Conversion Factor; RSR is the estimated Root-to-Shoot Ratio; abovegroundB is the aboveground biomass of a sampled tree (kg); belowgroundB is the belowground biomass of a sampled tree (kg); totalB is the total tree biomass of a sampled tree (kg); abovegroundC is the aboveground carbon storage of a sampled tree (kg); belowgroundC is the belowground carbon storage of a sampled tree (kg); totalC is the total tree carbon storage of a sampled tree (kg).

Figure 5 The age dynamics of total tree biomass (a) and carbon storage (b) for the 20-year-old Chinese fir tree estimated using volume model.

6.3 Construction of height-diameter relationship

If set ‘HDmodel = TRUE’, tree height-diameter relationship will be constructed by nonlinear models, and the fitted statistics are showed in a graph.

stemgrowth <- stemanalysism(xtree = 8, HDmodel = TRUE, stemdata = stemdata)

Figure 6 Tree height-diameter relationships for the 20-year-old Chinese fir tree. The fitted curves of the Chapman-Richards model (red line), Logistic model (blue line), Weibull model (green line), and Gomperz model (yellow line) as well as their fitted statistics. a, b and C are the parameters of the nonlinear models; R2 is the coefficient of determination; RSS is the residual sum of squares; AIC is the akaike information criterion; logLik is the Log-Likelihood value.

References

IPCC. (2003) Good Practice Guidance for Land Use, Land-Use Change and Forestry; IPCC/IGES: Hayama, Japan.

Newton, P.F. (2019) Examining naturogenic processes and anthropogenic influences on tree growth and development via stem analysis: data processing and computational analytics. Forests 10, 1058.

Salas-Eljatib, C. (2021) A new algorithm for reconstructing the height growth with stem analysis data. Methods Ecol. Evol. 12, 2008–2016.