Abstract

StemAnalysis R package is a tool for designed to reconstruct stem growth profiles, construct height-diameter relationships, and consequently to compute growth trends in terms of diameter at breast height (DBH), tree height, stem volume, tree biomass and carbon. This vignette provides an overview of this package functions and options. We provide a working examples that demonstrates the basic functionality and use of the package.

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 diameter with bark 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.

Installation

install.packages("StemAnalysis")

Load the package

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

Load the stem analysis data stored in the package

Stem analysis data, including stem height (m), age (year), diameter (with and without bark) as well as inner ring diameter (cm) of the ith disc with sequences from the ground to the tip ordered by increasing height, are required inputs.

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 ...

Load the parameter data stored in the package

Tree biomass estimated using allometric models [ln(Bi)=βi0+βi1×ln(DBH^2H)] (Xiang et al., 2021). The Parameter data, including parameters a (βi0), b (βi1), and C concentration for each tissues, are optional inputs.

data(parameterdata)
str(parameterdata)
#> 'data.frame':    5 obs. of  4 variables:
#>  $ tissues       : chr  "stem" "branch" "leaf" "root" ...
#>  $ a             : num  -4.29 -6.84 -4.5 -3.43 NA
#>  $ b             : num  1.006 1.028 0.697 0.705 NA
#>  $ Cconcentration: num  0.5 0.5 0.5 0.5 0.5

Load the biomass expansion factor data stored in the package

Total tree biomass estimated using volume model [VWDBEF*(1+R)] (IPCC, 2003). The biomass expansion factor data, including wood density (WD), biomass expansion factor (BEF), root:shoot ratio (R), and C concentration, are optional inputs.

data(BEFdata)
str(BEFdata)
#> 'data.frame':    1 obs. of  4 variables:
#>  $ WD            : num 0.32
#>  $ BEF           : num 1.49
#>  $ R             : num 0.247
#>  $ Cconcentration: num 0.5

Application of StemAnalysis package

1. Stem growth analysis

Reconstructed stem growth patterns and calculated DBH and tree height growth trends, and stem volume with bark increment trends using stem analysis data.

stemgrowth <- stemanalysism(xtree = 8, stemgrowth = TRUE, stemdata = stemdata)
knitr::kable(stemgrowth)
stemdj DBHt Height Volume AnincreD AvincreD AnincreH AvincreH AnincreV AvincreV
0 0 0.000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
Dnobark9 2 0.000000 0.8387097 0.0001815 0.0000000 0.0000000 0.4193548 0.4193548 0.0000908 0.0000908
Dnobark8 4 2.092722 2.2000000 0.0012679 1.0463610 0.5231805 0.6806452 0.5500000 0.0005432 0.0003170
Dnobark7 6 5.133597 4.7875000 0.0083903 1.5204373 0.8555994 1.2937500 0.7979167 0.0035612 0.0013984
Dnobark6 8 6.111021 6.7200000 0.0116100 0.4887120 0.7638776 0.9662500 0.8400000 0.0016099 0.0014513
Dnobark5 10 7.197047 8.8258065 0.0175425 0.5430133 0.7197047 1.0529032 0.8825806 0.0029662 0.0017542
Dnobark4 12 8.391677 10.9076923 0.0270252 0.5973147 0.6993064 1.0409429 0.9089744 0.0047414 0.0022521
Dnobark3 14 9.043293 11.3333333 0.0339367 0.3258080 0.6459495 0.2128205 0.8095238 0.0034557 0.0024240
Dnobark2 16 9.586306 12.4461538 0.0401266 0.2715067 0.5991441 0.5564103 0.7778846 0.0030950 0.0025079
Dnobark1 18 9.694909 12.4666667 0.0447629 0.0543013 0.5386060 0.0102564 0.6925926 0.0023182 0.0024868
Dnobark0 20 10.346525 12.6000000 0.0518571 0.3258080 0.5173262 0.0666667 0.6300000 0.0035471 0.0025929

2. Estimation Of tree carbon accumulation

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

allomcarbon <- stemanalysism(xtree = 8, treecarbon = TRUE, stemdata = stemdata, parameterdata = parameterdata)
knitr::kable(allomcarbon)
stemdj DBHt Height Volume AnincreD AvincreD AnincreH AvincreH AnincreV AvincreV
0 0 0.000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
Dnobark9 2 0.000000 0.8387097 0.0001815 0.0000000 0.0000000 0.4193548 0.4193548 0.0000908 0.0000908
Dnobark8 4 2.092722 2.2000000 0.0012679 1.0463610 0.5231805 0.6806452 0.5500000 0.0005432 0.0003170
Dnobark7 6 5.133597 4.7875000 0.0083903 1.5204373 0.8555994 1.2937500 0.7979167 0.0035612 0.0013984
Dnobark6 8 6.111021 6.7200000 0.0116100 0.4887120 0.7638776 0.9662500 0.8400000 0.0016099 0.0014513
Dnobark5 10 7.197047 8.8258065 0.0175425 0.5430133 0.7197047 1.0529032 0.8825806 0.0029662 0.0017542
Dnobark4 12 8.391677 10.9076923 0.0270252 0.5973147 0.6993064 1.0409429 0.9089744 0.0047414 0.0022521
Dnobark3 14 9.043293 11.3333333 0.0339367 0.3258080 0.6459495 0.2128205 0.8095238 0.0034557 0.0024240
Dnobark2 16 9.586306 12.4461538 0.0401266 0.2715067 0.5991441 0.5564103 0.7778846 0.0030950 0.0025079
Dnobark1 18 9.694909 12.4666667 0.0447629 0.0543013 0.5386060 0.0102564 0.6925926 0.0023182 0.0024868
Dnobark0 20 10.346525 12.6000000 0.0518571 0.3258080 0.5173262 0.0666667 0.6300000 0.0035471 0.0025929
stemdj stem_biomass branch_biomass leaf_biomass root_biomass total_biomass stem_C branch_C leaf_C root_C total_C
0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
2 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
4 0.1331846 0.0110185 0.0539324 0.1596293 0.3577648 0.0665923 0.0055092 0.0269662 0.0798147 0.1788824
6 1.7711820 0.1550628 0.3239462 0.9787521 3.2289430 0.8855910 0.0775314 0.1619731 0.4893760 1.6144715
8 3.5375253 0.3144229 0.5231522 1.5893409 5.9644414 1.7687627 0.1572114 0.2615761 0.7946705 2.9822207
10 6.4673847 0.5824699 0.7946449 2.4257489 10.2702484 3.2336923 0.2912350 0.3973225 1.2128744 5.1351242
12 10.9005432 0.9930041 1.1409171 3.4972747 16.5317390 5.4502716 0.4965020 0.5704585 1.7486373 8.2658695
14 13.1679477 1.2045248 1.3005159 3.9924912 19.6654798 6.5839739 0.6022624 0.6502580 1.9962456 9.8327399
16 16.2702026 1.4952018 1.5058112 4.6305166 23.9017322 8.1351013 0.7476009 0.7529056 2.3152583 11.9508661
18 16.6707835 1.5328296 1.5314015 4.7101201 24.4451347 8.3353918 0.7664148 0.7657007 2.3550600 12.2225673
20 19.2063346 1.7714424 1.6892383 5.2014306 27.8684459 9.6031673 0.8857212 0.8446192 2.6007153 13.9342230

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

volumecarbon <- stemanalysism(xtree = 8, treecarbon = TRUE, stemdata = stemdata, BEFdata = BEFdata)
knitr::kable(volumecarbon)
stemdj DBHt Height Volume AnincreD AvincreD AnincreH AvincreH AnincreV AvincreV
0 0 0.000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
Dnobark9 2 0.000000 0.8387097 0.0001815 0.0000000 0.0000000 0.4193548 0.4193548 0.0000908 0.0000908
Dnobark8 4 2.092722 2.2000000 0.0012679 1.0463610 0.5231805 0.6806452 0.5500000 0.0005432 0.0003170
Dnobark7 6 5.133597 4.7875000 0.0083903 1.5204373 0.8555994 1.2937500 0.7979167 0.0035612 0.0013984
Dnobark6 8 6.111021 6.7200000 0.0116100 0.4887120 0.7638776 0.9662500 0.8400000 0.0016099 0.0014513
Dnobark5 10 7.197047 8.8258065 0.0175425 0.5430133 0.7197047 1.0529032 0.8825806 0.0029662 0.0017542
Dnobark4 12 8.391677 10.9076923 0.0270252 0.5973147 0.6993064 1.0409429 0.9089744 0.0047414 0.0022521
Dnobark3 14 9.043293 11.3333333 0.0339367 0.3258080 0.6459495 0.2128205 0.8095238 0.0034557 0.0024240
Dnobark2 16 9.586306 12.4461538 0.0401266 0.2715067 0.5991441 0.5564103 0.7778846 0.0030950 0.0025079
Dnobark1 18 9.694909 12.4666667 0.0447629 0.0543013 0.5386060 0.0102564 0.6925926 0.0023182 0.0024868
Dnobark0 20 10.346525 12.6000000 0.0518571 0.3258080 0.5173262 0.0666667 0.6300000 0.0035471 0.0025929
stemdj stem_bio aboveground_bio belowground_bio total_bio stem_Carbon aboveground_Carbon belowground_Carbon total_Carbon
0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
2 0.0580816 0.0864835 0.0213614 0.1078449 0.0290408 0.0432417 0.0106807 0.0539224
4 0.4057402 0.6041471 0.1492243 0.7533714 0.2028701 0.3020736 0.0746122 0.3766857
6 2.6848892 3.9978000 0.9874566 4.9852566 1.3424446 1.9989000 0.4937283 2.4926283
8 3.7152064 5.5319423 1.3663897 6.8983320 1.8576032 2.7659711 0.6831949 3.4491660
10 5.6135965 8.3586452 2.0645854 10.4232306 2.8067983 4.1793226 1.0322927 5.2116153
12 8.6480659 12.8769701 3.1806116 16.0575818 4.3240330 6.4384851 1.5903058 8.0287909
14 10.8597316 16.1701403 3.9940247 20.1641650 5.4298658 8.0850702 1.9970123 10.0820825
16 12.8405011 19.1195061 4.7225180 23.8420241 6.4202505 9.5597531 2.3612590 11.9210121
18 14.3241295 21.3286289 5.2681713 26.5968002 7.1620648 10.6643144 2.6340857 13.2984001
20 16.5942791 24.7088816 6.1030938 30.8119754 8.2971396 12.3544408 3.0515469 15.4059877

3. Construction of height-diameter relationship

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

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

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.

Xiang, W.H., Li, L.H., Ouyang, S., Xiao, W.F., Zeng, L.X., Chen, L., Lei, P.F., Deng, X.W., Zeng, Y.L., Fang, J.P. & Forrester, D.I. (2021) Effects of stand age on tree biomass partitioning and allometric equations in Chinese fir (Cunninghamia lanceolata) plantations. Eur. J. For. Res. 140, 317–332.