Target interventions to nodes or groups

Generally, you want to target your outbreaks and campaign interventions to specific regions or individuals who meet certain criteria. For example, you may want to distribute bednets only to areas where a mosquito-borne disease is endemic or vaccinate only young children who are at highest risk. This topic describes how to distribute interventions to specific geographic nodes or groups of individuals.

Target to nodes using Nodeset_Config

Targeting geographic nodes with a particular intervention can be controlled by the Nodeset_Config parameter in the campaign file. To distribute the intervention to all nodes, simply set it to “NodeSetAll”. To distribute to a subset of nodes, follow the steps below.

  1. In the JSON object for the campaign event, set Nodeset_Config using one of the following two options:
    • Set it to an empty JSON object. Within that object, set the following:
      • Set class to “NodeSetNodeList”.
      • Set Node_List to an array that contains a comma-delimited list of nodes that set where the intervention will be distributed.
    • Set it to an empty JSON object. Within that object, set the following:
      • Set class to “NodeSetPolygon”.
      • Set Polygon_Format to “SHAPE”.
      • Set Vertices to a comma-delimited list of latitude and longitude pairs that define the outer boundary of the region you want to target. The intervention will be distributed to all nodes within the defined bounds.

See the example below.

{
    "Use_Defaults": 1,
    "Events": [{
        "Event_Name": "Outbreak",
        "Nodeset_Config": {
            "class": "NodeSetNodeList",
            "Node_List": [1, 3, 5]
        },
        "Start_Day": 10,
        "class": "CampaignEvent"
    }]
}

Target to nodes or individuals using properties

To target interventions to particular individuals or nodes based on their property values, you must first define those properties in the demographics file using IndividualProperties or NodeProperties. Then, in the campaign file, you can target an intervention or outbreak to a group of individuals based on the properties applied to them. See Configure heterogeneity using individual and node properties for instructions on defining properties.

Just as defining properties based on age works a little differently than other properties, targeting an intervention to a particular age range works a little differently than targeting an intervention to other properties.

To target interventions to properties other than age:

  1. In the campaign file, in the event you want to target, set Target_Demographic to “Everyone”.
  2. Add the Property_Restrictions parameter and set to an empty array.
  3. In that array, add a list of JSON key-value pairs of the property type and value that specifies the groups to apply the intervention to. If the name of the element is not valid, EMOD will ignore the property restriction.

To target interventions to age ranges:

  1. In the campaign file, in the event you want to target, set Target_Demographic to ExplicitAgeRanges.

  2. Add the Target_Age_Min and set to the lower age bound.

  3. Add the Target_Age_Max and set to the upper age bound.

    Both of these values must match one the values listed in Age_Bin_Edges_In_Years in the demographics file. EMOD does not verify this range.

The following examples illustrate how to target interventions to different groups. This includes how to configure interventions when there are multiple relevant properties, such as targeting individuals who are both low-risk and in a suburban setting or individuals who are either low- risk or living in suburban settings.

Single property, single value

The following examples show how to target interventions based on a single property value.

At day 0 of the simulation, an outbreak starts. Target_Demographic is set to “Everyone” but Property_Restrictions restricts the start of the outbreak to the “Urban” group.

_images/howto-targeted-1.png
{
    "Events": [{
        "Event_Coordinator_Config": {
            "Number_Distributions": -1,
            "Intervention_Config": {
                "Antigen": 0,
                "Genome": 0,
                "Outbreak_Source": "PrevalenceIncrease",
                "class": "OutbreakIndividual"
            },
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Property_Restrictions": [
                "Place:Urban"
            ],
            "class": "StandardInterventionDistributionEventCoordinator"
        },
        "Nodeset_Config": {
            "class": "NodeSetAll"
        },
        "Start_Day": 0,
        "class": "CampaignEvent"
    }]
}

Even if you have multiple properties defined in the demographics file, you can target interventions to a single property value in the same way. Individuals can be assigned any of the values for the other property types.

