Skip to content
Aurélien Cavelan edited this page Aug 20, 2020 · 11 revisions

Human demography and population definitions

OpenMalaria is a program for simulating malaria dynamics in endemic populations. Each simulation is intended to represent a single site (corresponding e.g. to a village or district). For most applications it is important to include simulate humans with the different age groups of humans represented in approximately the correct proportions. This section explains how this is achieved.

OpenMalaria does not explicitly simulate the sex or gender of the simulated humans.

OpenMalaria simulations may also need to divide the human population into sub-populations that are treated differently in the simulations. This is especially useful for simulating a field trials of interventions, where the intervention is applied only to a cohort of individuals, who are treated differently from the rest of the population or monitored differently. The definition of sub-populations and cohorts is explained here.

Age distributions, birth and death rates

OpenMalaria aims to use populations with realistic age distributions for malaria endemic populations, which remain the same throughout the simulation. The simulations also run with constant population sizes, while each simulated human is born, grows older, and may die during the course of the simulation. The requirement to approximate both demographically stable and stationary populations is met by simulating migrations. After individuals who die from malaria (direct or indirect) are removed from the population, the demography model uses out-migrations to enforce the specified age-structure and births to keep population size constant.

The user of OpenMalaria need only specify the age distribution required for the simulations. However we recommend use of a previously tested distribution and provide no guarantee that the algorithm will function for any specific age distribution (the outputs are not very sensitive to small differences in age distribution so you may well want to use the standard age distribution below).

img/graphs/human-demography.png

Configuration

Our standard set of demography data comes from Ifakara, Tanzania:

<demography maximumAgeYrs="90" name="Ifakara" popSize="1000">
  <ageGroup lowerbound="0.0">
    <group poppercent="3.474714994" upperbound="1"/>
    <group poppercent="12.76004028" upperbound="5"/>
    <group poppercent="14.52151394" upperbound="10"/>
    <group poppercent="12.75565434" upperbound="15"/>
    <group poppercent="10.83632374" upperbound="20"/>
    <group poppercent="8.393312454" upperbound="25"/>
    <group poppercent="7.001421452" upperbound="30"/>
    <group poppercent="5.800587654" upperbound="35"/>
    <group poppercent="5.102136612" upperbound="40"/>
    <group poppercent="4.182561874" upperbound="45"/>
    <group poppercent="3.339409351" upperbound="50"/>
    <group poppercent="2.986112356" upperbound="55"/>
    <group poppercent="2.555766582" upperbound="60"/>
    <group poppercent="2.332763433" upperbound="65"/>
    <group poppercent="1.77400255" upperbound="70"/>
    <group poppercent="1.008525491" upperbound="75"/>
    <group poppercent="0.74167341" upperbound="80"/>
    <group poppercent="0.271863401" upperbound="85"/>
    <group poppercent="0.161614642" upperbound="90"/>
  </ageGroup>
</demography>

The only aspect of this we commonly change is the population size. Population sizes below around 1000 humans tend to have large amounts of stochastic noise (although this is still clearly noticeable with 1000 humans, particularly in low-frequency outputs such as deaths resulting from malaria). Large numbers increase computation time and RAM usage; as a rough guide 100,000 individuals when using a 5-day time-step or 10,000 individuals when using a 1-day time-step should require somewhere (very roughly, depending on machine performance) in the region of two hours computation.

If you need to change the age distribution, you can find other tested demography XML elements in the snippet library.

Subpopulations

Applications

