McGough 2020 - Reporting Triangle and Chain-Ladder Setup
Summary
Reported counts form a reporting triangle : cases with onset in week reported after delay . The lower-right corner is unobserved (right truncation), and nowcasting means filling it in to recover . NobBS adapts the actuarial log-linear chain-ladder model to do this.
Overview
Delays come from onset-to-care delays, lab processing, provider reporting, and system-level processing (paper’s Introduction). Nowcasting (“predicting the present”) originated in actuarial claims reserving and was applied to AIDS in the 1980s-90s and to foodborne outbreaks. Most methods model only the delay distribution (reverse-time hazard model, chain ladder) and treat weekly counts as independent; NobBS adds temporal dependence.
Main Content
Reporting triangle
Let index the onset week (“now” is ) and the delay in weeks. is the number of cases with onset in reported with delay . At time only cells with are observed. The target is .
Right truncation
Data are right-truncated: at week , delays longer than cannot be seen, so only is known for . Counts in the latest rows are biased low unless corrected.
Log-linear chain-ladder model
The marginal cell counts follow (actuarial form, ref. 15 in the paper); NobBS drops the intercept and writes with a probability vector.
Maximum delay is set by data (dengue: weeks, since >99% of cases in the first two years were reported within 10 weeks; ILI: within a 27-week window). Cases with delay (window) are excluded, and delays up to 6 months were kept for ILI because longer delays had irregularities. Data: ~53,000 dengue cases in Puerto Rico (1992-2010, 1092 weeks; onset by clinician vs lab-report completion) and 2.77 million ILI cases from ILINet (3.75 years, 196 weeks; delay = week of care-seeking to week posted in FluView).
Examples
A small triangle
With , and “now” = week 4, the observed cells satisfy (illustrative numbers):
onset 1 10 20 5 2 12 24 6 3 11 22 ? 4 13 ? ? Complete rows give . Row 4 has only observed, so a crude chain-ladder scale-up gives , versus the naive reading of 13 (a spurious “collapse”). NobBS does this probabilistically and borrows strength from adjacent weeks through the random walk.
Connections
PyMC sketch of the same structure (untested):
# n_obs[t, d] observed where t + d <= T; mask the rest
import pymc as pm, numpy as np
with pm.Model():
beta = pm.Dirichlet("beta", a=np.full(D+1, 0.1))
tau = pm.Gamma("tau", 0.01, 0.01)
alpha = pm.GaussianRandomWalk("alpha", sigma=1/pm.math.sqrt(tau), shape=T)
lam = pm.math.exp(alpha[:, None]) * beta[None, :]
pm.Poisson("n", lam[obs_mask], observed=n_obs[obs_mask])See Also
McGough 2020 - Nowcasting by Bayesian Smoothing - Overview · McGough 2020 - NobBS Model and Priors · Survival Analysis · Missing Data Models