Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Older age groups (older than equilibrium age object) are not correctl… #301

Merged
merged 4 commits into from
May 24, 2024

Conversation

RJSheppard
Copy link
Member

@RJSheppard RJSheppard commented May 3, 2024

I noticed that when individuals are older than the max equilbrium solution age group, the human states and immunity assignments doesn't know how to interpret it. It then assigns states and immunity using the youngest age group, which underestimates infection and acquired immunity, while overestimating maternal immunity in this age group (and explains why we often see an initial peak in maternal immunity). I've tried to correct this. Plots show the average over 10 simulations at the first timestep.

State plots (fewer S in age_correction (older)):
image

Immunity plots (slightly higher in acquired imm, lower in maternal):
image

And Immunities through time (averaged over 10 repetitions, EIR = 50):
image

…y initiated. If outside of the age range, they get assigned 1 - the youngest age group. If we limit the max ages during these steps, we get something that is more accurate.
@RJSheppard RJSheppard force-pushed the older_age_state_immunity_init branch from 5be4fcf to d0854db Compare May 9, 2024 09:39
R/variables.R Outdated
@@ -321,6 +321,8 @@ initial_immunity <- function(
) {
if (!is.null(eq)) {
age <- age / 365
# older ages must be assigned within the equilibrium age bounds
age[age>=max(eq[[1]][, 'age'])] <- max(eq[[1]][, 'age'])-0.01
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would adding a max_age parameter to calculate_initial_ages() and overwriting any initial ages > max_age in that function be a cleaner and clearer application?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That sounds reasonable - Michael's model uses a truncated exponential distribution to draw ages anyway, so it doesn't have the same issue. It probably wouldn't be unreasonable to switch over to that. @giovannic ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm, it seems right to sample from a truncated exponential here too. From a quick look at mrc-ide/malariasimulation, it would be consistent.

You could use the maximum age in EQUILIBRIUM_AGES as your upper bound. rtexp in utils.R could do the sampling for you fyi.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure thing. So if we sample ages from the truncated exponential, there won't be an issue with individuals being outside the eq solution.

My only concern is the way that the initial age distribution would be different to the age distribution at model equilibrium, although maybe this wouldn't be a problem. MW also limits ages to the max equilibrium solution age, so maintains a truncated exp dist throughout, but this might not be consistent with our model...?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should have very minimal impact as we're changing a very small proportion of the population

…move issues with state and immunity assignment when someone is older than the equilibrium solution.
@RJSheppard
Copy link
Member Author

Here's another plot showing average immunities (I think the ivm is higher in master because Tom corrected the maternal severe immunity parameter). If we're happy, we can merge? (EIR = 50, 20 reps, 10000 pop size). I'm finding it interesting that ib trends up while ica and id trend more down (in all three branches I plotted), but it's reassuring to see that icm and ivm reach the same equilibria fairly quickly across branches.
image

@RJSheppard RJSheppard merged commit ab030d7 into dev May 24, 2024
4 checks passed
@RJSheppard RJSheppard deleted the older_age_state_immunity_init branch May 24, 2024 09:51
@giovannic giovannic mentioned this pull request Sep 11, 2024
Merged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants