SPPH604-2026W

SPPH 604 — In-class lecture slide plans (Weeks 1–7)

Slide-by-slide blueprints (not finished decks) for the weekly class session. Weeks 2–7 run Tuesday 9:30 am–12 pm (150 minutes), ahead of that week’s Thursday lab (10 am–12 pm), so the lecture and lab feel continuous. Week 1 is the exception: there is no Tuesday session and no lab — the course opens with a two-hour Thursday session (Sept 10, 10 am–12 pm, by Zoom). Each lecture teaches the concept and theoretical issue of the demonstration paper (MASLD / NHANES, Kueh et al., BMJ Open 2026) before students go into that week’s lab.

Every plan has the same shape:

The seven weeks

Week Lecture Feeds lab Feeds increment
1 Course intro + procedures (+ 1 paper teaser) — (setup) begins M0 shortlisting
2 NHANES data sources; reading Methods critically L1 Data wrangling M0 shortlist
3 Cohort construction — FLI, MASLD criteria, eligibility L2 Analytic data P1 eligibility (M0 locked)
4 Confounding & DAGs; Table 1; variable roles L3 Confounding P2 Table 1
5 Interaction & effect modification L4 Interaction P3 effect modification
6 Complex survey design (weights/strata/PSU) L5 Survey analysis P4 design-aware estimate
7 Missing data (MCAR/MAR/MNAR; MI) L6 Missing data P5 missing-data sensitivity

Design notes

Checking the timings

Each plan states its own total on its Duration: line. That line is the claim; this is the check, and it re-derives all seven weeks at once whenever a plan is retimed (Git Bash, from the repo root):

python -c "import re,glob;P=re.compile(r'(?m)^(?:\#\#\s.*?\(~?(\d+) ?min\)|\s*[-*]\s*\(?~?(\d+) ?min\)?\.?\s*$|\s*\d+\.\s.*?\((\d+) min\))');[print(f,sum(int(x) for m in P.finditer(open(f,encoding='utf-8').read()) for x in m.groups() if x)) for f in sorted(glob.glob('lectures/Week*.md'))]"

Read each total against that week’s cap — 120 for Week 1, 150 for Weeks 2–7. Only what the command matches counts as a marker: minutes written into a plan’s prose are not part of the budget, so a total counted by eye can come out higher than the real one. A week over its cap owes a trim in its own file, not a footnote here. This README publishes no table of the current totals on purpose — it would be a frozen snapshot of seven files it does not own, and stale the first time one of them is retimed.

Reading the demonstration paper (bmj_open_revealjs/)

A standalone reveal.js deck that decomposes the paper’s published aim into a PECOT question, states how MASLD was actually ascertained (the Fatty Liver Index, not imaging), and lists every NHANES variable the study uses beside the component file it comes from. Intended to be worked through before L1.

Open it at ehsanx.github.io/SPPH604-2026W/lectures/bmj_open_revealjs/.

Built decks (slides/)

The plans have been turned into finished Quarto revealjs decks in slides/ — one .qmd per week plus a self-contained rendered .html (open in any browser; arrow keys to navigate, S for speaker notes, F for fullscreen). Each deck has a title slide, objectives, a continuity slide, the plan’s content slides with MASLD running-example callouts, and detailed speaker notes (timings + teaching prompts) under each slide. The Kaplan–Meier figure is embedded on the weeks that discuss the survival result (2, 5, 6). Each .html is the rendered form of the .qmd beside it, so present from the .html and treat the .qmd as the source. If you adapt a deck, change the .qmd and re-render it with Quarto rather than editing the .html. From this directory:

quarto render slides/Week5_interaction_slides.qmd

img/ holds the embedded figures. The two reproduction figures (figure1_km.png, figure2_rcs.png) are copied from reproduction/output/figures/; the w4–w7 lecture figures accompany the lecture analyses.