Skip to content

Alzheimer's: Update testing model#1888

Open
NathanielBlairStahn wants to merge 18 commits intomainfrom
alzheimers/model-12
Open

Alzheimer's: Update testing model#1888
NathanielBlairStahn wants to merge 18 commits intomainfrom
alzheimers/model-12

Conversation

@NathanielBlairStahn
Copy link
Contributor

@NathanielBlairStahn NathanielBlairStahn commented Jan 23, 2026

  • Update testing coverage function to level off more slowly
  • Introduce randomness to BBBM testing frequency so that the interval between tests is uniformly distributed between 3 years and 5 years
  • Extend BBBM testing history to 5 years prior to entering sim instead of 3 years prior
  • (minor edit) Use automatic numbering and reformat bulleted sublist in BBBM testing algorithm

Note: There are some things left to confirm or update, so I marked this as a draft pull request:

  • Confirm that the proposed BBBM testing coverage function, testing algorithm, and testing history are what we want
  • Edit the assumptions and limitations to reflect the above changes
  • Add model 12.0 to the model run requests table

@NathanielBlairStahn NathanielBlairStahn added Vivarium modeling strategy Documentation for Vivarium modeling strategy update Add this tag to any section that is updated Alzheimers_sim Alzheimer's simulation for CSU, starting July 2025 labels Jan 23, 2026
that most people will get retested within 5 years (Lilly requested that
tests occur every 3-5 years). Specifically, the probability that a
simulant *doesn't* get retested between 3 and 5 years (i.e., on one of
the 5 time steps at 3, 3.5, 4, 4.5, 5) is :math:`(1-0.5)^5 = 3.125\%`.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Hmm this works I suppose. I had done it differently in the MSLT and would need to math it out more to compare the relative distribution of testing across years. The MSLT will also be the vast majority of retesting so it probably won't make a huge difference what we do here.

I was thinking, especially since it is the same simulants being retested every time, that when a simulant tested negative we would assign them a "re-test date" uniformly selected for 3-5 years in the future. This would take more data storage, but since everyone in the sim is positive we shouldn't have all that many people testing negative and needing future dates stored.

I suppose I could also update the MSLT to reflect this new methos if we prefer it.

Copy link
Member

Choose a reason for hiding this comment

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

Let's have Nathaniel update this to request the time until retest be uniformly distributed between 3 and 5 years, as we discussed this morning. How to accomplish this can be a detail left to the engineers, but I expect that having a retest_by column of pd.Timestamp data will be a straightforward approach for them.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ok, instead of introducing an explicit "re-test date," I updated my hazard function to be non-constant so that it results in a uniform distribution for the waiting time instead of a geometric distribution.

upon entering the simulation, we will assign a BBBM testing history to
each initialized simulant who is eligible for a BBBM test. Since
simulants are only eligible for testing every three years (more
precisely, every 6 time steps), we will assign a random test date within
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@aflaxman I wrote this section post hoc to describe what the engineers actually did, which involves counting time steps explicitly. I think they do it that way to ensure uniformity in sampling since the time steps are not exactly half a year (though really they should be if we wanted to do things better...), so maybe if we just rounded from a continuous time, it would tend to be biased in one direction or the other (though I'm not totally sure). Now that we're re-doing this piece, do you think I should rewrite this in terms of continuous time to avoid locking us into a particular time step, or is it fine to leave it in terms of the number of time steps? Rewriting it will require an explicit strategy for mapping continuous time to a discrete time step -- I'm not sure what the best strategy is or what strategies are compatible with how the engineers think about time steps. I think we are slated to have a wider team meeting about time-step-related issues like this at some point, but I'm not sure when.

Copy link
Member

Choose a reason for hiding this comment

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

Fine to keep to minimal change and not rewrite

@aflaxman
Copy link
Member

aflaxman commented Jan 23, 2026 via email

that most people will get retested within 5 years (Lilly requested that
tests occur every 3-5 years). Specifically, the probability that a
simulant *doesn't* get retested between 3 and 5 years (i.e., on one of
the 5 time steps at 3, 3.5, 4, 4.5, 5) is :math:`(1-0.5)^5 = 3.125\%`.
Copy link
Member

Choose a reason for hiding this comment

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

Let's have Nathaniel update this to request the time until retest be uniformly distributed between 3 and 5 years, as we discussed this morning. How to accomplish this can be a detail left to the engineers, but I expect that having a retest_by column of pd.Timestamp data will be a straightforward approach for them.

upon entering the simulation, we will assign a BBBM testing history to
each initialized simulant who is eligible for a BBBM test. Since
simulants are only eligible for testing every three years (more
precisely, every 6 time steps), we will assign a random test date within
Copy link
Member

Choose a reason for hiding this comment

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

Fine to keep to minimal change and not rewrite

Base automatically changed from alzheimers/model-11-run-request to main January 27, 2026 14:40
@SylLutze SylLutze marked this pull request as ready for review January 27, 2026 15:29

- Simulant is not in MCI or AD dementia state (they can only be in
susceptible or preclinical)
- Simulant age is :math:`\ge 65` and :math:`< 80`
Copy link
Member

Choose a reason for hiding this comment

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

Note this change: >= 65 now, at CSU client's request. (It was different before)

albrja added a commit to ihmeuw/vivarium_csu_alzheimers that referenced this pull request Feb 5, 2026
Albrja/mic 6782/update testing

Update testing model
- *Category*: Feature
- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-6782
- *Research reference*: ihmeuw/vivarium_research#1888

Changes and notes
-update retesting period so simulants are retested uniformly from 3-5 years instead of every 3 years
-update initialization to reflect updates to testing history sampling

Verification and Testing
Looked at simulants in interactive simulation and saw the correct sampling for simulants test history and future test dates.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Alzheimers_sim Alzheimer's simulation for CSU, starting July 2025 update Add this tag to any section that is updated Vivarium modeling strategy Documentation for Vivarium modeling strategy

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

Comments