Research Design Guide

Preseason Moisture, Wildfires, and Smoke

Byeong-Hak Choe

SUNY Geneseo

November 2, 2026

🎯 Research Question

Geographic coverage

Forecast geography

Define the forested provinces and territories before estimating models. Use consistent geographic units across the study period.

Smoke-source geography

Smoke can arrive from outside a selected fire region. Compare source-province evidence across episodes rather than assuming one source region for every year.

  • Pool NT + NU when a consistent historical unit is needed across the creation of Nunavut in 1999.
  • Document the geographic definition used for each research link.
  • Report sensitivity to reasonable alternative regional definitions.

Smoke-burden measures

Variable in canadian_dominated_summary.csv What it measures
pop_share_any_gt15_ca Share of residents in a county with at least one Canadian-dominated day above 15 µg/m³
days_gt15_ca_per_capita Canadian-dominated days above 15 µg/m³ for the average resident
read_csv("wildfire_data/clean/canadian_dominated_summary.csv") |>
  filter(year == 2023, region %in% c("Northeast", "Mid-Atlantic")) |>
  select(region, pop, person_days_gt15_ca,
         days_gt15_ca_per_capita, pop_share_any_gt15_ca)

Person-days divided by the population denominator gives days per resident. Report the measure and denominator rather than treating population coverage and duration as interchangeable.

Forecast use and benchmarks

The smoke threshold

The course measure applies 15 µg/m³ to the smoke component. It is not a measure of total ambient PM2.5.

Describe Canadian-dominated county-days as the documented attribution proxy, rather than direct proof of smoke origin or inhaled exposure.

A decision supported by the forecast

Specify a user, such as an air agency or school district, and the decision that could change before the fire season.

Compare against existing seasonal outlooks and a training-only climatology. State the lead time and the information available at that time.

📚 Literature

Literature for forecasting and smoke exposure

Debate Start with Connection to the design
Is 2023 an outlier or a changing fire regime? Jain et al. (2024) Drivers of the record season
Do low snowpack and early melt lengthen the season? Westerling et al. (2006); Hanes et al. (2019) Snowmelt timing and season length
Dryness or temperature? Abatzoglou and Williams (2016) Fuel aridity and burned area
Is the Drought Code a seasonal predictor? Van Wagner (1987) Fire Weather Index components and moisture accumulation
What is at stake downwind? Zhang et al. (2025) U.S. smoke burden

For each paper, record its design, data, finding, and relevance to a specific analysis choice.

Predictor overlap and winter moisture

Correlated predictors

Temperature and moisture predictors can overlap. Forecast evaluation asks whether they improve held-out predictions; it does not turn their individual coefficients into causal effects.

The Drought Code’s winter

Operational Drought Code procedures use a spring restart and an overwintering adjustment. Check the exact product’s treatment of winter before interpreting an additional snow variable (Van Wagner 1987).

Contribution statement

Identify what the existing literature forecasts, at which spatial scale and lead time. Establish any claimed gap through the literature review rather than assuming that the proposed analysis is new.

🗂️ Data

Data documentation

Source Metadata to record
ERA5-Land Licence, variables, resolution, access date; cite Muñoz-Sabater et al. (2021)
CanSWE Version, coverage, and end year; cite Vionnet et al. (2021)
NBAC Release, geographic coverage, and date definitions
CSU smoke Exact releases and the years supplied by each
Course tables Their inputs and the course data guide as the provenance record

Analysis units

Link 1 is a province × year panel; Link 2 is a region × year series. County-day smoke files are inputs to those analyses.

NBAC area and timing

burned_area_may_sep_ha

The area of fires that started in May–September

A different quantity

The area that burned during May–September would require a different temporal measurement.

  • Consider total burned_area_ha as a forecast outcome.
  • Use the May–September-start version for an explicitly defined sensitivity check.
  • Document the NT + NU aggregation and the NBAC release.

Starter code: the province-year fire panel

library(tidyverse)

nbac <- read_csv("wildfire_data/clean/nbac_province_year_1972_2025.csv")

stopifnot(nrow(nbac) == 13 * 54,                         # supplied course export
          !anyDuplicated(nbac[c("prov_abbr", "year")]),  # one row per province-year
          !anyNA(nbac))                                  # check documented zeros

