COMP 523 · MEASLES/IMUGAP TEAM · SPRING 2026
Semester Recap for ACCIDDA
CLI wrapper · measles dashboard · Power BI POC · pipeline architecture
Weston Voglesonger · Joshua Chen · Minjae Kung · Kelly Zhen
April 24, 2026
SCOPE
What Carl Proposed
1
CLI wrapper
Wrap ACCIDDA’s existing R/Stan imuGAP model so collaborators can run it intuitively with a consistent interface.
2
Power BI POC
Prove imuGAP outputs can flow into NCDHHS's internal Power BI system.
3
Measles dashboard
Upgrade the public-facing measles vaccine coverage dashboard.
4
Pipeline architecture
Propose a standardized upstream preprocessing shape for the Hopkins-maintained USImmunityProfiles pipeline (issue #146).
Three distinct consumers of the same imuGAP output, plus an upstream architecture proposal.
DELIVERABLES
What We Delivered
imuGAP Wrapper
ACCIDDA/imuGAP
CLI, install_cli(), testthat suite, CI/CD, roxygen + pkgdown docs. Built on the existing imuGAP R/Stan package.
Power BI POC
.pbix + convert_data.py
Shape map dashboard consuming imuGAP outputs; preprocessing pipeline for NCDHHS.
Measles Dashboard
ACCIDDA/measles-dashboard
React + D3, map + sidebar layout, WCAG AA, color-safe palette. Deploys to accidda.github.io/measles.
Pipeline Architecture
ACCIDDA/USImmunityProfiles/docs
Workflow architecture document merged via PR #146. Defines the CLI boundary between state-specific upstream and state-agnostic downstream.
DELIVERABLE 1 OF 3
imuGAP CLI Wrapper
• CLI invocation: imugap <input_dir> [output_dir] for a full run
• Validation dry-run: imugap -h <input_dir> — full input validation, no model fitting
• CSV or RDS input; three required files: observations, populations, locations. Exit codes: 0 success, 1 validation, 2 model, 3 I/O.
• install_cli() ships in the R package's inst/ directory
• canonicalize_* functions validate and transform the three input tables
• Structured error handling with clear messages for malformed inputs
• roxygen documentation + pkgdown site for API reference
INPUT
Location tree · observations · population
WRAPPER
canonicalize → imuGAP model → emit
OUTPUT
fit.rds (raw stanfit object)
Built on the existing imuGAP R/Stan package. Team F contributors: Joshua Chen, Minjae Kung, Kelly Zhen, Weston Voglesonger.
imuGAP CLI, End-to-End
~/imuGAP — bash
$ R -e 'imuGAP::install_cli()'
Installed: ~/.local/bin/imugap -> .../imuGAP/scripts/imugap.R
$ imugap -h sample/
[→] Loading inputs...
[✓] Inputs loaded.
[→] Validating schema...
[✓] Schema validated.
[✓] Validation passed.
The -h flag runs full input validation without invoking the sampler. A real run with imugap sample/ takes several hours and produces fit.rds.
IMUGAP · ENGINEERING
CI/CD and Maintainability
GitHub Actions
R-CMD-check matrix on ubuntu-latest and macos-latest, with Stan compilation cached between runs. Runs on every push and pull request.
Fast E2E fixture test
One county, one day of data in inst/ keeps CI under a few minutes — the full model takes ~12 hours.
Unit tests
testthat coverage on the canonicalization and CLI layers.
pkgdown auto-build
API reference site rebuilds on every merge to main.
Already in ACCIDDA/
All code lives in ACCIDDA/imuGAP from day one — no ownership transfer required.
What we built keeps working after we leave.
DELIVERABLE 2 OF 3 · BEFORE
Measles dashboard — original
Live demo: accidda.github.io/measles-dashboard (pre-redesign build)
PAIN POINTS
• Hover-only tooltips — no persistent detail; fails on touch devices
• Dots too small to click accurately
• Page scrolls — map and legend can't be seen together
• Color palette not WCAG AA; not color-blind safe
• No county-level drill-down
DELIVERABLE 2 OF 3 · AFTER
Measles dashboard — redesigned
IMPROVEMENTS
• Map + sidebar layout — no scrolling; everything visible at once
• Click county → full school list in sidebar
• Hover school name → that dot highlights, others dim to 50%
• ColorBrewer2 color-safe palette · WCAG 2.1 AA
• Static React build; GitHub Actions → GitHub Pages
DELIVERABLE 3 OF 3
Power BI Proof-of-Concept
• Interactive Shape Map colored high/medium/low risk
• County-level and school-level slicers; zoom to individual schools
— Display two different coverage estimates side-by-side
— Display grade-level coverage estimates
• Preprocessing via convert_data.py:
A python script converts raw geographic and dashboard data
into structured files for Power BI
dashboard.json + data.geojson →
measles_flat.csv + schools_coords.csv (nc_counties_topo1.json)
• Delivered as .pbix file (UNC student Outlook lacks Power BI Pro — ACCIDDA republishes in its own tenant)
Power BI screenshot�(.pbix — NC county coverage map)
Closes the loop on the original NCDHHS “hello world” ask from February.
ARCHITECTURE · UPSTREAM
Pipeline Architecture · ACCIDDA/USImmunityProfiles
• Submitted as PR to ACCIDDA/USImmunityProfiles/docs (issue #146)
• Merged into the ACCIDDA/USImmunityProfiles repo�
HANDOFF
What’s Left
Thank you
Carl Pearson
David Stotts
Louie Lu
Claire Smith
Johns Hopkins collaborators
Questions?