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
110205
212246
31122?
413??

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