Cohort studies: field trials of interventions generally enroll only a defined sub-group of the human population (a cohort) into a study, and consider only data collected on those individuals (even though events in other individuals will affect transmission to the cohort, so equivalent functionality is needed for simulation models. A special case of such cohort studies are time-to-first event studies, which can be simulated as described here

Heterogeneity of deployment: when multiple interventions are deployed at a given coverage level or are renewed at a later date, it is possible that either the same subset of the population or a different, randomly chosen subset receive the intervention. This can be achieved by defining different sub-populations with different intervention patterns.

Interventions targetting animals or physical objects: many interventions targetting humans (such as repellent or insecticide treatment) can be applied to animal mosquito hosts or to physical objects (e.g. synthetic baits). OpenMalaria currently supports explicit modeling of only a limited set of interventions applied to non-human hosts but this functionality can be achieved by assigning the required characteristics and interventions to a sub-population of simulated humans (while adjusting the characteristics of the rest of the population accordingly).

To address these issues, OpenMalaria (from version 32) supports definition of multiple sub-populations. This section describes the corresponding specification of sub-population recruitment, expiry,restriction of intervention deployment to existing sub-populations, and links to information on Monitoring of outputs by sub-population.

Recruitment of subpopulations (Version 32 on)

Sub-populations are declared within the <human> element of the XML as part of the specification of human-targeting intervention.

The restrictToSubPop pseudo-intervention can be used to specify sub-populations without changing any of their other properties. In addition, every human-targeting intervention component defines a sub-population which is identified by the same id (identifier) as the intervention component. Corresponding to each of these sub-populations is its complement (i.e. the sub-population of individuals who did not receive the intervention).

Members are assigned to sub-populations when the associated interventions are deployed. Each human receiving an intervention (or explicitly assigned by deployment of restrictToSubPop) within the human element automatically becomes a member of the associated sub-population.

Expiry of subpopulation membership

A human's membership in the sub-population expires when any of the following happens:

  • Attrition of bed-nets: when owners dispose of nets using the ITN model, they also lose membership in the linked sub-population
  • Intervention age: if the time since the last deployment of the associated intervention component exceeds a given number of years, membership expires. This only applies if configured for the intervention component.
  • On first bout/treatment/infection: an intervention component can also be configured to expire membership the first time some event happens to the target human since intervention deployment.

expiry of sub-population membership does not imply cessation of intervention effect (excepting the attrition rule above).

Of the above membership expiry rules, only the attrition rule is active by default. The others require configuration, attached to the <component .../> configuration in the XML:

<component id="xyz">
  <PEV>...</PEV> <!-- or whatever -->
  <subPopRemoval afterYears="1" onFirstBout="true" onFirstTreatment="true" onFirstInfection="true"/>
</component>

Following the intervention model parameters (in this case, PEV, but the same applies to all intervention models), the <subPopRemoval> element can appear with configuration applying to this component id. Any of the attributes (afterYears, onFirst...) can be omitted. If present (and "true" in the case of the latter attributes), the have the following effects:

Option Functionality Purpose
After x years remove individuals from the sub-population when the time since the last deployment of this cohort to this human exceeds x years. Intended for simulating trials with fixed duration of follow-up
First bout only remove individuals from the sub-population at the start of the first episode (start of a clinical bout) since they were recruited into the sub-population. Intended for measuring time to first episode with active case detection
First treatment only remove individuals from the sub-population when they first seek treatment after recruitment into the sub-population Intended for measuring time to first episode with passive case detection
First infection only Remove individuals from the cohort at completion of the first survey in which they present with a patent infection after recruitment into the sub-population Intended for measuring time to first infection, using active case detection

These are enabled via the afterYears, onFirstBout,onFirstTreatment, or onFirstInfection options of subPopRemoval. None of these options prevent re-recruitment in the case that recruitment settings could conceivably recruit the same individual twice.

Restriction of intervention deployment

restrictToSubPop can be used to restrict deployment to a sub-Population, for instance to simulate deployment of repeated rounds of vaccine or drug treatment to the same group of individuals who received the first dose. Example:

<continuous>
  <restrictToSubPop id="subpop1" complement="false"/>
  <deploy targetAgeYrs="0.833" coverage="0.8"/>
  <deploy targetAgeYrs="0.166" coverage="0.7"/>
  <deploy targetAgeYrs="0.25" coverage="0.7"/>
</continuous>

Here, only members of subpop1 will receive the intervention, with coverage specified relative to the sub-population (i.e. only 80% or 70% of the members of the sub-population in this example). Negation: in this case complement="false" and deployment is to members of the subpop1 sub-population (it is the same if complement is not specified); if instead complement="true" is specified, then deployment is to the complement of subpop1 (i.e. all humans who are not members).

Clone this wiki locally