In this example, values are defined for both the “Risk” and “Place” property types. The outbreak only targets “Suburban” individuals using the “Place” property type. Individuals can have any “Risk” value.

_images/howto-targeted-2.png
{
    "Events": [{
        "Event_Coordinator_Config": {
            "Number_Distributions": -1,
            "Intervention_Config": {
                "Antigen": 0,
                "Genome": 0,
                "Outbreak_Source": "PrevalenceIncrease",
                "class": "OutbreakIndividual"
            },
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Property_Restrictions": [
                "Place:Urban"
            ],
            "class": "StandardInterventionDistributionEventCoordinator"
        },
        "Nodeset_Config": {
            "class": "NodeSetAll"
        },
        "Start_Day": 0,
        "class": "CampaignEvent"
    }]
}

Single property, multiple values

If you want to target multiple values with the same property type, such as both “Urban” and “Rural” values with the “Place” property, you must use multiple interventions. You cannot have more than one group with the same property value in one intervention or outbreak.

In this example, an outbreak starts at day 0 in the both the “Rural” and “Urban” groups.

_images/howto-targeted-3.png
{
    "Events": [{
        "Event_Coordinator_Config": {
            "Number_Distributions": -1,
            "Intervention_Config": {
                "Antigen": 0,
                "Genome": 0,
                "Outbreak_Source": "PrevalenceIncrease",
                "class": "OutbreakIndividual"
            },
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Property_Restrictions": [
                "Place:Rural"
            ],
            "class": "StandardInterventionDistributionEventCoordinator"
        },
        "Nodeset_Config": {
            "class": "NodeSetAll"
        },
        "Start_Day": 0,
        "class": "CampaignEvent"
    }, {
        "Event_Coordinator_Config": {
            "Number_Distributions": -1,
            "Intervention_Config": {
                "Antigen": 0,
                "Genome": 0,
                "Outbreak_Source": "PrevalenceIncrease",
                "class": "OutbreakIndividual"
            },
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Property_Restrictions": [
                "Place:Urban"
            ],
            "class": "StandardInterventionDistributionEventCoordinator"
        },
        "Nodeset_Config": {
            "class": "NodeSetAll"
        },
        "Start_Day": 0,
        "class": "CampaignEvent"
    }]
}

Multiple properties, individuals must match all values

To target individuals how have values defined by different property types, such as people who are both urban and low risk, you can use a single intervention or outbreak. When two values from multiple properties are targeted in one intervention or outbreak, the event is only applied to individuals that are assigned both values.

In this example, a vaccine intervention is targeted at low risk, suburban place individuals. Individuals who are targeted to receive the vaccine must have both property values.

_images/howto-targeted-4.png
{
    "Events": [{
        "Event_Coordinator_Config": {
            "Demographic_Coverage": 1.0,
            "Intervention_Config": {
                "Cost_To_Consumer": 10,
                "Durability_Time_Profile": "BOXDECAYDURABILITY",
                "Primary_Decay_Time_Constant": 3650,
                "Reduced_Acquire": 1,
                "Reduced_Transmit": 0,
                "Secondary_Decay_Time_Constant": 3650,
                "Vaccine_Take": 1,
                "Vaccine_Type": "StrainSpecific",
                "class": "SimpleImmunoglobulin"
            },
            "Target_Demographic": "Everyone",
            "Property_Restrictions": [
                "Risk:Low",
                "Place:Suburban"
            ],
            "class": "StandardInterventionDistributionEventCoordinator"
        },
        "Nodeset_Config": {
            "class": "NodeSetAll"
        },
        "Start_Day": 100,
        "class": "CampaignEvent"
    }]
}

Multiple properties, individuals must match at least one value

However, if you want to target multiple properties, but individuals need to have only one of the specified values to qualify for the intervention, you must create a separate campaign event for each of the targeted property values. The events are applied separately and are applied to individuals that have one OR both property values; they need not have both.

