FOR 8515 Advance Forest Biometrics David R. Larsen
1
Unit 3 -- Stand and Stock Tables
Stand and Stock tables are the traditional way of describing plots of stands. It is very common that they
are made from any forest inventory data. Stand tables are a set of variables by diameter classes. Stock
tables are a set of variables by species classes. In this unit I will explain how to calculate the variable in a
stand and stock tables and several of its uses.
Learning Objectives:
Learn to calculate trees per acre, basal area, Quadratic mean diameter, cubic foot volume, and
board foot volume.
Learn about the format of Stand tables.
Learn about the format of Stock tables.
Learn to make a composition figure.
Learn to make a diameter distribution figure.
Data Needs:
You will need a minimum on one plot. The plot needs a tree list.
Each tree will have a record with:
tree species,
diameter at breast height,
merchantable or total height,
plot expansion factor.
These will be explained as the work through the calculations
Stand Table
Table 1. Example of a typical Stand Table, in English units.
Dclasses
n
tpa
ba
Dq
volcf
volbf
5
3
15
2.298653
5.300629
20.31496
0
7
11
55
15.43444
7.172992
236.512
0
9
0
0
0
0
0
0
11
3
15
9.754482
10.91925
120.7631
296.6893
13
2
10
9.598493
13.26593
151.7636
797.7677
15
1
5
6.300639
15.2
128.4909
685.5321
17
1
5
7.156941
16.2
128.5523
679.572
Total
21
105
50.54365
9.394527
786.3969
2459.561
The Stand Table in table 1. organized as 2” Diameter classes in the first column, then for each variable
the number of trees in that class. The table can be calculated for just the plot but because many people
FOR 8515 Advance Forest Biometrics David R. Larsen
2
use different plot designs the plot does not make a very good reporting unit. Typically use unit areas,
that is, acres in English units and hectares in metric units.
Let’s talk about each column. The first column data is left off by some people but I feel it is important to
let the reader understand the strength of the sample. The Column labeled ‘n” is the number of sample
trees in each size class. Not that for two of the rows the numbers is based on one tree.
The second data column is the tree per acre or tpa. To get this number you need to know the n from
the previous column and the expansion factor. Expansion factor is a number that for a single tree
describes the number of trees represent per unit are in that sample design. In fixed area plots the
number is easy to determine. The plot used in table 1. has an expansion factor of 5 the plot is a 1/5
th
acre plot so each tree represents 5 trees per acre. You will not that in this case the tpa column is 5
times the “n” column.
The third data column is basal area per acre or ba. We need to work through several steps here. First
the basal area of a tree is:

  

In this case for English units all but the 144 is the area formula were we use diameter instead of the
familiar:
  
The 144 is needed to convert from the diameter units, which are inches to the desired units for basal
area, which are square feet. Most of the formula collapses to a constant thus yielding:
  
We now have to take the area in the sample tree and expand it to a per acre basis by multiplying by the
expansion factor. Then when summed by group and total provide the basal area per acre in the group
and total for the sample.
The fourth data colume is labeled Quadratic Mean Diameter or Dq. If you remember the Dq is the
diameter of the tree of average basal area. We use the follow:




The fifth data column is the cubic foot volume of the trees. A cubic foot is defined as 1’ x 1’ x 1’ and one
foot cube. The Volume of a tree is usually calculated by a formula that is a variation of
FOR 8515 Advance Forest Biometrics David R. Larsen
3
Remember a volume of a cylinder is
The rest is to account for taper and bark thickness. Cubic volume is usually calculated for all trees
regardless of size. Once the volume for the tree has been calculated we have to expand the per tree
volume to a volume per acre. Then these are summed by group and total.
In North America, we usually include a board foot volume estimate. Most of the rest of the work only
uses cubic measures of volume. A board foot is defined as 1”x12”x12” or 1” x 1’ x 1’. Given what we said
above you might assume that there are 12 board feet in a cubic foot of wood. This is not correct several
factors impact the result. First is kerf. Kerf is the space used to allow the saw blade to pass through the
wood. Typical kerfs vary from ¼” to 1/8” to 1/16” as might be expected smaller kerfs yield more total
board feet for a given amount of cubic feet. Additionally, trees are tapered cylinders not rectangular
blocks so some wood is lost in half round (slabs) cut off the outside of the log. Taper further reduces the
recoverable part of the log. Recovery rate also changes with the diameter of the log. The net effect is
that for most solid trees only about 6-9 board feet are recoverable from cubic feet available in a log.
However, with all this said, the processing of board foot volume is again a process of starting with the
volume of the individual tree, expanded to a per acre bases and summed by groups and total. You will
note that the volbf diameter classes below 11 are 0. This is because tree less that 10’s are considered
non-merchantable.
Special Note: when doing these calculations for multiple plots, each plot is a per acre estimate of each
value to get the area wide estimate we need to average plot statistics
Stock Table
You will not that the layout of the stock table (see Table 2.) and its variables are the same as the stand
table except the rows are tree species or species groups. The calculations are the same except that sum
or different groups.
Table 2. Example Stock table for the same plot, in English units
Sclasses
n
tpa
ba
Dq
volbf
Pine
5
25
5.635777
6.428997
0
RedOak
2
10
7.03804
11.35958
685.5321
WhiteOak
14
70
37.86983
9.959418
1774.029
Total
21
105
50.54365
9.394527
2459.561
Creating stand and Stock tables in R
Now we will step through the process of using the code provided to make stand and stock tables.
FOR 8515 Advance Forest Biometrics David R. Larsen
4
First you will note that the link is for both code and data in one zip file. Download the zip file to a
working directory.
Unzip the files
The directory should include:
standtable.R These two functions are the main function for the stand and stock tables.
stocktable.R
dclass.R These are the functions to build the diameter classes or species classes.
spclass.R
sptable.R This functionis used by stock table to convey the species classes to the stocktable function
volume.R This function calcalulated the cubic and board foot volume for the tables.
bat.R This function calculated the basal area per tree.
load.table.R This is a service script that sources all the other files.
p1.R This is the plot data file this plot has data from the follow years.
1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, 2002, 2007
Steps
Open R in the working directory and run
>source(“load.table.R”)
Your directory should look like this.
> ls ()
[1] "bat" "d" "dclass" "ht" "p1"
[6] "spclass" "sptable" "standtable" "stocktable" "volume"
This function lists the available years in your data file.
> names(p1)
[1] "y57" "y62" "y67" "y72" "y77" "y82" "y87" "y92" "y97" "y02" "y07"
FOR 8515 Advance Forest Biometrics David R. Larsen
5
Next we list the function to calculate the basal area
function( treeplot, BAconstant=0.005454154, expfac=0)
{
# Function to calculate the plot tpa, ba, and dq
# by David R. Larsen, Copyright, December 10, 2010
#
if( expfac == 0 ){
bat = BAconstant * treeplot$dbh^2 * treeplot$expfac
}else{
bat = BAconstant * treeplot$dbh^2 * expfac
}
bat
}
And then the function to calculate the tree volume.
function( dbh, mht, type="cubic", merchdbh=0 ){
#
# Function to calculate tree volumes from Beers 1964
# by David R. Larsen, Copyright July 19, 2006
#
if( dbh > merchdbh )
{
aa <- (dbh^2 * (dbh + 190))/ 100000
bb <- (1/100) * (((mht * (168 - mht))/64) + (32/mht) )
bb[mht<1.0]<-0.0
cc <- 475 + ( 3 * mht^2)/ 128
volume <- 0.0
if( type == "cubic" ){
volume <- 92 * aa * bb
}else if( type == "board" ){
volume <- aa * bb * cc
}else{
volume <- aa * bb
}
}else{
volume <- 0.0
}
volume
}
FOR 8515 Advance Forest Biometrics David R. Larsen
6
Note that dbh is assumed to be in inches, mht in feet and type must be “cubic” or “board” or the
function will return cords. In the dbh is less than the merchantable limit a 0 volume is returned.
Sptable translated species code in the data into reportable species classes.
> sptable
species spclass
1 0 Dead
2 10 RedOak
3 11 RedOak
4 12 RedOak
5 13 RedOak
6 20 WhiteOak
7 21 WhiteOak
8 22 WhiteOak
9 23 WhiteOak
10 30 Pine
11 31 Cedar
12 40 Hickory
13 50 OtherMerch
14 51 OtherMerch
15 52 OtherMerch
16 53 OtherMerch
17 54 OtherMerch
18 55 OtherMerch
19 56 OtherMerch
20 57 OtherMerch
21 58 OtherMerch
22 59 OtherMerch
23 60 Maple
24 70 Walnut
25 71 Walnut
26 80 OtherNonMerch
27 81 OtherNonMerch
28 82 OtherNonMerch
29 83 OtherNonMerch
30 84 OtherNonMerch
31 85 OtherNonMerch
32 86 OtherNonMerch
33 87 OtherNonMerch
34 88 OtherNonMerch
35 89 OtherNonMerch
36 90 Cherry
FOR 8515 Advance Forest Biometrics David R. Larsen
7
37 91 OtherMerch
To run the stocktable you must pass a single plot year combination to the function.
> stocktable(p1$y72,sptable) this version is passing the p1, year 72 to the function and the species
table.
Stock table
sclasses n tpa ba Dq volcf volbf
1 Pine 5 25 5.635777 6.428997 16.19261 0.0000
2 RedOak 2 10 7.038040 11.359577 27.05238 137.1064
3 WhiteOak 14 70 37.869827 9.959418 114.03439 354.8058
4 Total 21 105 50.543645 9.394527 157.27939 491.9122
These number are for the plot only, in the next example the 5 is the expansion factor for the plot.
> stocktable(p1$y72,sptable,5)
Stock table
sclasses n tpa ba Dq volcf volbf
1 Pine 5 25 5.635777 6.428997 80.96305 0.0000
2 RedOak 2 10 7.038040 11.359577 135.26191 685.5321
3 WhiteOak 14 70 37.869827 9.959418 570.17197 1774.0290
4 Total 21 105 50.543645 9.394527 786.39693 2459.5611
These numbers are the same plot but expanded to a per acre basis.
Figures from stand tables
One very nice feature of these tables is that they make it easy to create diameter distribution figures.
These figures are the trees per acre plot on the Y axis and the diameter classes plotted on the x axis.
We are going to make a script file to hold several repeated commands.
FOR 8515 Advance Forest Biometrics David R. Larsen
8
Open file.edit and add the following lines
# Script to make a diameter distribution from a standtable
# by David R. Larsen January 31, 2012
#
# Modify the years in these two lines
#
dta=standtable(p1$y72,2,5)
main="Plot 1, 1972"
#
#
xlab="Diameter Classes (in)"
ylab="Trees per acre"
height=dta$tpa[-length(dta$tpa)]
dc.names=(dta$dclasses[-length(dta$tpa)])
bar.color=rep(2,length(dta$tpa)-1)
barplot(height=height,names.arg=dc.names,col=bar.color,xlab=xlab,
ylab=ylab,main=main)
Note to change years you will need to change the year number in the two lines at the top of the script.
# Script to make a composition from a stocktable
# bt David R. Larsen January 31, 2012
#
# Modify the years in these two lines
#
dta=stocktable(p1$y72,sptable,5)
main="Plot 1, 1972"
#
#
xlab="Species Classes"
ylab="Trees per acre"
height=dta$tpa[-length(dta$tpa)]
sp.names=(dta$sclasses[-length(dta$tpa)])
bar.color=seq(1,length(dta$tpa)-1,1)
barplot(height=height,names.arg=sp.names,col=bar.color,xlab=xlab,ylab=
ylab,main=main)
Please enter these two scripts and create each of the figure of each year in the data set.