Compute tree aboveground biomass (AGB) based on allometric equations
Source:R/get_biomass.R
get_biomass.Rd
This function calculates the aboveground biomass (or other tree components) of a given tree based on published allometric equations. Users need to provide a table (i.e. dataframe) with DBH (cm), parsed species Latin names, and site(s) coordinates. The biomass of all trees in one (or several) censuses can be estimated using this function.
Usage
get_biomass(
dbh,
genus,
coords,
species = NULL,
new_eqtable = NULL,
wna = 0.1,
w95 = 500,
nres = 10000
)
Arguments
- dbh
a numeric vector containing tree diameter at breast height (dbh) measurements, in cm.
- genus
a character vector (same length as dbh), containing the genus (e.g. "Quercus") of each tree.
- coords
a numeric vector of length 2 with longitude and latitude (if all trees were measured in the same location) or a matrix with 2 numerical columns giving the coordinates of each tree.
- species
a character vector (same length as dbh), containing the species (e.g. "rubra") of each tree. Default is
NULL
, when no species identification is available.- new_eqtable
Optional. An equation table created with the
new_equations()
function.- wna
a numeric vector, this parameter is used in the
weight_allom()
function to determine the dbh-related weight attributed to equations without a specified dbh range. Default is 0.1.- w95
a numeric vector, this parameter is used in the
weight_allom()
function to determine the value at which the sample-size-related weight reaches 95% of its maximum value (max=1). Default is 500.- nres
number of resampled values. Default is "1e4".
Details
allodb
estimates AGB by calibrating a new allometric equation for each
taxon (arguments genus
and species
) and location (argument coords
) in
the user-provided census data. The new allometric equation is based on a set
of allometric equations that can be customized using the new_eqtable
argument. Each equation is then given a weight with the weight_allom()
function, based on: 1) its original sample size (numbers of trees used to
develop a given allometry), 2) its climatic similarity with the target
location, and 3) its taxonomic similarity with the target taxon (see
documentation of the weight_allom()
function). The final weight attributed
to each equation is the product of those three weights. Equations are then
resampled with theresample_agb()
funtion: the number of samples per
equation is proportional to its weight, and the total number of samples is
provided by the argument nres
. The resampling is done by drawing DBH values
from a uniform distribution on the DBH range of the equation, and estimating
the AGB with the equation. The couples of values (DBH, AGB) obtained are then
used in the function est_params()
to calibrate a new allometric equation,
by applying a linear regression to the log-transformed data. The parameters
of the new allometric equations are then used in the get_biomass()
function
by back-transforming the AGB predictions based on the user-provided DBHs.
Warning
The function can run into some memory problems when used on large datasets (usually several hundred thousand observations).
Examples
# Estimate biomass of all individuals from the Lauraceae family at the SCBI
# plot
lau <- subset(scbi_stem1, Family == "Lauraceae")
lau$agb <- get_biomass(lau$dbh, lau$genus, lau$species,
coords = c(-78.2, 38.9)
)
lau
#> # A tibble: 1,209 × 7
#> treeID stemID dbh genus species Family agb
#> <int> <int> <dbl> <chr> <chr> <chr> <dbl>
#> 1 2 2 2.37 Lindera benzoin Lauraceae 0.731
#> 2 2 31195 1.07 Lindera benzoin Lauraceae 0.0989
#> 3 1 31194 1.6 Lindera benzoin Lauraceae 0.272
#> 4 13 36481 1.34 Lindera benzoin Lauraceae 0.174
#> 5 15 31208 1.27 Lindera benzoin Lauraceae 0.152
#> 6 13 13 1.54 Lindera benzoin Lauraceae 0.247
#> 7 13 31206 1.37 Lindera benzoin Lauraceae 0.184
#> 8 15 15 1.55 Lindera benzoin Lauraceae 0.251
#> 9 16 38297 1.1 Lindera benzoin Lauraceae 0.106
#> 10 17 17 6.82 Lindera benzoin Lauraceae 10.4
#> # ℹ 1,199 more rows
# Estimate biomass from multiple sites (using scbi_stem1 as example with
# multiple coord)
dat <- scbi_stem1[1:100, ]
dat$long <- c(rep(-78, 50), rep(-80, 50))
dat$lat <- c(rep(40, 50), rep(41, 50))
dat$biomass <- get_biomass(
dbh = dat$dbh,
genus = dat$genus,
species = dat$species,
coords = dat[, c("long", "lat")]
)
dat
#> # A tibble: 100 × 9
#> treeID stemID dbh genus species Family long lat biomass
#> <int> <int> <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 2695 2695 1.41 Acer negundo Sapindaceae -78 40 0.183
#> 2 1229 38557 1.67 Acer negundo Sapindaceae -78 40 0.282
#> 3 1230 1230 1.42 Acer negundo Sapindaceae -78 40 0.187
#> 4 1295 32303 1.04 Acer negundo Sapindaceae -78 40 0.0842
#> 5 1229 32273 2.47 Acer negundo Sapindaceae -78 40 0.766
#> 6 66 31258 2.19 Acer negundo Sapindaceae -78 40 0.564
#> 7 2600 2600 1.81 Acer negundo Sapindaceae -78 40 0.347
#> 8 4936 4936 1.35 Acer negundo Sapindaceae -78 40 0.164
#> 9 1229 36996 2.05 Acer negundo Sapindaceae -78 40 0.476
#> 10 1005 1005 1.41 Acer negundo Sapindaceae -78 40 0.183
#> # ℹ 90 more rows