fire_panel <- nbac |>
  mutate(prov = if_else(prov_abbr %in% c("NT", "NU"), "NT+NU", prov_abbr)) |>
  summarise(burned_ha         = sum(burned_area_ha),
            burned_may_sep_ha = sum(burned_area_may_sep_ha),
            .by = c(prov, year)) |>
  filter(year >= 1989) |>
  mutate(log_ba = log1p(burned_ha))

Twelve units × 37 years gives 444 province-years for 1989–2025 before predictor-related exclusions. Audit the actual estimation sample after joins.

Dataset roles

Link 2 outcome

person_days_gt15_ca, from the course region-year summary of Canadian-dominated smoke built on CSU

Robustness evidence

  • Childs smoke, within its coverage
  • HMS plumes
  • EMBER, within its coverage

Include only with a defined role

  • Ozone
  • U.S. county weather tables
  • Other environmental covariates

Each dataset should supply a defined variable or validation check. Distinguish the smoke outcome from contextual and robustness data.

Efficient data acquisition

An existing Drought Code product

Copernicus supplies ERA5-based historical fire-danger indices, including Canadian Fire Weather Index components (Vitolo et al. 2020).

Check the selected product’s version, coverage, and date convention before constructing a pre-season predictor.

A small moisture extract

Begin with a documented snapshot or monthly summary of snow, precipitation, and soil moisture for a small region and period.

Label monthly averages as monthly averages. Add daily snow-off dates only after the smaller workflow is checked.

Keep API keys outside shared files and repositories. Record source versions and the exact queries used.

Averaging grid cells to provinces

\[ \bar{x}_{p,y} = \frac{\sum_{g \in p} w_g \, x_{g,y}}{\sum_{g \in p} w_g} \]

\(x_{g,y}\): a moisture variable in grid cell \(g\) and year \(y\); \(p\): province; \(w_g\): the cell’s weight

  • Define the forested geographic domain before aggregation.
  • Consider forest-area weights, or historical burned-area weights defined outside the evaluation sample.
  • Document exclusions and the treatment of cells without a defined snow-off date.
  • Report the coverage represented by the retained cells.

Data audit and interpretation

Documented features

  • Preserve valid negative modeled estimates in the full CSU series.
  • Use the documented definitions for thresholded smoke-burden summaries.
  • Record the population year and the releases supplying each smoke year.

Checks on new predictors

  • Compare ERA5-Land snow estimates with CanSWE stations over their overlap.
  • Inspect missingness by month and geography.
  • Check the chosen CanSWE version’s end year.
  • Verify observation units, keys, and sample losses at every join.

📊 Figures and Maps

Descriptive figure design

  • State whether a measure represents fires that started in a period, seasonal burned area, smoke estimates, or thresholded burden.
  • Label dates, units, geographic scope, and source releases.
  • Display the annual sample size and identify influential years.
  • Examine sensitivity to the selected source region and extreme seasons.
  • Match uncertainty summaries to a small annual sample and any tied values.
  • Produce the figure from a reproducible script.

Source provinces during selected episodes

episodes <- read_csv("wildfire_data/clean/smoke_episodes_2006_2025.csv") |>
  filter(region == "Mid-Atlantic", canadian_dominated,
         year %in% c(2010, 2021)) |>
  mutate(window_start = start_date - 3)          # illustrative transport window

firms <- read_csv("wildfire_data/clean/firms_canada_province_day_2003_2024.csv")

firms |>
  inner_join(episodes, by = join_by(between(local_date, window_start, end_date))) |>
  summarise(frp_mw = sum(frp_total_mw), .by = c(year, prov_abbr)) |>
  mutate(share = frp_mw / sum(frp_mw), .by = year) |>
  arrange(year, desc(share))

A daily FRP sum combines satellite snapshots; it is not an energy total. Check whether episode windows overlap and whether the selected source region captures the relevant fire activity.

A moisture and burned-area figure

Illustrative code after constructing and auditing a province-year predictor table:

# predictors: a checked province-year table
link1 <- fire_panel |>
  left_join(predictors, by = c("prov", "year"))

link1 |>
  ggplot(aes(dc_may31, log_ba, color = prov)) +
  geom_point(alpha = 0.7) +
  geom_smooth(aes(group = 1), method = "lm", formula = y ~ x,
              se = FALSE, color = "grey30") +
  labs(x = "Drought Code on May 31",
       y = "log(1 + burned area, ha)",
       color = NULL)

