Overview
Intensity Analysis is a quantitative method to analyze land use and cover (LUC) maps at multiple time steps. It evaluates how the size and rate of change varies across three hierarchical levels.What is Intensity Analysis?
Intensity Analysis examines LUC transitions using cross-tabulation matrices, comparing observed change intensity against a uniform (expected) change intensity.Three Analysis Levels
Level 1 - Interval LevelHow does the size and speed of change vary across time intervals? Level 2 - Category Level
How do gross gains and losses vary across categories within each interval? Level 3 - Transition Level
How do specific category transitions vary from uniform expectations?
Each level provides increasingly detailed information about land use change patterns. The method tests for stationarity - whether change patterns are consistent across time intervals.
Complete Workflow
library(OpenLand)
# Load sample dataset (or use your own rasters)
url <- "https://zenodo.org/record/3685230/files/SaoLourencoBasin.rda?download=1"
temp <- tempfile()
download.file(url, temp, mode = "wb")
load(temp)
# Extract contingency tables
SL_2002_2014 <- contingencyTable(input_raster = SaoLourencoBasin,
pixelresolution = 30)
The
tb_legend table is created with random category names and colors. You must edit these before analysis.# View the legend structure
SL_2002_2014$tb_legend
# A tibble:
# categoryValue categoryName color
# <dbl> <fct> <chr>
# 1 2 ABC #002F70
# 2 3 XYZ #0A468D
# ...
SL_2002_2014$tb_legend$categoryName <- factor(
c("Ap", "FF", "SA", "SG", "aa", "SF", "Agua", "Iu", "Ac", "R", "Im"),
levels = c("FF", "SF", "SA", "SG", "aa", "Ap", "Ac", "Im", "Iu", "Agua", "R")
)
Category names:
- Ap = Pasture
- FF = Forest
- SA = Park Savannah
- SG = Gramineous Savannah
- aa = Anthropized Vegetation
- SF = Wooded Savannah
- Agua = Water
- Iu = Urban
- Ac = Crop farming
- R = Reforestation
- Im = Mining
SL_2002_2014$tb_legend$color <- c(
"#FFE4B5", # Ap - Pasture
"#228B22", # FF - Forest
"#00FF00", # SA - Park Savannah
"#CAFF70", # SG - Gramineous Savannah
"#EE6363", # aa - Anthropized Vegetation
"#00CD00", # SF - Wooded Savannah
"#436EEE", # Agua - Water
"#FFAEB9", # Iu - Urban
"#FFA54F", # Ac - Crop farming
"#68228B", # R - Reforestation
"#636363" # Im - Mining
)
my_intensity <- intensityAnalysis(
dataset = SL_2002_2014,
category_n = "Ap", # Pasture (gaining category)
category_m = "SG", # Gramineous Savannah (losing category)
area_km2 = TRUE # Use km² instead of pixel counts
)
# View the output structure
names(my_intensity)
# [1] "lulc_table" "interval_lvl"
# [3] "category_lvlGain" "category_lvlLoss"
# [5] "transition_lvlGain_n" "transition_lvlLoss_m"
my_intensity$lulc_table
# A tibble:
# Period From To km2 QtPixel Interval
# <fct> <fct> <fct> <dbl> <int> <dbl>
# 1 2012-2014 Ap Ap 1234. 1234 2
# 2 2012-2014 FF FF 5678. 5678 2
# ...
2. interval_lvl (Interval object)
Interval-level analysis showing change rate (St) vs. uniform rate (U):
Interval-level analysis showing change rate (St) vs. uniform rate (U):
my_intensity$interval_lvl
# Slot "intervalData":
# Period PercentChange St U
# <fct> <dbl> <dbl> <dbl>
# 1 2012-2014 3.92 1.96 1.66
# 2 2010-2012 4.24 2.12 1.66
# ...
my_intensity$category_lvlGain
# Slot "categoryData":
# Period To Interval GG_km2 Gtj St
# <fct> <fct> <int> <dbl> <dbl> <dbl>
# 1 2012-2014 Ap 2 612. 3.92 1.66
# 2 2012-2014 Ac 2 110. 1.14 1.66
# ...
5. transition_lvlGain_n (Transition object)
Transitions targeting category n (“Ap” in our example):
Transitions targeting category n (“Ap” in our example):
my_intensity$transition_lvlGain_n
# Which categories transition TO Ap?
# Slot "transitionData":
# Period From To Interval T_i2n_km2 Rtin Wtn
# <fct> <fct> <fct> <int> <dbl> <dbl> <dbl>
# 1 2012-2014 SG Ap 2 123.4 2.45 1.82
# ...
my_intensity$transition_lvlLoss_m
# Which categories does SG transition TO?
# Similar structure showing losses from m
plot(my_intensity$interval_lvl,
labels = c(leftlabel = "Interval Change Area (%)",
rightlabel = "Annual Change Area (%)"),
marginplot = c(-8, 0),
labs = c("Changes", "Uniform Rate"),
leg_curv = c(x = 2/10, y = 3/10))
plot(my_intensity$category_lvlGain,
labels = c(leftlabel = bquote("Gain Area (" ~ km^2 ~ ")"),
rightlabel = "Intensity Gain (%)"),
marginplot = c(.3, .3),
labs = c("Categories", "Uniform Rate"),
leg_curv = c(x = 5/10, y = 5/10))
plot(my_intensity$category_lvlLoss,
labels = c(leftlabel = bquote("Loss Area (" ~ km^2 ~ ")"),
rightlabel = "Loss Intensity (%)"),
marginplot = c(.3, .3),
labs = c("Categories", "Uniform Rate"),
leg_curv = c(x = 5/10, y = 5/10))
plot(my_intensity$transition_lvlGain_n,
labels = c(leftlabel = bquote("Gain of Ap (" ~ km^2 ~ ")"),
rightlabel = "Intensity Gain of Ap (%)"),
marginplot = c(.3, .3),
labs = c("Categories", "Uniform Rate"),
leg_curv = c(x = 5/10, y = 5/10))
plot(my_intensity$transition_lvlLoss_m,
labels = c(leftlabel = bquote("Loss of SG (" ~ km^2 ~ ")"),
rightlabel = "Intensity Loss of SG (%)"),
marginplot = c(.3, .3),
labs = c("Categories", "Uniform Rate"),
leg_curv = c(x = 1/10, y = 5/10))
Interpreting Results
Stationarity Testing
At each level, OpenLand tests whether patterns are stationary (consistent) across time intervals. Stationary pattern: All intervals show the same relationship to uniform intensity- All above uniform → Consistently active
- All below uniform → Consistently dormant
- Some above, some below → Changing behavior over time
Key Metrics Summary
| Level | Metric | Comparison | Interpretation |
|---|---|---|---|
| Interval | St vs U | St > U | Fast interval (active period) |
| St < U | Slow interval (dormant period) | ||
| Category | Gtj vs St | Gtj > St | Active gain (targeting this category) |
| Gtj < St | Dormant gain | ||
| Lti vs St | Lti > St | Active loss (avoiding this category) | |
| Lti < St | Dormant loss | ||
| Transition | Rtin vs Wtn | Rtin > Wtn | Category i targeted by n |
| Rtin < Wtn | Category i avoids n | ||
| Qtmj vs Vtm | Qtmj > Vtm | Category j targets m | |
| Qtmj < Vtm | Category j avoids m |
Using Pixel Counts Instead of Area
To use pixel counts instead of km²:km2 to QtPixel in output tables.
Next Steps
After completing intensity analysis:- Create visualizations with Sankey diagrams, chord diagrams, and bar plots
- Perform spatial analysis to map accumulated changes
- Export results for publication or reporting