Infections become the one shared quantity that every stream informs.
Build it in parts
One Stan model, three use_* switches — fit any subset of streams:
Each stream on its own — does it recover infections through its delay and scaling?
Link two streams — cases + deaths share one infection process
Add the third — wastewater too; infections and \(R_t\) informed by all
Stress-test — what happens when streams conflict?
What each stream buys you
Cases pin down the recent trajectory (short delay)
Deaths are uncertain near the present (long delay), but anchor the level
Together they constrain infections better than either alone
But the absolute level stays weakly identified: streams constrain infections \(\times\) scaling, not each separately. (The workflow’s identifiability arrow.)
When streams conflict
Each stream implies its own answer to “what did infections look like?”.
Streams conflict when those implied trajectories can’t both come from one \(R_t\) path:
changing ascertainment (testing policy)
mis-specified delays or scalings (e.g. drifting IFR)
genuinely different populations
Conflict distorts the joint fit
A single shared \(I\) can’t be both falling (cases, wastewater) and rising (deaths), so the model splits the difference — and \(R_t\) is faithful to no stream.
It surfaces in three linked ways:
Poor fit to one stream (posterior predictive check)
Tension in the shared infections (distorted, more uncertain)
Degraded sampling (divergences, low ESS, high rhat)
Resolving conflict
A shared latent process surfaces conflict and gives a compromise — it does not resolve it.
Genuine resolution = model the reason the streams disagree:
Diagnose, don’t average — which stream, which assumption?
Relax the offending assumption — e.g. time-varying ascertainment / IFR
Compare models — does the conflict resolve?
Down-weight or drop — last resort, only once you know why
This loop is the modelling workflow.
Your Turn
Simulate parallel streams from one shared infection trajectory
Fit each stream alone, then link them through the shared infections
Recover infections and \(R_t\) from the joint fit
Make the deaths conflict, see the joint model surface it, then resolve it by modelling the mechanism