In this example, an outbreak is targeted at low risk individuals in the first intervention and suburban individuals in the second intervention.

_images/howto-targeted-5.png
{
    "Events": [{
        "Event_Coordinator_Config": {
            "Number_Distributions": -1,
            "Intervention_Config": {
                "Antigen": 0,
                "Genome": 0,
                "Outbreak_Source": "PrevalenceIncrease",
                "class": "OutbreakIndividual"
            },
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Property_Restrictions": [
                "Risk:Low"
            ],
            "class": "StandardInterventionDistributionEventCoordinator"
        },
        "Nodeset_Config": {
            "class": "NodeSetAll"
        },
        "Start_Day": 0,
        "class": "CampaignEvent"
    }, {
        "Event_Coordinator_Config": {
            "Number_Distributions": -1,
            "Intervention_Config": {
                "Antigen": 0,
                "Genome": 0,
                "Outbreak_Source": "PrevalenceIncrease",
                "class": "OutbreakIndividual"
            },
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Property_Restrictions": [
                "Place:Suburban"
            ],
            "class": "StandardInterventionDistributionEventCoordinator"
        },
        "Nodeset_Config": {
            "class": "NodeSetAll"
        },
        "Start_Day": 0,
        "class": "CampaignEvent"
    }]
}

Alternatively, if you want to target multiple properties, one of which is the age bin, you could use Property_Restriction_Within_Node and the Age_Bin properties and Age_Bin_Property_From_X_To_Y values that are automatically created by EMOD when you use the Age_Bin_Edges_In_Years demographics parameter (see NodeProperties and IndividualProperties parameters). This allows you to use a single campaign event instead of multiple ones as you would with “Target_Demographic”: “ExplicitAgeRanges”.

{
    "Events": {
        "class": "CampaignEvent",
        "Distributions": [{
            "Start_Day": 1,
            "Nodeset_Config": {
                "class": "NodeSetAll"
            },
            "EventCoordinator_Config": {
                "class": "StandardInterventionDistributionEventCoordinator",
                "Demographic_Coverage": 1,
                "Intervention_Config": {
                    "class": "NodeLevelHealthTriggeredIV",
                    "Property_Restrictions_Within_Node": [{
                            "Risk": "LOW",
                            "Age_Bin": "Age_Bin_Property_From_0_To_5"
                        },
                        {
                            "Risk": "MEDIUM",
                            "Age_Bin": "Age_Bin_Property_From_5_To_13"
                        },
                        {
                            "Risk": "HIGH",
                            "Age_Bin": "Age_Bin_Property_From_13_To_125"
                        }
                    ]
                }
            }
        }]
    }
}

Target an age range

Targeting an intervention to an age range is set up differently than targeting an intervention to other property types. However, you can combine both kinds of restrictions. In this example, a vaccine campaign is targeted at urban individuals who are age 0 to 5.

_images/howto-targeted-6.png
{
    "Events": [{
        "Event_Coordinator_Config": {
            "Demographic_Coverage": 1.0,
            "Intervention_Config": {
                "Cost_To_Consumer": 10,
                "Durability_Time_Profile": "BOXDECAYDURABILITY",
                "Primary_Decay_Time_Constant": 3650,
                "Reduced_Acquire": 1,
                "Reduced_Transmit": 0,
                "Secondary_Decay_Time_Constant": 3650,
                "Vaccine_Take": 1,
                "Vaccine_Type": "StrainSpecific",
                "class": "SimpleImmunoglobulin"
            },
            "Target_Demographic": "ExplicitAgeRanges",
            "Target_Age_Min": 0,
            "Target_Age_Max": 5,
            "Property_Restrictions": [
                "Place:Urban"
            ],
            "class": "StandardInterventionDistributionEventCoordinator"
        },
        "Nodeset_Config": {
            "class": "NodeSetAll"
        },
        "Start_Day": 30,
        "class": "CampaignEvent"
    }]
}