1 A new land has emerged
1.1 First look
An island previously unknown to humankind has just been discovered and you are part of a team of scientists commissioned to inventory its forest resources, mainly its carbon stock.
Before we start, how would you name the newly found land?
Type the name here:
You have chosen: Louland.
In a future version of this interactive training module, you will be able to choose different land profiles with different (1) forest categories, (2) ratio of ocean covering the 90 km square frame in which the new land is created, (3) inclusion or not of mangrove forests and even (4) the maximum altitude of Louland (it will have an impact on unaccessible plots)!
For now, Louland forests are divided into 4 categories plus Mangrove Forest and all the island is considered accessible.
Great! Here is what Louland looks like.
The remote sensing team has developed land cover and topographic maps based on 30 m resolution remote sensing images and a first exploration crew measured a few forest plots. Based on their observations, we will be able to have a quick overview of Louland. This data is call auxiliary data, it is not NFI data per se, but useful information to help designing and implementing an NFI.
1.2 Preliminary information
Results of a small scale forest inventory
First, let’s have a look at the results of 10 forest plots measured by the exploration crew. The data is stored in the object fi_agb. By running the object name in the console we will see the results:
fi_agb# A tibble: 1 x 8
n_plot n_tree mean_ba sd_ba mean_agb sd_agb ci ci_perc
<int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 10 268. 24.3 25.4 207. 197. 122. 59
ADD variable description
The 10 plots come from a random sample in one of the Evergreen Forest of Louland. The crew also shared the plot level aboveground biomass in the table name fi_pagb.
Your turn! Run the table fi_pagb in the console below to see the table basic information.
## Empty console
fi_pagb# A tibble: 10 x 4
plot_id count_tree plot_ba plot_agb
<chr> <dbl> <dbl> <dbl>
1 ev-di4d 128 28.9 377.
2 ev-ec1p 120 11.2 81.9
3 ev-eve1 197 8.15 51.2
4 ev-nzm1 362 16.7 127.
5 ev-pw2t 320 21.4 132.
6 ev-sfd1 128 17.9 255.
7 ev-tl6f 970 94.2 688.
8 ev-vpj4 128 6.46 49.0
9 ev-xnw8 261 20.1 196.
10 ev-xs1y 64 17.6 116.
ADD variable description
Given that the crew chose the plot location randomly, we can use simple aggregating functions to re-calculate the forest mean aboveground biomass and confirm their calculation. We will use a mix of base R and tidyverse functions, in particular summarise(). This function is very handy to aggregate numerical variables in different columns of our plot table and can even be used in combination to group_by() to summarize numerical variables based on category variables of the same table (more on that later, with the full NFI data).
Let’s see for example how to calculate the mean basal area of the forest with its standard deviation, and save the results in a table exfi_ba. After creating the table, we run the table name in the console to display its content.
exfi_ba <- fi_pagb %>%
summarise(
mean_ba = mean(plot_ba),
sd_ba = sd(plot_ba)
)
exfi_ba# A tibble: 1 x 2
mean_ba sd_ba
<dbl> <dbl>
1 24.3 25.4
Your turn! Create a table exfi_agb with the columns mean_agb and sd_agb and display the results.
## Guided
exfi_agb <- fi_pagb %>%
summarise(
mean_agb = mean(plot_agb),
sd_agb = sd(plot_agb)
)
exfi_agb# A tibble: 1 x 2
mean_agb sd_agb
<dbl> <dbl>
1 207. 197.
land cover types and areas
We can use the land cover shapefile provided to us to view the different land covers and calculate the area of the forest. The shapefile is loaded in the environment under the name sf_lc with the package sf. It contains both the attribute table, the geometries and the coordinate reference system of Louland’s land cover. Running the object name in the console displays its summary information.
sf_lcSimple feature collection with 515 features and 4 fields
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: 560363 ymin: 9919901 xmax: 650363 ymax: 10009900
Projected CRS: WGS 84 / UTM zone 27S
First 10 features:
id lc_id lc lc_name geometry
1 1 1 NF Non-forest POLYGON ((612492.9 10009881...
2 2 5 EV Evergreen POLYGON ((568860.7 10009832...
3 3 2 PL Plantation POLYGON ((570651.3 10009850...
4 4 2 PL Plantation POLYGON ((572170.2 10009849...
5 5 1 NF Non-forest POLYGON ((619150.1 10009824...
6 6 3 DD Deciduous POLYGON ((570466.6 10009868...
7 7 1 NF Non-forest POLYGON ((562004.9 10009836...
8 8 5 EV Evergreen POLYGON ((616636.8 10009775...
9 9 5 EV Evergreen POLYGON ((567939.2 10009328...
10 10 5 EV Evergreen POLYGON ((618332.8 10007788...
This summary information regroups the Coordinate Reference System (CRS), the type of geometry (polygon), the number of polygons (features) and fields and the detailed information on the first 10 polygons.
The four fields represent the polygon ID (id) and the land cover IDs (lc_id), codes (lc) and names (lc_name). To isolate the list of different land covers we can use the distinct() function on the data table.
sf_lc %>%
as_tibble() %>%
select(lc_id, lc, lc_name) %>%
distinct() %>%
arrange(lc_id)# A tibble: 7 x 3
lc_id lc lc_name
<dbl> <fct> <chr>
1 0 WA Water
2 1 NF Non-forest
3 2 PL Plantation
4 3 DD Deciduous
5 4 MD Mixed Deciduous
6 5 EV Evergreen
7 6 MG Mangrove
Let’s set a few naming conventions.
All forest inventory related tables are stored in object with names related to what they contain. for example the NFI plot and tree data are stored in tables plot and tree.
Using plot for a table is not very good practice in R as plot() is the base R function for plotting data. But we keep it nonetheless, forest plot level data is a crucial NFI level. The NFI tables in this tutorial are: plot, tree and species_list.
The prefix exfi_ was added for the data from the first exploration crew forest inventory.
Similarly all spatial data are handled mostly with the sf package, and the prefix sf_ was used as a naming convention. The spatial objects available for this tutorial are: sf_admin, sf_lc and sf_topo, respectively the administrative boundaries, land cover, topography of Louland.
sf objects behave similarly to standard data frames, making it easy to apply tidyverse functions to them while keeping the spatial information or to convert them to data data frames with as_tibble(). The sf package also contains the st_area() function that we are going to use to calculate the overall area of the land covers.
area_lc <- sf_lc %>%
mutate(area_ha = st_area(.) %>% units::set_units(value = ha)) %>%
as_tibble() %>%
group_by(lc) %>%
summarise(area_ha = sum(area_ha))
area_lc# A tibble: 7 x 2
lc area_ha
<fct> [ha]
1 WA 3851.
2 NF 158277.
3 PL 153033.
4 DD 64065.
5 MD 186307.
6 EV 89034.
7 MG 10990.
Bonus
Before moving on with the Louland and the first 10 forest inventory plots.