Investigating Wildfire Smoke and Air Quality in the DMV Using MATLAB and EPA Data

Nakul Karle, Howard University, NOAA Cooperative Science Center in Atmospheric Sciences and Meteorology
Author Profile
Initial Publication Date: October 6, 2026
DOI | Cite this

Summary

How does fine particulate matter (PM₂.₅) air pollution change over time, and what can observations tell us about a wildfire smoke episode?
In this classroom activity, students use MATLAB to retrieve and analyze 2023 U.S. Environmental Protection Agency (EPA) PM₂.₅ observations from a selected monitoring station in the Washington, D.C.–Maryland–Virginia (DMV) region. McMillan serves as a worked example since it is right next to the Howard University Campus, with options to investigate other regional sites. Students create annual and Summer time-series plots, identify the highest observed daily concentration in June, and compare it with the mean of available daily observations in May. They interpret satellite imagery and event context to examine evidence for regional smoke transport. A guided MATLAB Copilot exercise asks students to explain and independently check a date filter. Designed for students with little or no programming experience, the activity uses scaffolded code and individual work across two 50-minute sessions. Each student submits a MATLAB Live Script containing code, figures, calculations, and short evidence-based explanations.

Share your modifications and improvements to this activity through the Community Contribution Tool »

Learning Goals

By the end of the activity, students will be able to:

1. Run provided MATLAB code to retrieve EPA observations and identify the selected monitoring site, dates, units, and daily averaging period.
2. Create and label annual and June PM₂.₅ time-series plots, recognizing missing observations and the limits of a single monitoring location.
3. Calculate the highest observed June daily concentration and its date, the May available-day mean, and their ratio; explain the distinction between a daily peak and a monthly reference mean.
4. Combine ground observations with satellite imagery and event information to support an explanation of an air-pollution episode, while distinguishing observations from causal interpretation and recognizing differences in spatial and temporal coverage.
5. Use MATLAB Copilot to explain a short code section, then independently verify the explanation using specific date-boundary examples.

MATLAB makes the retrieval, selection, calculation, and visualization steps repeatable. Its Live Script format brings code, figures, and student explanations into one record. Higher-order skills include evaluating evidence, selecting and interpreting comparisons, recognizing limitations, and checking AI-generated explanations. Students also practice concise scientific writing and documentation of computational work.

This activity also lays the groundwork for student-designed air-quality projects. Students can build on the MATLAB workflow to investigate other locations, time periods, or pollutants such as ozone and nitrogen oxides (NOₓ), checking data availability, units, and averaging periods before making comparisons. These extensions encourage students to formulate their own research questions and use environmental observations to develop evidence-based explanations.

Context for Use

This activity is designed for early undergraduate students in an introductory environmental science course at Howard University, a historically Black research university. It draws on the instructor's research in air quality, the atmospheric boundary layer, and remote sensing, as well as experience teaching Introduction to Environmental Sciences and Global Climate Change. It can also be adapted for introductory atmospheric science or remote sensing courses.

Students work individually during two 50-minute classroom sessions. The anticipated class size is 20–25 students. Each student needs a laptop/computer, internet access, and access to MATLAB and MATLAB Copilot. MATLAB Online is the intended environment. The activity fits after an introduction to air pollutants and atmospheric transport, or within a unit on air quality, environmental observations, or wildfire impacts.

Students should be able to read a graph and understand averages, ratios, and units of measurement. No previous MATLAB programming experience is required. Short demonstrations introduce running code sections, inspecting tables, selecting dates, and labeling figures. The familiar regional setting provides a concrete reason to learn these skills. Instructors can adapt the activity to other locations after checking station coverage, measurement definitions, and appropriate event evidence.

No prior MATLAB coding skills are required. Students need basic computer and browser skills and should confirm that they can sign in to MATLAB Online before class. The activity introduces running Live Script sections, understanding variables and tables, filtering dates, and producing simple plots. The instructor provides the data-retrieval and monitor-selection code.

Description and Teaching Materials

The activity begins with the question, "How does PM₂.₅ pollution change over time in the DMV region?" Students predict possible patterns before examining the data. They choose from a small set of monitoring sites with checked 2023 data coverage: McMillan and River Terrace in Washington, D.C.; HU-Beltsville and Rockville in Maryland; and Springfield Near Road in Virginia. McMillan provides the instructor's worked example. Each student analyzes one site; a second-site comparison is an optional extension.

Session 1: Retrieve and visualize observations. An opening MATLAB map shows the eight supported stations using coordinates from EPA records. Students locate and choose a station and enter its name in the analysis setting; the map is a curated selection, not an inventory of every regional EPA station. The instructor introduces the MATLAB Live Script environment and demonstrates how to run a code section. Students use provided code to download EPA's national daily PM₂.₅ file and retain their selected site's records before table import. The code specifies variable types and monitor/method combinations and retains event-inclusive summaries. Students inspect dates, units, and data coverage, then create an annual time-series plot. They make a small purposeful edit to a label or title and describe one feature of the record. Each student saves the Live Script for the next session.

Session 2: Investigate and explain June observations. Students resume their work and create a June plot. They ask MATLAB Copilot to explain the date filter, record their prompt and a short response summary, and independently check whether June 1, June 30, and July 1 are included. Students then calculate June's maximum daily mean and its date, May's mean of available daily observations, and the peak-to-May-mean ratio. They report the available-day count rather than treating missing days as zero. An eight-minute satellite interpretation examines regional smoke evidence alongside the ground time series. Students finish with a short explanation supported by a numerical result, their plots, and appropriate event evidence, including one limitation.

