1 of 11

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

2 of 11

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.

3 of 11

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.

4 of 11

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.

5 of 11

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.

6 of 11

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.

7 of 11

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

8 of 11

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

9 of 11

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.

10 of 11

ARCHITECTURE · UPSTREAM

Pipeline Architecture · ACCIDDA/USImmunityProfiles

• Submitted as PR to ACCIDDA/USImmunityProfiles/docs (issue #146)  

• Merged into the ACCIDDA/USImmunityProfiles repo�

11 of 11

HANDOFF

What’s Left

Thank you

Carl Pearson

David Stotts

Louie Lu

Claire Smith

Johns Hopkins collaborators

Questions?