HIVMuxer

The HIVMuxer intervention class is a method of placing groups of individuals into a waiting pattern for the next event, and is based on DelayedIntervention. HIVMuxer adds the ability to limit the number of times an individual can be registered with the delay, which ensures that an individual is only provided with the delay one time. For example, without HIVMuxer, an individual could be given an exponential delay twice, effectively doubling the rate of leaving the delay.

Note

Parameters are case-sensitive. For Boolean parameters, set to 1 for true or 0 for false. Minimum, maximum, or default values of “NA” indicate that those values are not applicable for that parameter.

EMOD does not use true defaults; that is, if the dependency relationships indicate that a parameter is required, you must supply a value for it. However, many of the tools used to work with EMOD will use the default values provided below.

JSON format does not permit comments, but you can add “dummy” parameters to add contextual information to your files. Any keys that are not EMOD parameter names will be ignored by the model.

The table below describes all possible parameters with which this class can be configured. The JSON example that follows shows one potential configuration.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Broadcast_Event

string

NA

NA

“”

The event that should occur at the end of the delay period. See Event list for possible values.

{
    "Broadcast_Event": "LTFU0"
}

Broadcast_On_Expiration_Event

string

NA

NA

“”

If the delay intervention expires before arriving at the end of the delay period, this specifies the event that should occur. For example, if loss to follow-up occurs at a high rate for the first 6 months of care, and then later transitions to a lower rate, then the Expiration_Period should be set to 183 days and Broadcast_On_Expiration_Event can link to another delay intervention with a longer average delay time until loss to follow up (LTFU). If LTFU does not occur in the first 6 months, then the expiration will allow the first rate to give way to the post-6-month rate. See the list of available events for possible values. See Event list for possible values.

{
    "Broadcast_On_Expiration_Event": "OnART8"
}

Coverage

float

0

1

1

The proportion of individuals who receive the DelayedIntervention that actually receive the configured interventions.

{
    "Coverage": 1.0
}

Delay_Period_Constant

float

0

3.40282E+38

-1

The delay period to use for all interventions, in days, when Delay_Period_Distribution is set to CONSTANT_DISTRIBUTION.

{
    "Delay_Period_Distribution": "CONSTANT_DISTRIBUTION",
    "Delay_Period_Constant": 8
}

Delay_Period_Distribution

enum

NA

NA

NOT_INITIALIZED

The distribution type to use for assigning the delay period for distributing interventions. Each assigned value is a random draw from the distribution.

Possible values are:

NOT_INITIALIZED

No distribution set.

CONSTANT_DISTRIBUTION

Use the same value for each individual. Set Delay_Period_Constant.

UNIFORM_DISTRIBUTION

Use a uniform distribution with a given minimum and maximum. Set Delay_Period_Max and Delay_Period_Min.

GAUSSIAN_DISTRIBUTION

The distribution is Gaussian (or normal). Values are resampled to ensure >= 0. Set Delay_Period_Gaussian_Mean and Delay_Period_Gaussian_Std_Dev.

EXPONENTIAL_DISTRIBUTION

The distribution is exponential with a given mean. Set Delay_Period_Exponential.

WEIBULL_DISTRIBUTION

Use a Weibull distribution with a given shape and scale. Set Delay_Period_Kappa and Delay_Period_Lambda.

LOG_NORMAL_DISTRIBUTION

Use a log-normal distribution with a given mean and width. Set Delay_Period_Log_Normal_Mean and Delay_Period_Log_Normal_Width.

POISSON_DISTRIBUTION

Use a Poisson distribution with a given mean. Set Delay_Period_Poisson_Mean.

DUAL_CONSTANT_DISTRIBUTION

Use a distribution where some individuals are set to a value of zero and the rest to a given value. Set Delay_Period_Proportion_0 and Peak_2_Value. This distribution does not use the parameters set for CONSTANT_DISTRIBUTION.

DUAL_EXPONENTIAL_DISTRIBUTION

Use two exponential distributions with given means. Set Delay_Period_Mean_1, Delay_Period_Mean_2, and Delay_Period_Proportion_1. This distribution does not use the parameters set for EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Delay_Period_Gaussian_Mean": 8,
    "Delay_Period_Gaussian_Std_Dev": 1.5
}

Delay_Period_Exponential

float

0

3.40282E+38

-1

The mean of the delay period, in days, when Delay_Period_Distribution is set to EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "EXPONENTIAL_DISTRIBUTION",
    "Delay_Period_Exponential": 4.25
}