The planned student submission is one Live Script containing the code, two figures, calculations, and written responses. The analysis could also be implemented in Python or R. MATLAB is selected here for its integrated Live Script environment and built-in data and plotting capabilities, with Copilot used for a bounded explanation-and-verification exercise.

Current material status: The core McMillan workflow has been tested during development in MATLAB Online. A preliminary reviewer package now includes a sectioned student MATLAB script (.m), a retrieval helper, raw EPA backup extracts for eight DMV sites, instructor guidance, site-specific reference results, a rubric, satellite prompts, and a reviewer check script. The instructor has confirmed the map, all eight station checks, and the consolidated script in MATLAB Online, including successful Live Script execution after correcting a folder lookup. The tested .mlx with saved outputs is now included in the reviewer ZIP. The instructor confirmed that outputs persisted after closing and reopening the Live Script. We independently checked data selections and reference statistics against the EPA snapshot.


DMV Air Quality Activity: MATLAB Live Script, EPA Data, and Teaching Materials (Zip Archive 273kB Sep30 26)



Teaching Notes and Tips

Begin with the environmental question and use short, guided code sections. Students should not need to write a data-download routine from scratch. Confirm MATLAB Online and Copilot access before class, and prepare a source-data backup and an equivalent non-AI explanation exercise for service interruptions.

Import only the selected site's records as a table. During development, importing the entire national table was impractical in the tested workflow; text prefiltering reduced the load. Set numeric and text column types explicitly because initially blank fields can be misclassified. Use explicit figure and axes handles to ensure date limits apply to the intended plot. Provide a Session 2 setup section that restores required variables without assuming the previous workspace persists.

EPA files can contain multiple monitor, method, duration, and event-summary records for the same date. Retain a documented, consistent daily series and avoid double-counting. Apply EPA's method-specific guidance, including the T640 corrections where relevant. Represent missing dates as gaps, not zero concentrations, and report the number of available days used in averages. Compare sites on matched dates if students undertake the optional extension.

Emphasize that a peak-to-May-mean ratio compares different temporal summaries. May is a nearby reference period, not an established smoke-free baseline. Students should also avoid assuming that every DMV site has the same peak date. For example, Rockville's highest June value in the checked data occurs later in June. The June 7 satellite image supports investigation of the early-June episode; it is not direct evidence about every later peak. The visible image provides spatial context but cannot alone quantify surface PM₂.₅ or plume height. An optional discussion can connect elevated versus near-surface smoke to the instructor's boundary-layer expertise without claiming that this dataset measures mixing-layer depth.

The activity has not yet been classroom-tested. Allow short checkpoints for interpretation and reserve implementation feedback for revising the final timing and scaffolding.


Assessment

Students submit an individual MATLAB Live Script with executed code, annual and June plots, the peak/date and May comparison, short scientific interpretations, and a documented Copilot explanation/check. A ten-point rubric awards three points for correct data selection and labeled plots, three for calculations and interpretation, two for combining ground and satellite evidence with a stated limitation, and two for documenting and independently checking Copilot assistance.

Formative checks include an initial prediction, inspection of units and dates, the annual-plot exit response, and the date-filter boundary check. Full credit does not require code written from scratch or a second monitoring site. Instructors use reference values for the student's chosen station, accept reasonable rounding, and award partial credit for correct reasoning despite a minor upstream error. The final explanation should distinguish a measured concentration change from evidence about its cause.

References and Resources

- EPA AirData pre-generated files:https://aqs.epa.gov/aqsweb/airdata/download_files.html — official source for the national daily PM₂.₅ observations.
- 2023 PM₂.₅ daily file:https://aqs.epa.gov/aqsweb/airdata/daily_88101_2023.zip — the parameter-88101 archive downloaded by the MATLAB code.
- EPA AirData file definitions:https://aqs.epa.gov/aqsweb/airdata/FileFormats.html — explains monitor identifiers, summary fields, averaging periods, and event inclusion.
- EPA PM₂.₅ data advisory:https://aqs.epa.gov/aqsweb/airdata/Data_Advisory_PM25_88101_Pregen_Files.pdf — guides selection of updated T640/T640X observations rather than original uncorrected versions.
- NASA Earth Observatory, "Smoke Smothers the Northeast" (June 8, 2023):https://science.nasa.gov/earth/earth-observatory/smoke-smothers-the-northeast-151433/ — includes June 7 GOES-16 imagery and regional event context. Use the satellite image, distinguish its observation date from the article date, and retain its credit.
- NOAA NESDIS, "NOAA Satellites Tracked Historic Levels of Harmful Smoke, Impacting Millions in the Eastern U.S." (June 20, 2023):https://www.nesdis.noaa.gov/news/noaa-satellites-tracked-historic-levels-of-harmful-smoke-impacting-millions-the-eastern-us — contextualizes smoke progression into the Mid-Atlantic and distinguishes satellite-derived estimates from surface observations.
- MathWorks, MATLAB Copilot Basics:https://www.mathworks.com/help/matlab-copilot/ug/set-up-matlab-copilot.html — guidance on the assistant used for the code-explanation exercise.