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
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions R/variables.R
Original file line number Diff line number Diff line change
Expand Up @@ -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

return(vnapply(
seq_along(age),
function(i) {
Expand All @@ -338,6 +340,8 @@ initial_state <- function(parameters, age, groups, eq, states) {
if (!is.null(eq)) {
eq_states <- c('S', 'D', 'A', 'U', 'T')
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
return(vcapply(
seq_along(age),
function(i) {
Expand Down
Loading