epiverse-trace / epidemics

A library of published compartmental epidemic models, and classes to represent demographic structure, non-pharmaceutical interventions, and vaccination regimes, to compose epidemic scenarios.
https://epiverse-trace.github.io/epidemics/
Other
8 stars 2 forks source link

Mismatch between intervention intensity and expectation for given R0? #250

Closed adamkucharski closed 1 month ago

adamkucharski commented 1 month ago

I was exploring the odin model implementation in the howto repo more and noticed that interventions seem to have different effect in odin and original epidemics implementation (despite the two outputs matching in the absence of interventions once model was SEIR - see this branch).

If R0=1.5, then reducing contacts across ages by 33% should cause the epidemic to roughly level off (because R = 1.5*(1-0.33) = 1). Or just under 33% given some immunity has already accumulated. This is what happens with the {odin} implementation. However, in the {epidemics} README implementation, the epidemic seems to level off when the contact reduction is around 15%, suggesting that the effect of interventions may be inflated somewhere in the model code. I get the same behaviour if we have no age-variation in mixing (i.e. all entries of un-normalised contact matrix = 1).

pratikunterwegs commented 1 month ago

Just popping in to suggest an answer as I still get notified - see #94 and #97 for changes to how contact interventions were implemented, essentially becoming more impactful. This is what's in the Readme. PR #97 wasn't reviewed so it might be good to check if it actually makes sense.

A <rate_intervention>, or a function passed to time_dependence, that works on the transmission rate would apply a simple scaling (hopefully) identical to the one in the odin-based example.

adamkucharski commented 1 month ago

Thanks, that makes sense – had wondered if something like that might be happening (given (1-0.15)^2 is similar to 1-0.3). Have now updated that branch implementation, and with intervention vector c(0.15,0.15,0.15) get the following with {epidemics}:

Screenshot 2024-07-17 at 11 41 43

And this aligned output with {odin}:

Screenshot 2024-07-17 at 11 46 52