This document is a collection of mathematical definitions for some of commonly (and not so) model components that may be included in the model. Most of the document consists of verbose reproduction of mathematical definitions/code from the indicated source.
Eventually, it should incorporate information about the software implementation of these functions.
- Equations
- Overview
- Renewal process (from the wastewater model)
-
Reproductive number damping (from the wastewater model). This allows the time-varying reproductive number
$\mathcal{R}(t)$ to be split into two factors:
-
$\mathcal{R}^\mathrm{u}(t)$ is the unadjusted reproductive number, which evolves as a latent process. - A factor representing the effect of past infections on the current reproductive number. We constrain this factor to be non-negative, so that it can be interpreted as a damping factor. The scalar
$\gamma \geq 0$ scales the strength of this damping effect, and the function$f(\tau)$ the time-scale over which past infections influence the current time-varying reproductive number$\mathcal{R}(t)$ .
For the wastewater model
- Differenced autoregressive (from from the wastewater model). This is likely to be the "go-to" model for the latent process of the reproductive numberm and includes random walk as a special case.
- In general, other Gaussian processes for time-differences in reproductive number (from EpiNow2)
- Additional effects via a link function (from epinowcast)
Where
In our epidemiological modelling we represent connected events with delayed cause and effect as having delay distributions. Delay distributions represent the chance of paired events with a primary time
- The generation interval. This models the delay between infection time (primmary) and infectee time (secondary).
- The incubation period. This models the delay between infection time (primary) and the onset-of-symptoms time (secondary).
- The reporting delay. This models the delay between an onset time/specimen time (primary) and the reporting time (secondary).
We intend to use discrete time models, likely daily dynamics. However, delay distributions are often reported in the literature as continuous distributions, either because the underlying data was on a fine-grained scale or because of analytic convenience. Additionally, if we are making inference on these distributions rather than using literature estimates it might be more convenient to use a parametric form of a continuous distribution (e.g. a Log-Normal distribution).
Apart from user defined probability mass functions (PMFs) as in EpiSewer, creating consistent usage of discrete distributions based on associated continuous distributions is discussed by Park et al1. The approach in Park et al is to treat the continuous representation of the delay distribution as generating the discrete representation through interval censoring. Interval censoring happens when an event time (either primary, secondary or both) are only known to occur within an interval.
Most of our use-cases will use double censoring of events into days; that is both primary and secondary events are censored onto a day. In a slight abuse of notation, we can treat
Where
This equation is tricky to implement numerically for two reasons:
- In general, double integrals are numerically unstable in a number of cases.
-
$g_P$ is not specified.
One option, which was assessed as robust in Park et al, is to approximate
Which shows that, as expected, the discrete delay probability only depends on the day difference
Where
In applied modelling we need
Calculating
It is typical to also condition on the delay between infector and infectee being at least one day; that is if
The reason for this is that if we allow zero delay infections, then consistently we should also model subsequent new infections from those new infections that also happen to occur with zero delay, and so on. This leads to requiring tracking of infection generations within a single time step. If we consider same-day infection-infector events to be epidemiologically reasonable for a pathogen of interest it would be preferable to model using a shorter than daily time step.
For the discretised generation interval the pmf vector is,
The reporting delay is the random time between the time of reference of a case and the time of report when the data of that case becomes available to analysts (see Epinowcast definition).
Using epinowcast notation, for any signal our the probability that a case with reference time
Options for constructing the reporting delay PMF:
- Discretised lognormal function (see epinowcast),
distribution, with parameters
- Hazard model (see epinowcast)
The hazard of a survival model with time-varying covariates,
In the wastewater model2, the observed hospital admissions
Where
from the wastewater model the viral concentration at time
The following diagram provides a general view of the main model components and how are these connected (under development):
flowchart LR
%% Global level DGP ----------------------------------------------------------
subgraph dgp_global["Global-level DGP"]
direction TB
subgraph rt["R(t)"]
rt_elements["-Gaussian\n-AR\n-Link\n-User-def"]
end
style rt_elements text-align:left
subgraph gt["g(t)"]
gt_elements["-Log-Normal\n-Hazard\n-User-def"]
end
style gt_elements text-align:left
end
rt ~~~ gt
%% Local level DGP -----------------------------------------------------------
it(("I(t, j)\nLatent Cases\nat j"))
subgraph i0["I(0, j)"]
i0_elements["-Exp. growth\n-Single param\n-Random walk."]
style i0_elements text-align:left
end
subgraph signals["Signals in location j"]
direction TB
signals_elements["y<sub>1</sub>: Cases
y<sub>2</sub>: Hospital Admissions
y<sub>3</sub>: Wastewater
...
y<sub>M</sub>: M-th signal"]
end
style signals_elements stroke-width:0px,fill:transparent,text-align:left;
it --> |"As a parameter\n(e.g., Avg. NegBinom.)"| signals
i0 --> |Used in| it
%% Rt hierarchical process
subgraph Rt_local["R hierarchical"]
direction LR
Rt(("R(t)")) --> Rtdots(("..."))
Rtdots --> Rtj(("R(t, j)"))
style Rtdots fill:transparent,stroke:transparent
end
dgp_global --> Rt_local
dgp_global --> gt_local(("g(t)"))
Rt_local --> |Used in| it
gt_local --> |Used in| it
classDef transparentClass fill:transparent,stroke:darkgray;
class dgp_global,dgp_local_j transparentClass;