Gostic 2020 - Rt Estimation Pipeline and Right-Truncation Bias

Summary

Observations at time reflect infections at , so needs (1) inferring the infection series from delayed observations and (2) adjusting for right truncation of recent data. Backward convolution blurs and shifting lags; deconvolution or a joint forward observation model is best; ignoring truncation produces a spurious “epidemic is ending”.

Overview

If is the delay from infection to observation, observations at time inform (Fig 4). Sampling a delay and subtracting it from each observation time equals convolving with the reversed delay distribution.

Main Content

Forward delay convolution

Observed counts , with the infection-to-observation delay pmf. The forward kernel spreads infections incident on one day across many days of observation; recovering needs deconvolution.

Why backward convolution fails (S3 Fig)

For 1,000 people infected at the same time, observation time is with random: a forward convolution. Subtracting a sampled repeats the convolution backward, so variance becomes rather than 0. Shifting by adds no variance (preferred if the mean is exact) but does not remove the blur.

ApproachBehaviour (Fig 5, synthetic)
Shift by mean delayModerate accuracy if delay short and mean known; leaves a gap of days at the end; ignores variability
Backward convolution (sample and subtract)Least accurate: over-smooths peaks and valleys, delays detection of changes, strongly under-counts the last days
Deconvolution (e.g. backprojNP, ML)Recovers peaks/valleys best; sensitive to delay misspecification and stopping rule; hard to get uncertainty; the only one adjusting for truncation
Joint model with forward delays (EpiNow2, latent infections)Propagates uncertainty; can pool cases, hospitalisations and deaths

Errors grow with delay variance (deaths worse than onset). Observations nearer infection (symptom onset) allow closer-to-real-time .

Right truncation (epidemic series)

Recent infections are missing because not yet reported, so the latest counts look artificially low. Options: drop the last few days or flag them; or adjust using past reporting delays (nowcasting, McGough 2020 - Reporting Triangle and Chain-Ladder Setup). Both steps interact: errors in one amplify the other.

Examples

Spurious wave end

A growing epidemic whose latest 4 days have only 40-80% reported: unadjusted counts flatten or fall, Cori reports on the final days. Correct with where is the reporting CDF (chain-ladder scale-up), or a Bayesian nowcast. E38 in the PyMC set reproduces exactly this failure on German hospitalisation data.

import numpy as np
f=np.array([.2,.3,.25,.15,.1]); F=f.cumsum()      # reporting pmf and CDF by lag
T=20; true=100*1.1**np.arange(T)                  # growing true infections
# fraction observed at time T for onset day t is F[min(T-1-t,4)]
frac=np.array([F[min(T-1-t,4)] for t in range(T)])
seen=true*frac
print(np.round(seen[-6:]/true[-6:],2))             # truncated tail looks like a decline
print(np.round((seen/frac)[-6:]/true[-6:],2))      # adjusted: ratio 1

Connections

Forms the pipeline: nowcast incidence (McGough 2020 - NobBS Model and Priors) → renewal (Gostic 2020 - Instantaneous vs Case Reproductive Number and the Three Estimators). A latent-infection model with forward delays is a state-space model (Linear-Gaussian State-Space Models).

See Also

Gostic 2020 - Practical Considerations for Measuring Rt - Overview