Exploratory evidence

A scatterplot helps inspect scale, coverage, and influential observations. Forecast skill still requires evaluation on held-out years.

A two-panel map

Panel (a): burned area by province. Panel (b): documented county-level smoke-burden measures for the same example year.

library(sf)

provinces <- st_read("wildfire_data/clean/canada_provinces_2021.gpkg", quiet = TRUE)

provinces |>
  left_join(filter(nbac, year == 2023) |> select(prov_abbr, burned_area_ha),
            by = "prov_abbr") |>
  ggplot() +
  geom_sf(aes(fill = burned_area_ha / 1e6), color = "white", linewidth = 0.2) +
  scale_fill_viridis_c(name = "Burned area, 2023\n(million ha)") +
  coord_sf(crs = st_crs(3978)) +
  theme_void()

For panel (b), follow the course data guide’s definitions and combine the required full smoke series, attribution information, and county boundaries. Keep an unmatched observation distinct from a documented zero.

📐 Models and Validation

Baselines and model comparison

Model What it uses
B0 · Climatology Each province’s mean log burned area over the training years
B1 · Persistence Last year’s log burned area
M1 · Preseason linear model B0 plus documented moisture features available by the forecast date
M2 · Machine learning Lasso (glmnet) for correlated moisture predictors; random forest (ranger) as a nonlinear comparison

Outcome

Consider log(1 + burned area), with an explanation of how the transformation changes the prediction target.

Severe season

A province-specific severe-season threshold should be defined using training data and then applied to the held-out observations.

The forecast information set

JanFebMarAprMayJunJulAugSep

Potential June 1 predictors

  • Preseason snow and moisture measures
  • Spring precipitation and soil moisture
  • The Drought Code on May 31
  • Last year’s burned area

Future information

  • Realized summer temperature
  • Summer precipitation and lightning

These belong only in a clearly labeled later-information comparison, not a June 1 forecast.

Verify release lags as well as the dates the variables describe. A retrospective reanalysis experiment does not automatically establish real-time availability.

Validation across years

Leave one year out

Hold out every province in the selected year. This uses the other years for training, including later years when present.

It evaluates transfer across held-out years, rather than an operational historical forecast.

Rolling origin

Train only on years before the forecast year. Hold out every province in that year.

This more closely mimics the information available when making a forecast.

Fold construction

Keep all provinces of each test year together. Use year-based inner folds for model tuning, and fit transformations and climatologies inside each training sample.

Starter code: skill by design

skill <- function(y, yhat, yclim) 1 - mean((y - yhat)^2) / mean((y - yclim)^2)

forecast_year <- function(t, data, train_rule) {
  train <- filter(data, train_rule(year, t))
  test  <- filter(data, year == t)
  clim  <- summarise(train, clim = mean(log_ba), .by = prov)
  m1    <- lm(log_ba ~ prov + dc_may31 + swe_apr1_anom + precip_spring_anom,
              data = train)
  test |>
    left_join(clim, by = "prov") |>
    mutate(pred_m1 = predict(m1, newdata = test))
}

loyo    <- map(1989:2025, forecast_year, data = link1,
               train_rule = \(yr, t) yr != t) |> list_rbind()
rolling <- map(2000:2025, forecast_year, data = link1,
               train_rule = \(yr, t) yr < t) |> list_rbind()

bind_rows(loyo = loyo, rolling = rolling, .id = "design") |>
  summarise(skill_m1 = skill(log_ba, pred_m1, clim), .by = design)

This is a template for a checked analysis table. Define predictor timing and anomalies, handle incomplete cases explicitly, and verify that each held-out province appears in training.

Forecast metrics

\[ \text{Skill} = 1 - \frac{\text{MSE}_{\text{model}}}{\text{MSE}_{\text{climatology}}} \]

Primary metric

Skill relative to climatology on the stated outcome scale. Positive values indicate lower MSE than the baseline.

Ranking seasons

Spearman correlation between predicted and observed burned area

Severe-season probabilities

Brier score for probability forecasts, with a stated event definition

Interpretation

Correlated predictors can help forecasts while complicating coefficient interpretation. Predictive performance alone does not establish a causal effect of an individual moisture variable.

Descriptive fire-to-smoke evidence

