You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/source/models/causes/neonatal/index.rst
+13-4Lines changed: 13 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -208,7 +208,11 @@ unit time.
208
208
Modeling Strategy
209
209
+++++++++++++++++
210
210
211
-
The neonatal death model requires only the probability of death (aka "mortality risk") for the early and late neonatal time periods. Rather than using GBD mortality rates and converting them into probability of deaths, we will use mortality risk as direct input data into our model. We will calculate mortality risk input data as age-specific death counts divided by live birth counts from GBD.
211
+
The neonatal death model requires only the probability of death (aka "mortality risk") for the early and late neonatal time periods.
212
+
These mortality risks are age-group-, sex-, and location-specific.
213
+
For brevity, sex and location subscripts are omitted in all equations.
214
+
215
+
Rather than using GBD mortality rates and converting them into probability of deaths, we will use mortality risk as direct input data into our model. We will calculate mortality risk input data as age-specific death counts divided by live birth counts from GBD.
212
216
213
217
Note that this strategy does not require any conversion between rates to probabilities NOR does it require any scaling to the duration of the age group. The mortality risk calculated as described below already represents the probability of dying within a neonatal age group and can be used directly as such in the simulation.
214
218
@@ -231,7 +235,8 @@ and for a given cause of death:
231
235
232
236
Note that this strategy was updated in May of 2025 from a prior strategy of converting GBD mortality rates to probabilities. `The pull request that updated this strategy can be found here for reference. <https://github.com/ihmeuw/vivarium_research/pull/1654>`_ This strategy update was pursued following verification and validation issues in neonatal mortality and an exploration of potential solutions in model runs 6.1 through 6.4. Ultimately, a change from mortality rates to mortality risk was preferred given that it is the more policy relevant measure in the context of neonates, and accurately apportioning person time alive within the neonatal age group given the input data available to us was a challenge we judged to be unnecessary.
233
237
234
-
The calculation of :math:`\text{ACMRisk}_i` (the all-cause mortality risk for a single simulant, :math:`i`) is a bit complicated, however. We begin with a population ACMRisk and use the LBWSG PAF to derive a risk-deleted ACMRisk to which we can then apply the relative risk of LBWSG matching any risk exposure level. Mathematically this is achieved by the following formula:
238
+
The calculation of :math:`\text{ACMRisk}_i` (the all-cause mortality risk for a single simulant, :math:`i`) is a bit complicated, however. We begin with a population ACMRisk and use the LBWSG PAF to derive a risk-deleted ACMRisk to which we can then apply the relative risk of LBWSG matching any risk exposure level. Mathematically this is achieved by the following formula.
239
+
Starting with this equation, we omit age group subscripts for brevity; all quantities are still age-, sex-, and location-specific.
235
240
236
241
.. math::
237
242
\begin{align*}
@@ -253,7 +258,6 @@ where :math:`\text{BW}_i` and :math:`\text{GA}_i` are the birth weight and gesta
253
258
and :math:`\text{CSMRisk}_{i}^{k}` is the cause-specific mortality risk for subcause :math:`k` for simulant :math:`i` (both detailed in the `Modeled Subcauses`_
254
259
linked from this page).
255
260
256
-
257
261
In addition to determining which simulants die due to any cause, we also need to determine which subcause is underlying the death. This is done by sampling from a categorical distribution obtained by renormalizing the CSMRisks:
258
262
259
263
.. math::
@@ -349,7 +353,10 @@ Data Tables
349
353
- GBD + assumption about relative risks + intervention model effects
350
354
- see subcause models for details
351
355
352
-
**Details of the** :math:`\text{PAF}_\text{LBWSG}` **calculation:**
356
+
.. _details_of_the_lbwsg_paf_calculation:
357
+
358
+
Details of the LBWSG PAF calculation
359
+
++++++++++++++++++++++++++++++++++++
353
360
354
361
As stated in the table above, :math:`\text{PAF}_\text{LBWSG}` is the population attributable fraction of all-cause mortality for low birth weight and short gestation. It is computed so that PAF = 1 - 1 / E(:math:`\text{RR}_{\text{BW},\text{GA}}`) from the capped interpolated relative risk function (with expectation taken over the distribution of LBWSG exposure).
355
362
@@ -374,6 +381,8 @@ Using the `LBWSG PAF calculation simulation <https://github.com/ihmeuw/vivarium_
Copy file name to clipboardExpand all lines: docs/source/models/causes/neonatal/preterm_birth.rst
+87-25Lines changed: 87 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -154,11 +154,17 @@ Note that these probabilities are not used directly in the model and are include
154
154
Modeling Strategy
155
155
+++++++++++++++++
156
156
157
-
The Preterm Birth submodel requires only the birth-weight- and gestation-age-stratified cause specific mortality risks for preterm birth complications with and without respiratory distress syndrome during the early and late neonatal periods.
157
+
The Preterm Birth submodel only needs to produce the birth-weight- and gestation-age-stratified cause specific mortality risks for preterm birth complications with and without respiratory distress syndrome during the early and late neonatal periods.
158
+
(These risks are also implicitly stratified by age group, sex, and location.)
158
159
159
160
Since this is a PAF-of-one cause, the calculation must take into account the "structural zeros" representing no mortality risk for simulants with a gestational age of 37 or more weeks.
160
161
161
-
The way these CSMRisks are used is the same for all subcauses, and therefore is included in the :ref:`Overall Neonatal Disorders Model <2021_cause_neonatal_disorders_mncnh>` page. This page describes the birth-weight- and gestational-age-specific cause specific mortality risks that are used for this cause on that page, :math:`\text{CSMRisk}^{\text{preterm with RDS}}_{\text{BW},\text{GA}}` and :math:`\text{CSMRisk}^{\text{preterm without RDS}}_{\text{BW},\text{GA}}`. In both cases, the formula is:
162
+
The way these CSMRisks are used is the same for all subcauses, and therefore is included in the :ref:`Overall Neonatal Disorders Model <2021_cause_neonatal_disorders_mncnh>` page. This page describes how to calculate the birth-weight- and gestational-age-specific cause specific mortality risks that are used for the preterm subcauses on that page, namely :math:`\text{CSMRisk}^{\text{preterm with RDS}}_{\text{BW},\text{GA}}` and :math:`\text{CSMRisk}^{\text{preterm without RDS}}_{\text{BW},\text{GA}}`.
163
+
As in the equations on the overall neonatal disorders model page, all quantities here
164
+
are age-group-, sex-, and location-specific; these subscripts are omitted for brevity.
165
+
For both preterm subcauses, the formula is:
166
+
167
+
.. _preterm_csmrisk_equation:
162
168
163
169
.. math::
164
170
\begin{align*}
@@ -171,7 +177,8 @@ The way these CSMRisks are used is the same for all subcauses, and therefore is
171
177
\end{align*}
172
178
173
179
where :math:`k` is the subcause of interest (preterm birth with or without RDS),
174
-
:math:`\text{CSMRisk}` is the cause-specific mortality riskk for preterm birth complications,
180
+
:math:`\text{CSMRisk}` is the cause-specific mortality risk for preterm birth complications,
181
+
:math:`p_{\text{preterm}}` is the prevalence of preterm (gestational age < 37 weeks) at the *beginning* of the age group,
175
182
:math:`f_k` is the fraction of preterm deaths due to subsubcause :math:`k` (with or without RDS), :math:`\text{RR}_{\text{BW},\text{GA}}` is the relative risk of all-cause mortality for a birth weight of :math:`\text{BW}` and gestational age of :math:`\text{GA}`, and :math:`Z` is a normalizing constant selected so that :math:`E[\text{RR}_{\text{BW,GA}} | \text{GA}<37] \cdot Z = 1`. Solving for :math:`Z` gives :math:`Z = 1 / E[\text{RR}_{\text{BW,GA}} | \text{GA}<37]`.
176
183
177
184
.. note::
@@ -184,7 +191,7 @@ where :math:`k` is the subcause of interest (preterm birth with or without RDS),
184
191
185
192
We will use a **population size of 195_112** for this calculation. This number was selected in order to satisfy the following criteria:
186
193
187
-
- The population size per LWBSG exposure category is required to be a perfect square to be compatible with our strategy of initializing individual exposures on a grid within each LBWSG exposure category
194
+
- The population size per LBWSG exposure category is required to be a perfect square to be compatible with our strategy of initializing individual exposures on a grid within each LBWSG exposure category
188
195
189
196
- The total population size of the PAF calculation pipeline must be divisible by the product of the number of LBWSG exposure categories (58), the number of sexes (2), and the number of age groups (2) used in the PAF calculation
190
197
@@ -202,7 +209,73 @@ where :math:`k` is the subcause of interest (preterm birth with or without RDS),
202
209
Also, it is possible that the choice of :math:`\text{RR}_{\text{BW},\text{GA}}` might not work for every subcause. Since we're moving all the preterm mortality into the preterm categories, there is less room there for mortality from other causes, so depending on the risks involved, we may need to shift mortality from some other causes into the non-preterm categories in order to avoid making things negative.
203
210
It is even possible that there is no way to make this work consistently, meaning that any choice of weight function would lead to negative mortality risks. We expect that this will not be an issue, but we haven't actually tried it with the real data yet.
204
211
205
-
Each individual simulant :math:`i` has their own :math:`\text{CSMR}_i^k` that might be different from :math:`\text{CSMRisk}^k_{\text{BW}_i,\text{GA}_i}` (meaning the average birth-weight- and gestational-age-specific CSMRisk for simulants with the birth weight and gestational age matching simulant :math:`i`. We recommend implementing this as a pipeline eventually because it will be modified by interventions (or access to interventions) relevant to this subcause. (Until we implement those, we will have :math:`\text{CSMRisk}_{i}^k = \text{CSMRisk}^k_{\text{BW}_i,\text{GA}_i}`, though.)
212
+
:math:`\text{CSMRisk}` and :math:`p_{\text{preterm}}` are calculated differently for the ENN and LNN age groups.
213
+
For clarity of notation, in what follows we will again make explicit the age group
214
+
subscripts that have been implicit on every quantity to this point.
where :math:`n_\text{cat}` is the number of simulants initialized into each LBWSG category at birth
275
+
and :math:`n^\text{deaths}_\text{cat}` is the number of deaths in each category when ENN mortality was applied.
276
+
Note that :math:`n_\text{cat}` will not vary by LBWSG exposure category under the current approach of assigning the same number of simulants to each LBWSG category.
277
+
278
+
Each individual simulant :math:`i` has their own :math:`\text{CSMR}_i^k` that might be different from :math:`\text{CSMRisk}^k_{\text{BW}_i,\text{GA}_i}` (meaning the average birth-weight- and gestational-age-specific CSMRisk for simulants with the birth weight and gestational age matching simulant :math:`i`). We recommend implementing this as a Vivarium pipeline eventually because it will be modified by interventions (or access to interventions) relevant to this subcause. (Until we implement those, we will have :math:`\text{CSMRisk}_{i}^k = \text{CSMRisk}^k_{\text{BW}_i,\text{GA}_i}`, though.)
206
279
207
280
The following table shows the data needed for these
208
281
calculations.
@@ -212,8 +285,9 @@ Data Tables
212
285
213
286
.. note::
214
287
215
-
All quantities pulled from GBD in the following table are for a
216
-
specific year, sex, age group, and location.
288
+
All quantities pulled from GBD in the following table are pulled
289
+
for all modeled years, sexes, age groups, and locations,
290
+
except when the age group is explicitly specified.
217
291
218
292
.. list-table:: Data values and sources
219
293
:header-rows: 1
@@ -224,36 +298,24 @@ Data Tables
224
298
- Note
225
299
* - enn_all_cause_death_count
226
300
- Count of deaths due to all causes in the early neonatal age group
- either csmrisk_enn or csmrisk_lnn depending on the simulant's age group
315
+
* - lbwsg_birth_prevalence
316
+
- Birth prevalence of low birthweight and short gestation risk factor
317
+
- GBD with post-processing: rei_id = 339, then remove the extraneous category and rescale prevalence :ref:`as described here <rescaling_lbwsg_exposure_data_pulled_from_gbd_2019>`.
252
318
-
253
-
* - :math:`p_\text{preterm}`
254
-
- Prevalence of gestational age <37 weeks at birth
255
-
- Derived from :ref:`GBD LBWSG exposure <risk_exposure_lbwsg>`
256
-
- Equal to the sum of exposures for all categories with gestational age at birth <37 weeks. A list of such categories can be generated in a manner similar to `this notebook <https://github.com/ihmeuw/vivarium_research_nutrition_optimization/blob/data_prep/data_prep/LBW%20categories.ipynb>`_
Copy file name to clipboardExpand all lines: docs/source/models/concept_models/vivarium_mncnh_portfolio/anemia_component/module_document.rst
+22-1Lines changed: 22 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -201,7 +201,28 @@ Note that simulants who died during labor should not experience any YLDs due to
201
201
4.0 Verification and Validation Criteria
202
202
+++++++++++++++++++++++++++++++++++++++++
203
203
204
-
- Baseline simulated anemia YLDs should match corresponding pregnancy-specific GBD values. TODO: define specifically what these are (do they save pregnancy-specific impairment prevalence in GBD 2023 or do we need to calculate our own targets again?)
204
+
- Baseline simulated anemia YLDs should match corresponding pregnancy-specific GBD values. Run the following command to load the data from GBD 2023:
205
+
206
+
.. code-block:: python
207
+
208
+
get_outputs(
209
+
location_id=[165,179,214],
210
+
topic='rei',
211
+
rei_id=[206,206,207], # We also have rei_id=192 for all anemia and rei_id=432 for moderate and severe combined
Make sure you have the latest version of ``db_queries`` to be able to use the ``population_group_id`` argument. To get pregnancy-specific results, the population group and the age groups need to be specified, because the default is all ages.
224
+
As of the time of writing (July 2025), we can only use ``population_group_id=16`` with ``get_outputs()``. There were a few EPIC/COMO runs with pregnancy this GBD round, which are noted in the `tracking HUB page <https://hub.ihme.washington.edu/spaces/GBDdirectory/pages/229280352/GBD+2023+EPIC+COMO+tracking>`_.
0 commit comments