ESTIMATING ABOVE-GROUND BIOMASS IN CTFS PLOTS
R. CONDIT
SHORT_TITLE: Biomass END_SHORT_TITLE
CTFS Biomass Package
DESCRIPTION: This package provides a main function and a series of subroutines
for calculating above-ground-biomass (AGB) from tree diameter. The base functions
can be used with any tables having diameter and wood density for trees. The top-level
functions are designed to CTFS R Analytical tables, and to consult the CTFS wood-density
database, to fill in the agb column with the biomass (dry weight, in Mg) for each tree and
stem.
The top level function is biomass.CTFSdb. It must be passed two tables, one with trees, the
other with stems. These are the two standard CTFS R Analytical tables, described in the Data
Format section. The function also requires the name of the CTFS wood-density table, available for
download at http://ctfs.arnarb.harvard.edu/Public/Datasets.
Please note that the CTFS R Analytical Tables already have the agb column filled in, using this
function and the default values for the Chave calculation (in the function Chave.AGB).
END_DESCRIPTION
0.1. Sample calculations.
Here is a sample with BCI data, using the function CTFSplot (in the Utilities Package) to load
the Full table and the Stem table.
> CTFSplot("bci", "full", census = 1)
> CTFSplot("bci", "stem", census = 1)
> attach_if_needed("biomass/wsg.ctfs.Rdata")
function (RStemTable, RTreeTable, whichtable = "tree", dbhunit = "mm",
plot = "bci", wsgdata = wsg.ctfs2, forest = "moist", ht.param = NULL,
htmodel = predht.asym)
NULL
> newtable = biomass.CTFSdb(RStemTable = bci.stem1, RTreeTable = bci.full1, plot = "bci", dbhunit = "mm")
> head(newtable[, c("sp", "dbh", "agb")])
sp dbh agb
1 swars1 90 0.0426371077
2 hybapr 35 0.0028894861
3 aegipa 10 0.0001466688
4 beilpe NA 0.0000000000
5 faraoc NA 0.0000000000
6 hybapr NA 0.0000000000
To run at Lambir:
> CTFSplot("lambir", "full", census = 1)
> CTFSplot("lambir", "stem", census = 1)
> newtable = biomass.CTFSdb(RStemTable = lambir.stem1, RTreeTable = lambir.full1, plot = "lambir", dbhunit = "cm")
> head(newtable[, c("sp", "dbh", "agb")])
sp dbh agb
1 MEMECO 1.0 0.0001715131
2 ANI2DI 1.1 0.0001839861
3 DACRBM 1.3 0.0002307484
4 DRYOAR 1.3 0.0002705326
5 CANALL 1.4 0.0002329130
6 DIOSMI 1.5 0.0003842751
0.2. CTFS Wood Density table.
The calculations depend on the table wsg.ctfs2 (attached from file wsg.ctfs.Rdata) having values
of wood density for many CTFS species taken from the literature (assembled by Chave et al.,
thanks to Nate Swenson for the data). The table has columns with plot name, species code, and the
species’ wood density. One other important column is idlevel, which indicates whether
the wood density value comes from the species itself, or from a mean for its genus or
family.
To use the table, you must use one of the plot names included in the table and use the CTFS
species codes.
The function density.ind matches species code and plot names in a table with species names and
returns a vector of one density value per individual. If a species code is not found in the plot, the
mean wood density for all other species in the plot is assigned to that species. If the plot is not
found, however, nothing is assigned.
[1] "wsg" "idlevel" "site" "sp" "genus" "species" "genwood" "famwood" "spwood" "count" "groupID"
> head(wsg.ctfs2[, c("site", "sp", "idlevel", "wsg")])
site sp idlevel wsg
1 amacayacu abarbarb genus 0.566750
2 amacayacu abarjupu species 0.585143
3 amacayacu abutgran genus 0.450000
4 amacayacu acalcune genus 0.300000
5 amacayacu aegicord genus 0.656667
6 amacayacu aegiglan genus 0.656667
> data.frame(table(wsg.ctfs2$site))
Var1 Freq
1 amacayacu 1663
2 bci 1089
3 bukittimah 562
4 cardoso 116
5 changbai 53
6 crc 39
7 fushan 110
8 gutian 154
9 haliburton 18
10 hawaii 20
11 hkk 334
12 ituri 845
13 khaochong 609
14 korup 494
15 lambir 1641
16 laplanada 241
17 lienhuachih 145
18 luquillo 157
19 manaus 915
20 mosingto 265
21 mudumalai 74
22 nanjenshan 129
23 palanan 335
24 pantree 2719
25 pasoh 937
26 serc 19
27 sinharaja 223
28 wabikon 38
29 wytham 23
30 xtbg 469
31 yasuni 1134
0.3. Allometry.
The function Chave.AGB applies the equations given in Chave (2005, Oecologia) to estimate
above-ground biomass (in Mg) for individual diameters. A wood density for each stem (or
one single value) must be submitted. Check inside the function to see the parameter
values.
function (dbh, density = 0.62, htparam = c(41.7, 0.057, 0.748),
heightmodel = predht.asym, forest = "moist")
NULL
> testdbh = c(1, 2, 5, 10, 20, 30, 50, 100, 200)
> AGBmoist = Chave.AGB(dbh = testdbh, density = 0.61, htparam = NULL, forest = "moist")
> AGBwet = Chave.AGB(dbh = testdbh, density = 0.61, htparam = NULL, forest = "wet")
> data.frame(testdbh, AGBwet, AGBmoist)
testdbh AGBwet AGBmoist
1 1 1.767010e-01 1.362456e-01
2 2 7.627926e-01 6.607892e-01
3 5 6.504111e+00 6.572012e+00
4 10 3.588317e+01 4.073561e+01
5 20 2.004350e+02 2.556408e+02
6 30 5.391914e+02 7.361778e+02
7 50 1.804600e+03 2.684672e+03
8 100 8.354351e+03 1.396356e+04
9 200 3.249528e+04 6.102064e+04
0.4. Appendix.
Output created by
> Sweave("~/programs/CTFSRpackage/biomass.CTFSdb.Rnw")
> system("htlatex biomass.CTFSdb.tex")
> system("pdflatex biomass.CTFSdb.tex")
> system("mv biomass.CTFSdb* ~/programs/CTFSRpackage/biomass")
> system("mv ~/programs/CTFSRpackage/biomass/biomass.CTFSdb.html ~/programs/CTFSRpackage/biomass/index.html")
> system("cp ~/programs/CTFSRpackage/biomass/* /var/www/Public/CTFS_RPackage/files/tutorials/biomass")