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.
| Approach | Behaviour (Fig 5, synthetic) |
|---|---|
| Shift by mean delay | Moderate 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 1Connections
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