Delay_Period_Gaussian_Mean

float

0

3.40282E+38

-1

The mean of the delay period, in days, when Delay_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Delay_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Delay_Period_Gaussian_Mean": 8,
    "Delay_Period_Gaussian_Std_Dev": 1.5
}

Delay_Period_Gaussian_Std_Dev

float

1.17549E-38

3.40282E+38

-1

The standard deviation of the delay period, in days, when Delay_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Delay_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Delay_Period_Gaussian_Mean": 8,
    "Delay_Period_Gaussian_Std_Dev": 1.5
}

Delay_Period_Kappa

float

1.17549E-38

3.40282E+38

-1

The shape value for the delay period, in days, when Delay_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Delay_Period_Kappa": 0.9,
    "Delay_Period_Lambda": 1.5
}

Delay_Period_Lambda

float

1.17549E-38

3.40282E+38

-1

The scale value for the delay period, in days, when Delay_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Delay_Period_Kappa": 0.9,
    "Delay_Period_Lambda": 1.5
}

Delay_Period_Log_Normal_Mu

float

-3.40282e+38

1.70141e+38

3.40282e+38

The mean of the natural log of the delay period, in days, when Delay_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Delay_Period_Log_Normal_Mu": 9,
    "Delay_Period_Log_Normal_Sigma": 2
}

Delay_Period_Log_Normal_Sigma

float

-3.40282e+38

1.70141e+38

3.40282E+38

The standard deviation of the natural log of the delay period, in days, when Delay_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Delay_Period_Log_Normal_Mu": 9,
    "Delay_Period_Log_Normal_Sigma": 2
}

Delay_Period_Max

float

0

3.40282E+38

-1

The maximum delay period, in days, when Delay_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Delay_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Delay_Period_Min": 2,
    "Delay_Period_Max": 7
}

Delay_Period_Mean_1

float

1.17549E-38

3.40282E+38

-1

The mean of the first exponential distribution, in days, when Delay_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Delay_Period_Mean_1": 4,
    "Delay_Period_Mean_2": 12,
    "Delay_Period_Proportion_1": 0.2
}

Delay_Period_Mean_2

float

1.17549E-38

3.40282E+38

-1

The mean of the second exponential distribution, in days, when Delay_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Delay_Period_Mean_1": 4,
    "Delay_Period_Mean_2": 12,
    "Delay_Period_Proportion_1": 0.2
}

Delay_Period_Min

float

0

3.40282E+38

-1

The minimum delay period, in days, when Delay_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Delay_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Delay_Period_Min": 2,
    "Delay_Period_Max": 7
}

Delay_Period_Peak_2_Value

float

0

3.40282E+38

-1

The delay period value to assign to the remaining interventions, in days, when Delay_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Delay_Period_Proportion_0": 0.25,
    "Delay_Period_Peak_2_Value": 5
}

Delay_Period_Poisson_Mean

float

0

3.40282E+38

-1

The mean of the delay period, in days, when Delay_Period_Distribution is set to POISSON_DISTRIBUTION.

{
    "Delay_Period_Distribution": "POISSON_DISTRIBUTION",
    "Delay_Period_Poisson_Mean": 5
}

Delay_Period_Proportion_0

float

0

1

-1

The proportion of interventions to assign a value of zero delay when Delay_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Delay_Period_Proportion_0": 0.25,
    "Delay_Period_Peak_2_Value": 5
}

Delay_Period_Proportion_1

float

0

1

-1

The proportion of interventions in the first exponential distribution when Delay_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Delay_Period_Mean_1": 4,
    "Delay_Period_Mean_2": 12,
    "Delay_Period_Proportion_1": 0.2
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Expiration_Period

float

0

3.40282e+38

3.40E+38

A fixed time period, in days, after which the Broadcast_On_Expiration_Event occurs instead of the Broadcast_Event. Only applied if the Expiration_Period occurs earlier than the end of the delay period. For example, if loss to follow-up (LTFU) occurs at a high rate for the first 6 months of care, and then later transitions to a lower rate, then the Expiration_Period should be set to 183 days and Broadcast_On_Expiration_Event can link to another delay intervention with a longer average delay time until LTFU. If LTFU does not occur in the first 6 months, then the expiration will allow the first rate to give way to the post-6-month rate.

{
    "Expiration_Period": 183
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "class": "HIVMuxer",
        "Intervention_Name": "Delay for clinic care"
    }
}

Max_Entries

integer

0

2147480000.0

1

The maximum number of times the individual can be registered with the HIVMuxer delay. Determines what should happen if an individual reaches the HIVMuxer stage of health care multiple times. For example, registering for an exponential delay two times effectively doubles the rate of leaving the delay. Setting Max_Entries to 1 prevents the rate from doubling.

{
    "Actual_IndividualIntervention_Config": {
        "class": "HIVMuxer",
        "Muxer_Name": "ARTDropoutDelay",
        "Max_Entries": 1
    }
}

Muxer_Name

string

NA

NA

NA

A name used to identify the delay and check whether individuals have entered it multiple times. If the same name is used at multiple points in the health care process, then the number of entries is combined when Max_Entries is applied.

{
    "Actual_IndividualIntervention_Config": {
        "class": "HIVMuxer",
        "Muxer_Name": "ARTDropoutDelay",
        "Max_Entries": 1
    }
}

New_Property_Value

string

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Times

array of floats

0

999999

NA

An array of years.

{
    "Times": [
        1998,
        2000,
        2003,
        2006,
        2009
    ],
    "Values": [
        0,
        0.26,
        0.08,
        0.14,
        0.54
    ]
}

Values

array of floats

0

3.40282e+38

NA

An array of values to match the defined Times.

{
    "Times": [
        1998,
        2000,
        2003,
        2006,
        2009
    ],
    "Values": [
        0,
        0.26,
        0.08,
        0.14,
        0.54
    ]
}
{
  "Use_Defaults": 1,
  "Campaign_Name": "4C: HIVMuxer",
  "Events": [
    {
      "Description": "Drive initial population into a loop",
      "class": "CampaignEvent",
      "Start_Day": 1,
      "Nodeset_Config": {
        "class": "NodeSetAll"
      },
      "Event_Coordinator_Config": {
        "class": "StandardInterventionDistributionEventCoordinator",
        "Intervention_Config": {
          "class": "BroadcastEvent",
          "Broadcast_Event": "Loop_Entry_InitialPopulation"
        }
      }
    },
    {
      "Description": "Drive births into the same loop",
      "class": "CampaignEvent",
      "Start_Day": 1,
      "Nodeset_Config": {
        "class": "NodeSetAll"
      },
      "Event_Coordinator_Config": {
        "class": "StandardInterventionDistributionEventCoordinator",
        "Intervention_Config": {
          "class": "BirthTriggeredIV",
          "Actual_IndividualIntervention_Config": {
            "class": "BroadcastEvent",
            "Broadcast_Event": "Loop_Entry_Birth"
          }
        }
      }
    },
    {
      "Description": "Attempt to drive entire population into loop again, HIVMuxer should disallow entry",
      "class": "CampaignEvent",
      "Start_Day": 1095,
      "Nodeset_Config": {
        "class": "NodeSetAll"
      },
      "Event_Coordinator_Config": {
        "class": "StandardInterventionDistributionEventCoordinator",
        "Intervention_Config": {
          "class": "BroadcastEvent",
          "Broadcast_Event": "Loop_Entry_InitialPopulation"
        }
      }
    },
    {
      "Description": "Wait one year, only one entry allowed at a time per individual",
      "class": "CampaignEvent",
      "Start_Day": 1,
      "Nodeset_Config": {
        "class": "NodeSetAll"
      },
      "Event_Coordinator_Config": {
        "class": "StandardInterventionDistributionEventCoordinator",
        "Intervention_Config": {
          "class": "NodeLevelHealthTriggeredIV",
          "Trigger_Condition": "TriggerList",
          "Trigger_Condition_List": [
            "Loop_Entry_InitialPopulation",
            "Loop_Entry_Birth",
            "Done_Waiting"
          ],
          "Actual_IndividualIntervention_Config": {
            "class": "HIVMuxer",
            "Disqualifying_Properties": [
              "InterventionStatus:Abort_Infinite_Loop"
            ],
            "New_Property_Value": "InterventionStatus:Infinite_Loop",
            "Delay_Period_Distribution": "CONSTANT_DISTRIBUTION",
            "Delay_Period_Constant": 365,
            "Muxer_Name": "Delay_Loop_Muxer",
            "Max_Entries": 1,
            "Broadcast_Event": "Done_Waiting"
          }
        }
      }
    }
  ]
}