Limits

  • A short annual series is sensitive to extreme years.
  • U.S. county wind averages do not describe the entire transport path from Canada.
  • Annual data constrain the complexity of a transport analysis.

Useful displays

  • A precisely labeled annual scatterplot
  • A table connecting source-province fire activity with regional smoke measures
  • CSU, Childs, and HMS comparisons for selected episodes

This link supplies descriptive context for downwind consequences. Keep its claims separate from the evaluated moisture-to-burned-area forecast.

🗓️ Research Workflow

Research risks and design choices

Data and evaluation risks

  • Coverage and comparability of snow and moisture products
  • A limited number of years and influential seasons
  • Differences among smoke products
  • Shared shocks across provinces

Choices to record in advance

  • Forecast date and predictor windows
  • Snow-off definition and aggregation weights
  • Training years, model tuning, and primary metrics
  • Planned sensitivity analyses

A possible workflow

Data preparation

Acquire a small documented extract, construct province-level predictors, check coverage against CanSWE, and produce a descriptive figure and map.

Baselines

Compare climatology, persistence, and the pre-season linear model using clearly distinguished year-based evaluation designs.

Descriptive context

Compare source provinces and smoke products for selected years and episodes.

Model extension

Evaluate a justified machine-learning comparison and explain whether it improves the stated metric.

Reproducible handoff

  • Document acquisition, provenance, observation units, and the intake audit.
  • Define the forecast date and information available at that date.
  • Preserve geographic consistency and report sample losses.
  • Save the figure, map, baseline comparisons, and sensitivity checks with code.
  • Support literature and data definitions with traceable sources.
  • Distinguish proposed analyses from actual executed results.

Discussion questions

Data

Which predictors and releases could have been available at the proposed forecast date?

Results

What conclusion follows if the model does not improve on climatology?

Policy

Which decision could change because of an early-season forecast, and what evidence would justify that change?

References

Abatzoglou, John T., and A. Park Williams. 2016. “Impact of Anthropogenic Climate Change on Wildfire Across Western US Forests.” Proceedings of the National Academy of Sciences 113 (42): 11770–75. https://doi.org/10.1073/pnas.1607171113.
Hanes, Chelene C., Xianli Wang, Piyush Jain, Marc-André Parisien, John M. Little, and Mike D. Flannigan. 2019. “Fire-Regime Changes in Canada over the Last Half Century.” Canadian Journal of Forest Research 49 (3): 256–69. https://doi.org/10.1139/cjfr-2018-0293.
Jain, Piyush, Quinn E. Barber, Stephen W. Taylor, et al. 2024. “Drivers and Impacts of the Record-Breaking 2023 Wildfire Season in Canada.” Nature Communications 15: 6764. https://doi.org/10.1038/s41467-024-51154-7.
Muñoz-Sabater, Joaquín et al. 2021. “ERA5-Land: A State-of-the-Art Global Reanalysis Dataset for Land Applications.” Earth System Science Data 13 (9): 4349–83. https://doi.org/10.5194/essd-13-4349-2021.
Van Wagner, C. E. 1987. Development and Structure of the Canadian Forest Fire Weather Index System. Forestry Technical Report No. 35. Canadian Forestry Service.
Vionnet, Vincent, Colleen Mortimer, Mike Brady, Louise Arnal, and Ross Brown. 2021. “Canadian Historical Snow Water Equivalent Dataset (CanSWE, 1928–2020).” Earth System Science Data 13 (9): 4603–19. https://doi.org/10.5194/essd-13-4603-2021.
Vitolo, Claudia et al. 2020. “ERA5-Based Global Meteorological Wildfire Danger Maps.” Scientific Data 7: 216. https://doi.org/10.1038/s41597-020-0554-z.
Westerling, A. L., H. G. Hidalgo, D. R. Cayan, and T. W. Swetnam. 2006. “Warming and Earlier Spring Increase Western U.S. Forest Wildfire Activity.” Science 313 (5789): 940–43. https://doi.org/10.1126/science.1128834.
Zhang, Qiang, Yuexuanzi Wang, Qingyang Xiao, et al. 2025. “Long-Range PM2.5 Pollution and Health Impacts from the 2023 Canadian Wildfires.” Nature 645 (8081): 672–78. https://doi.org/10.1038/s41586-025-09482-1.