Data from: The mountain pine beetle in a marginal boreal landscape: Cross-scale collapse triggered by population removal
Data files
May 20, 2026 version files 2.33 GB
-
AB_PineVolumes_Lambert.gdb.zip
972.74 MB
-
Alberta_mdb.zip
31.12 MB
-
HybridPrediction_1000m.lpkx
17.53 MB
-
MPB_SSI_gdb.zip
1.31 GB
-
README.md
23.93 KB
-
RedTreeCounts.txt
988 B
Abstract
Mountain pine beetle (MPB) outbreaks exhibit nonlinear dynamics and are driven by positive density-dependent feedbacks that link fast behavioural processes to slow, landscape-level environmental change. Intrinsic density-dependent factors include beetle pressure measured at the attack site on the stem, attacks up the height of the stem, and the density of attacked trees in the surrounding cluster. Extrinsic environmental drivers operating at the landscape scale include winter temperatures, drought, pine volumes, and pine ancestry. Although this feedback loop typically fuels rapid irruption, it can be reversed through sustained population removal, and we demonstrate such outbreak collapse in Alberta's commercial pine forests in Alberta (2006–2023). Although millions of trees were freshly attacked between 2009–2012, the outbreak did not expand because the removal of those freshly infested trees disrupted the positive feedback linking brood production to landscape-level spread. Cold winters in 2018–2020 contributed to the final collapse, but the decisive factor was the earlier disruption of density-dependent feedback through green-tree removal, which limited population growth and tree mortality from 2010–2017 and prevented any rebound after 2020.
These datasets provides the quantitative evidence for the reversal of the mountain pine beetle (MPB) outbreak in Alberta’s commercial pine stands from 2006–2023:
- Microsoft Access database tables each year (2006–2023), providing spatial records of fine‑scale, field‑derived estimates of beetle pressure and stand attributes, used to evaluate seasonal recruitment (r) and inter‑annual expansion (R) dynamics;
- Raster and vector layers of overstory and understory lodgepole pine volume (m³/ha) derived from the most recent Mountain Pine Beetle Risk Assessment (Bleiker 2019);
- Estimated proportion lodgepole‑jack pine hybrid introgression (Q) from Cullingham et al. (2012);
- Stand Susceptibility Index (Shore & Safranyik, 1992) spatial polygon layers (2008, 2016, and 2023);
- Annual summary of aerial and ground‑based red‑tree surveys and control efforts (2006–2022).
Dataset DOI: 10.5061/dryad.kprr4xhk6
General information
Title: Data from: The mountain pine beetle in a marginal boreal landscape: Cross-scale collapse triggered by population removal
Dataset DOI: 10.5061/dryad.kprr4xhk6
Date of data collection: 2006–2023
Geographic location: Alberta, Canada. Sampling sites are distributed across the western Canadian boreal forest, primarily in the foothills and Rocky Mountain regions of Alberta where lodgepole pine (Pinus contorta var. latifolia) and jack pine (Pinus banksiana) overlap.
Methodology: Annual ground-based mountain pine beetle (MPB) population forecast surveys were conducted by Alberta Agriculture and Forestry. At each survey site, recently attacked (red-crown) trees were identified. Sample trees were felled and bark samples were removed from two sides of the bole (north and south) at breast height (1.3 m). Each bark sample (~10 cm diameter disk) was examined to count live and dead individuals at four life stages (larvae, pupae, teneral adults, and mature adults) as well as exit holes left by emerged beetles. These counts were used to calculate R-values (the ratio of live brood to exit holes), a standard metric for estimating seasonal recruitment in bark beetle populations. Additionally, aerial helicopter-GPS surveys were conducted to identify and count red (dead) trees across the infested landscape. Infested trees identified through surveys were removed as part of a population control programme.
Description of the data and file structure
These data support analyses of sustained mountain pine beetle (MPB) population removal leading to population collapse in Alberta's commercial pine forests over 2006–2023. No single causal variable effectively captures the collapse mechanism; instead, collapse reflects a syndrome involving two sets of drivers operating at different spatial scales. Intrinsic density-dependent factors include beetle pressure measured at the attack site on the stem, attacks up the height of the stem, and the density of attacked trees in the surrounding cluster. Extrinsic environmental drivers operating at the landscape scale include winter temperatures, drought, pine volumes, and pine ancestry. Despite several million freshly attacked trees detected annually from 2009–2012, outbreak expansion did not occur, with the removal of freshly attacked trees is the most plausible explanation for the observed decoupling between r (seasonal recruitment) and R (interannual expansion), which were uncharacteristically uncorrelated throughout 2006–2019. This decoupling indicates that the positive feedback loop linking brood productivity to landscape-level spread was disrupted during the years when it would normally have been strongest. Cold winters in 2018–2020 contributed to the final collapse, but the decisive factor was the earlier disruption of density-dependent feedback through green-tree removal, which limited population growth and tree mortality from 2010–2017 and prevented any rebound after 2020.
All code required to run the analyses is available from https://github.com/FOR-CAST/r-values. Additional data from open data sources are downloaded and extracted as part of the analysis workflow.
Files and variables
File: RedTreeCounts.txt
Description:
Tab-delimited text file summarizing annual red tree aerial survey and ground control data for beetle years 2006–2022. Red trees are those killed by MPB in the previous beetle year, identified by their red (dead) crowns during helicopter-GPS aerial surveys. NA indicates missing data.
| column | type | description |
|---|---|---|
Year |
integer | Beetle year (runs Aug 15 until Aug 14 the following year). |
HeliGPSArea |
integer | Total infested area delineated during helicopter-GPS surveys (ha). |
HeliGPSites |
integer | Total number of discrete infestation sites identified during aerial surveys. |
RedTrees |
integer | Total number of red (dead) trees counted across all sites. |
RedTreesPerSite |
float | Mean number of red trees per site (RedTrees / HeliGPSites). |
RedTreesPer_km2 |
float | Density of red trees per km2 of infested area (RedTrees / (HeliGPSArea / 100)). |
SitesGroundSurveyed |
integer | Number of sites visited for ground-based population forecast surveys. |
TreesControlled |
integer | Total number of infested trees removed (felled or treated) as part of the control programme in a given year. |
InfestedTreesPerControlSite |
float | Mean number of infested trees per ground-surveyed control site. |
File: Alberta_mdb.zip
Description:
Microsoft Access database files (.mdb and .accdb) containing mountain pine beetle population forecast survey data collected by Alberta Agriculture and Forestry during beetle years 2006–2019. Survey methods are described by Alberta Agriculture and Forestry (2020).
Archive structure
The archive contains three top-level folders organized by year range:
Alberta_mdb/
├── SourceData2006to2008/ (beetle years 2006–2008)
│ ├── Population Forecast Surveys beetle_yr_2006/
│ │ ├── <region>_PopForecast_2006.mdb
│ │ └── ...
│ ├── Population Forecast Surveys beetle_yr_2007/
│ └── Population Forecast Surveys beetle_yr_2008/
├── SourceData2009to2011/ (beetle years 2009–2011)
│ ├── Population Forecast Surveys beetle_yr_2009/
│ ├── Population Forecast Surveys beetle_yr_2010/
│ └── Population forecast (r value)/ (beetle year 2011)
└── SourceData2012to2019/ (beetle years 2012–2019)
├── <region>_PopForecast_<year>.mdb
└── ...
Each beetle-year subfolder contains one or more .mdb or .accdb files, typically named by geographic region and year (e.g., Peace_PopForecast_2012.mdb, Slave_PopForecast_2009.mdb, mpb_survey_jun_11_2008.mdb). Some folders contain multiple database files when surveys for a given beetle year were conducted across different administrative regions.
Notes on file variability:
- The archive may also contain auxiliary files (e.g., files with
rollup,Copy of, orsourcein the name) that are not used in the analysis. - Not all database files use the same table names: some contain a table named
mpb_sitewhile others containmpb_survey_info. These are equivalent site-level tables with the same schema (described below). All databases contain ampb_treestable. - The value
-999was used as a missing data sentinel forr_valuein some files.
Accessing the data
These .mdb/.accdb files require Microsoft Access or compatible software (e.g. MDB Viewer Plus on Windows) to open directly. Users on non-Windows platforms can use tools such as mdbtools (Linux/macOS) to access the tables. The analysis code (01a-extract-mdb.R) extracts all tables to CSV format using an ODBC connection on Windows. The extracted CSVs are then merged and validated by 01b-import-mdb-csv.R.
mdb site table (or mpb_survey_info)
Site-level summary data for each survey site in a given beetle year. Each row represents one site.
| column | type | description |
|---|---|---|
siteID |
integer | Unique numeric site identifier within each database file. |
site_nbr |
string | MPB site number (human-readable label). |
project |
string | Name of the geographically defined project area containing several infestations. |
corp_area |
string | Name of the Alberta Forestry corporate area (administrative unit). |
project_mgr |
string | Name of the project manager responsible for the survey. |
infestation |
string | Name of the infestation cluster. |
beetle_yr |
integer | Beetle year (runs Aug 15 of the current year until Aug 14 of the following year). |
elevation |
integer | Site elevation (metres above sea level). |
aspect |
integer | Slope aspect at the site, measured in degrees clockwise from north (0–359). |
snow_depth |
integer | Snow depth at the time of ground sampling (cm). |
surv_date |
date | Calendar date the ground survey was conducted. |
nbr_sampled |
integer | Number of trees sampled (felled and bark-sampled) at the site. |
nbr_infested |
integer | Number of trees with more than 40 MPB attacks (pitch tubes) within the survey plot. |
access_lat_dmd |
string | Latitude of access point in degrees-minutes-seconds (DMS) format. |
access_long_dmd |
string | Longitude of access point in degrees-minutes-seconds (DMS) format. |
access_lat_dd |
float | Latitude of access point in decimal degrees (WGS 84). |
access_long_dd |
float | Longitude of access point in decimal degrees (WGS 84; negative values indicate west). |
plot_lat_dmd |
string | Latitude of the plot centre in degrees-minutes-seconds (DMS) format. |
plot_long_dmd |
string | Longitude of the plot centre in degrees-minutes-seconds (DMS) format. |
plot_lat_dd |
float | Latitude of the plot centre in decimal degrees (WGS 84). |
plot_long_dd |
float | Longitude of the plot centre in decimal degrees (WGS 84; negative values indicate west). |
site_des |
string | Free-text site description. |
crew |
string | Names of crew members who conducted the survey. |
access |
integer | Access difficulty rating (0 = no access, 1 = easy, 2 = moderate, 3 = difficult). |
tot_live_larvae |
integer | Total number of live larvae counted across all sampled trees at the site. |
tot_live_pupae |
integer | Total number of live pupae counted across all sampled trees at the site. |
tot_live_teneral |
integer | Total number of live teneral (newly formed, unpigmented) adults counted across all sampled trees at the site. |
tot_live_adults |
integer | Total number of live mature adults counted across all sampled trees at the site. |
tot_dead_larvae |
integer | Total number of dead larvae counted across all sampled trees at the site. |
tot_dead_pupae |
integer | Total number of dead pupae counted across all sampled trees at the site. |
tot_dead_teneral |
integer | Total number of dead teneral adults counted across all sampled trees at the site. |
tot_dead_adults |
integer | Total number of dead mature adults counted across all sampled trees at the site. |
tot_holes |
integer | Total number of exit holes (holes left by beetles that successfully emerged) counted across all sampled trees at the site. |
r_value |
float | Site-level R-value: ratio of total live brood (larvae + pupae + teneral adults) to total exit holes. A measure of seasonal recruitment potential. |
survival |
float | Estimated proportion of brood surviving to emergence (range 0–1). |
mdb tree table
Tree-level data from bark sampling. Each row represents one sampled tree. Bark samples are circular disks (~10 cm diameter) cut from the bole at breast height (1.3 m). Two samples are taken from each of two cardinal aspects (north side: ns1, ns2; south side: ss1, ss2), yielding four samples per tree. Under each sample, live and dead individuals are counted at each life stage, along with exit holes.
| column | type | description |
|---|---|---|
ID |
string | Unique row identifier for each tree record within the database. |
siteID |
integer | Site identifier (links to the siteID in the site table). |
infestation |
string | Name of the infestation cluster containing this tree. |
site_nbr |
string | Human-readable site description/number. |
sample_tree_nbr |
string | Sequential sample tree number within the site. |
tree_nbr |
string | Tree identifier (label assigned in the field). |
dbh |
float | Diameter at breast height (1.3 m above ground) in centimetres. |
ht_pitch_tube |
integer | Height of the highest visible pitch tube on the bole (metres above ground). |
ns1_larvae_live |
integer | Number of live larvae from north side bark sample 1. |
ns1_larvae_dead |
integer | Number of dead larvae from north side bark sample 1. |
ns2_larvae_live |
integer | Number of live larvae from north side bark sample 2. |
ns2_larvae_dead |
integer | Number of dead larvae from north side bark sample 2. |
ns1_pupae_live |
integer | Number of live pupae from north side bark sample 1. |
ns1_pupae_dead |
integer | Number of dead pupae from north side bark sample 1. |
ns2_pupae_live |
integer | Number of live pupae from north side bark sample 2. |
ns2_pupae_dead |
integer | Number of dead pupae from north side bark sample 2. |
ns1_teneral_adults_live |
integer | Number of live teneral adults from north side bark sample 1. |
ns1_teneral_adults_dead |
integer | Number of dead teneral adults from north side bark sample 1. |
ns2_teneral_adults_live |
integer | Number of live teneral adults from north side bark sample 2. |
ns2_teneral_adults_dead |
integer | Number of dead teneral adults from north side bark sample 2. |
ns1_adults_live |
integer | Number of live mature adults from north side bark sample 1. |
ns1_adults_dead |
integer | Number of dead mature adults from north side bark sample 1. |
ns2_adults_live |
integer | Number of live mature adults from north side bark sample 2. |
ns2_adults_dead |
integer | Number of dead mature adults from north side bark sample 2. |
ns1_holes |
integer | Number of exit holes in north side bark sample 1. |
ns2_holes |
integer | Number of exit holes in north side bark sample 2. |
ss1_larvae_live |
integer | Number of live larvae from south side bark sample 1. |
ss1_larvae_dead |
integer | Number of dead larvae from south side bark sample 1. |
ss2_larvae_live |
integer | Number of live larvae from south side bark sample 2. |
ss2_larvae_dead |
integer | Number of dead larvae from south side bark sample 2. |
ss1_pupae_live |
integer | Number of live pupae from south side bark sample 1. |
ss1_pupae_dead |
integer | Number of dead pupae from south side bark sample 1. |
ss2_pupae_live |
integer | Number of live pupae from south side bark sample 2. |
ss2_pupae_dead |
integer | Number of dead pupae from south side bark sample 2. |
ss1_teneral_adults_live |
integer | Number of live teneral adults from south side bark sample 1. |
ss1_teneral_adults_dead |
integer | Number of dead teneral adults from south side bark sample 1. |
ss2_teneral_adults_live |
integer | Number of live teneral adults from south side bark sample 2. |
ss2_teneral_adults_dead |
integer | Number of dead teneral adults from south side bark sample 2. |
ss1_adults_live |
integer | Number of live mature adults from south side bark sample 1. |
ss1_adults_dead |
integer | Number of dead mature adults from south side bark sample 1. |
ss2_adults_live |
integer | Number of live mature adults from south side bark sample 2. |
ss2_adults_dead |
integer | Number of dead mature adults from south side bark sample 2. |
ss1_holes |
integer | Number of exit holes in south side bark sample 1. |
ss2_holes |
integer | Number of exit holes in south side bark sample 2. |
foliage |
integer | Crown foliage status at the time of sampling: 0 = majority green or yellow (recent attack); 1 = majority red (previous year's attack). |
hit_count |
integer | Approximate total number of MPB attacks (pitch tubes) visible on the sample tree bole. |
File: HybridPrediction_1000m.lpkx
Description:
Raster layer providing the estimated proportion of jack pine (Pinus banksiana) genomic introgression (Q) into lodgepole pine (Pinus contorta var. latifolia) within each 1 km2 grid cell (described in Cullingham et al. 2012). Values of Q range from 0 (pure lodgepole pine) to 1 (pure jack pine), with intermediate values indicating hybrid ancestry. This layer is used to characterize the degree of hybridization at each survey site.
File format and internal structure:
The .lpkx format is an ArcGIS Layer Package, which is a 7zip-compressed archive bundling geodatabase files and layer definitions. When extracted, the archive contains:
HybridPrediction_1000m/
├── p20/ (compatible with ArcGIS Pro 2.x)
│ └── pine.gdb (raster layer; single band: Q-value)
└── p30/ (compatible with ArcGIS Pro 3.x)
└── pine.gdb (raster layer; single band: Q-value)
The raster can be read in R using terra::rast("p30/pine.gdb") or equivalent GIS software (e.g., QGIS).
| variable | type | description |
|---|---|---|
Q |
float | Estimated proportion of jack pine introgression (0–1) in the 1 km2 grid cell surrounding each point. |
File: AB_PineVolumes_Lambert.gdb.zip
Description:
Geodatabase (.gdb) containing Alberta pine volume maps derived from provincial forest inventory data (Bleiker 2019). These layers quantify the abundance of pine available to mountain pine beetle at the landscape scale.
Coordinate Reference System: NAD83 Lambert Conformal Conic projection (standard parallels and central meridian appropriate for Alberta).
Layers:
| layer | type | description |
|---|---|---|
OVERSTOREY_PINE |
MultiPolygon | Polygons delineating forest stands where pine species form part of the overstorey canopy (801,916 features). Attribute: pine volume (m3/ha). |
Overstory_Raster_PineVol |
raster | Rasterized overstorey pine volume (m3/ha). Used in the analysis for spatial extraction of pine volume at survey points. |
UNDERSTOREY_PINE |
MultiPolygon | Polygons delineating forest stands where pine species occur in the understorey (151,469 features). Attribute: pine volume (m3/ha). |
Understory_Raster_PineVol |
raster | Rasterized understorey pine volume (m3/ha). |
Pine volume is measured in cubic metres per hectare (m3/ha) and represents the estimated standing volume of pine (Pinus spp.) within each stand or raster cell.
File: MPB_SSI_gdb.zip
Description:
Geodatabase (.gdb) containing Stand Susceptibility Index (SSI) polygon layers for Alberta, provided by Alberta Agriculture and Forestry. The SSI (Shore & Safranyik 1992) integrates pine volume, stand age, and percentage of pine within each stand to produce an index of vulnerability to mountain pine beetle attack.
Coordinate Reference System: NAD83 / Alberta 10-TM (Forest) (EPSG:3400).
Layers:
The geodatabase contains three polygon layers, one for each assessment year:
MPB_SSI_2008MPB_SSI_2016MPB_SSI_2023
Each layer contains the following attributes:
| variable | type | description |
|---|---|---|
SSI |
float | Stand Susceptibility Index (unitless; range 0–100). Higher values indicate stands more susceptible to MPB attack based on pine volume, age, and stand composition. |
CF |
float | Climate Factor (unitless; range 0–1). Represents climatic suitability for MPB based on temperature regimes. Values near 1 indicate suitable climatic conditions. |
SSI_CF |
float | Climate-adjusted susceptibility: the product of SSI and CF. Integrates stand susceptibility with climatic suitability into a single index. |
Code/software
All analyses performed using the R Programming and Statistical Environment (v 4.5.1). All code required to run the analyses is available from https://github.com/FOR-CAST/r-values. Additional data from open data sources are downloaded and extracted as part of the analysis workflow.
-
Prerequisites:
a. install a suitable Java Runtime Environment following instructions at https://github.com/CWFC-CCFB/J4R/wiki#requirements
-
Clone the repository:
git clone https://github.com/FOR-CAST/r-values -
Install required packages to project library:
renv::restore() -
Install PhantomJS:
webshot::install_phantomjs()
References
Alberta Agriculture and Forestry (2020) Mountain pine beetle detection and management in Alberta. Updated January 31, 2023. https://open.alberta.ca/dataset/1b872329-6f35-4c11-9ee8-ec35976f4631/resource/3569fff2-b385-4d5e-889f-8192e725b558/
Bleiker, K.P. (2019). Risk assessment of the threat of mountain pine beetle to Canada's boreal and eastern forests. Natural Resources Canada, Canadian Forest Service, and the Canadian Council of Forest Ministers Forest Pest Working Group, Victoria, BC.
Cullingham CI, James PM, Cooke JE, and Coltman DW (2012) Characterizing the physical and genetic structure of the lodgepole pine × jack pine hybrid zone: mosaic structure and differential introgression. Evolutionary Applications 5: 879–891.
Shore, T.L. & Safranyik, L. (1992). Susceptibility and risk rating systems for the mountain pine beetle in lodgepole pine stands. Pacific Forestry Centre, Victoria, BC.
