Skip to content

Add latent infection process "SharedInfection" #728

@cdc-mitzimorris

Description

@cdc-mitzimorris

PyRenew's multi-signal model framework currently has one latent infection process: HierarchicalInfections, which decomposes $\mathcal{R}(t)$ into a baseline plus per-subpopulation deviations. This is the right tool when observation processes operate at different spatial resolutions (e.g., jurisdiction-level hospital admissions + site-level wastewater concentrations), as demonstrated in building_multisignal_models.qmd.

However, a common use case has no subpopulation structure: two jurisdiction-level aggregate signals (e.g., hospital admissions + ED visits) observe the same underlying infection process through different delay distributions and ascertainment rates. Using HierarchicalInfections with subpop_fractions=[1.0] for this case is misspecified: the deviation process samples ~N nuisance parameters (one per timepoint) that are all forced to zero by the sum-to-zero constraint. This creates serious non-identifiability.

Add class SharedInfecions with a single $\mathcal{R}(t)$ trajectory that drives one renewal equation. Multiple observation processes observe the resulting aggregate infection trajectory through their own ascertainment rates and delay distributions.

Mathematical form:

  • $\log \mathcal{R}(t) \sim \text{TemporalProcess}$ (e.g., AR(1), RandomWalk)
  • $I(t) = \mathcal{R}(t) \sum_\tau I(t-\tau) , g(\tau)$
  • Each observation: $\mu_k(t) = \alpha_k \sum_s I(t-s) , \pi_k(s)$

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions