Chapter 13: Transmission

FRED was originally designed to model the transmission of infectious diseases from one person to another within a population. The concept of transmission can also be applied to many aspects of social behavior.

One way that agents interact in FRED is through a process called transmission. Transmission means that one agent causes another agent to enter a certain state within a condition. The first agent is said to be transmissible for the condition, and the second agent is said to be susceptible to the condition. We also say that the first agent exposes the second agent to the condition. Transmission can also be caused by the action of the Meta agent.


There are three forms of transmissibility that each serve a different function in FRED models:

  • the transmissibility of a condition

  • the transmissibility of each agent

  • the transmissible actions of the Meta agent.

Each of these is described below.

The Transmissibility of a Condition

To make a condition transmissible, the FRED program must declare a transmissibility property for the condition:

transmissibility = <value>

The value (0 by default) is the level of contagiousness for the condition and is used to determine the probability that an encounter between a transmissible agent and susceptible agent results in a transmission event. The higher the value, the greater the likelihood of contagion from one agent to another. A value of 1.0 corresponds to the transmissibility of a “standard” influenza model (R0 = 1.4). The Section on calibration discusses how to set transmissibility for other conditions if the R0 is known.

Currently, the only mode of transmission built into FRED is “proximity transmission”, meaning that two agents must be in the same place at the same time for transmission to occur. Other modes of transmission, such as transmission via network contacts or transmission through environmental contact, require an explicit user-designed model.

Each transmissible condition must have a distinguished state called the exposed state. When an agent is exposed to a transmissible condition, the agent immediately goes into the state specified by the condition’s exposed_state property:

exposed_state = <state_name>

For example:

condition INFLUENZA {
        exposed_state = Exposed

tells FRED that if an agent who is infectious with INFLUENZA transmits the disease to another agent, the second agent will enter the state called Exposed. This name is not required; any state may be designated as the exposed_state.

The Transmissibility of an Agent

Each agent has an individual level of transmissibility for each transmissible condition. An agent’s transmissibility may change over time through an assignment statement:

<condition_name>.trans = <expression>

An agent’s transmissibility usually changes, for example, when the agent moves from a non-infectious state of a transmissible disease to an infectious state.

Each agent also has an individual level of susceptibility to each transmissible condition, and this may change depending on the state of the agent, controlled by the statement:

<condition_name>.sus =  <expression>

When a transmissible agent with individual transmissibility t interacts with a susceptible agent with individual susceptibility s, the probability of an exposure is proportional to T*t*s, where T is the transmissibility of the condition. The probability also depends on other factors like the contact likelihood in the place where they meet and other factors described below.

Transmission Actions by the Meta Agent

The Meta agent can change the transmissibility of a condition by executing the statement:

<condition_name>.trans = <expression>

The result is that the transmissibility of the named condition is changed to the value of the expression. The change stays in effect until the Meta agent changes the condition’s transmissibility again.

The Meta agent can cause a number of agents to be transmiited a condition by executing the statement:

import_exposures(<condition_name>, <expression>)

The first argument must be a name of a declared condition. The second argument is single-valued expression that is evaluated to determined the number of agent to be selected for exposure. The agents are selected without replacement from the population. The selected agents are exposed to the named condition with probability equal to their susceptibility.

  • An error occurs if this action executed by non-meta agent.

  • An error occurs if the number requested is greater than the population size.

  • An error occurs if the number requested is negative.

For example, the Meta agent selects ten agents for possible exposure to INFLUENZA with the statement:

import_exposures(INFLUENZA, 10)

Transmission Models

There are two ways to model transmission in FRED:

  • use the built-in transmission model

  • design a custom transmission model

The built-in transmission model is a simple model that applies to proximity transmission in places. That is, it applies when a transmissible agent interacts with susceptible agents in a given place at a given time. The built-in transmission model is designed to model respiratory transmission of disease such as influenza. While it is modifiable through a number of parameters described below, it is not intended to cover every option for modeling transmission. For example, it does not include transmission via contacts with surfaces (that is, fomite transmission), or the affects of exact distances between agents within a place.

In order to activate the built-in transmission model for a given condition, the condition definition must include the property:

condition <condition_name> {
    transmission_model = proximity

The default value for this property is transmission_model = none. With this default setting, the FRED program may include a fully customized transmission model that takes advantage of any features of FRED including, for example, the exact distance between two agents or user-defined agent attributes such as an individual agent’s viral load.

Custom models are required to model transmission modes such as transmission on networks (for example, sexually transmitted diseases or the spread of rumors). Custom models can also be designed to model vector transmission (for example, mosquito-borne diseases) or environmentally mediated conditions.

Examples of both the built-in transmission model and customized models are provided in the FRED Library.

Built-in Transmission in Places

This Section describes the built-in transmission model in FRED.

When transmissible and susceptible agents are present in the same place, a transmissible agent may transmit a condition to susceptible agent. Transmission is a stochastic event and depends on several factors including:

  • the transmissibility of the condition

  • the transmission mode for the place (by rate or by probability)

  • the hourly contact rate or contact probability for the place

  • the duration of the interactions in the place

  • random selections of which agents interacts during a given meeting

  • the transmissibility of the transmissible agent

  • the susceptibility of the susceptible agent

  • the similarity of ages if age biases are specific for the given place.

Each place type has a set of contact parameters that control proximity transmission between agents within the sites associated with the place type:

place <place_name> {
    contact_prob_for_condition_name> = 0
    contact_prob = 0
    contact_rate_for_<condition_name> = 0
    contact_rate = 0
    same_age_bias_for_<condition_name> = 0
    same_age_bias = 0

Potentially Transmissible Contacts

For each hourly step of the simulation and for each place that includes at least one transmissible agent, FRED determines the number of potentially transmissible contacts. That is, the number of contacts between a transmissible agent and a potentially susceptible agent.

For each type of place, the model can specify one of two options for computing potentially transmissible contacts: by rate or by probability.

Transmission by Contact Rate

Transmission by rate is the default contact mode for places in FRED. In this mode, each person is assumed to contact a specified number of other individuals during each hour that the place operates. In this mode, the total number of potential transmission contacts for a given condition in a place during its open hours on a given day is given by the formula:

contacts = (hourly contact rate of place) \* (number of transmissible
agents) \* (transmissibility of the condition) \* (duration of the
meeting in the place)

The hourly contact rate is, by default, the same for all places of a given place type and is set by the property:

contact_rate = <number>
contact_rate_for_<condition_name> = <number>

However, the group agents for individual places can change the contact rate using the adjust_contacts() function.

The first property specifies the contact rate per hour for all conditions. If a property of the second form occurs, it overrides the first property for the named condition. The default number of hourly contacts is 0.0. The following hourly contact properties are included in the default_model included in the default synthetic population:

place Household {
    contact_rate = 0.18

place School {
    contact_rate = 0.20

place Grade {
    contact_rate = 0.40

place Workplace {
    contact_rate = 0.12

place Block_Group {
    contact_rate = 0.27

place Census_Tract {
    contact_rate = 0.27

place County {
    contact_rate = 0.27

place Prison {
    contact_rate = 0.12

place College_Dorm {
    contact_rate = 0.12

place Nursing_Home {
    contact_rate = 0.12

place Barracks {
    contact_rate = 0.12


The above values were obtained through a calibration process to reflect the age bias observed in published contact matrices.

Transmission by Contact Probability

The second contact mode in places is transmission by probability. In this mode, each transmissible agent has a fixed probability of contacts with any other agent within any given hour that the place is in operation. In this mode, the total number of potential transmission contacts for a given condition in a place during its open hours on a given day is given by the formula:

contacts = (hourly contact probability of place) * (number of members
of the place -1) * (number of transmissible agents) *
(transmissibility of the condition) * (duration of the meeting in
the place)

To select the transmission by probability mode, the definition of the place type includes the following properties:

place PlaceType {
    contact_prob = <number>
    contact_prob_for_<condition_name> = <number>

The first property specifies the contact probability per hour for all conditions. If a property of the second form occurs, it overrides the first property for the named Condition.

For example,

place School {
    contact_prob_for_INF = 0.0001

The effect is to use transmission by probability for the INF condition with a probability = 0.0001 for contact occurring between any two individuals in a given hour of time in the school setting.

Selecting a Transmission Mode

The choice of appropriate transmission mode may vary according to the purpose of the model and by each condition. Transmission by contact rate is independent of density, and transmission by contact probability is dependent on density. For example, if a condition is transmitted through close contacts between individuals, then a density independent mode may be appropriate because an individual can only have a limited number of close contacts within a given time period. On the other hand, if a condition is freely transmitted to everyone an individual comes into slight contact with (for example, a highly contagious respiratory disease like measles), then a density-dependent transmission mode may be more appropriate because an infectious individual may transmit the condition to some fraction of the other individuals in a given crowded place.

Transmission from a Source to a Target

For each potential transmission contact event, FRED selects a transmissible agent at random, the source, and one other agent at random, the target, from the set of members of the place. The source and the target must be distinct agents.

The probability that the source successfully exposes the target is:

probability of transmission = (transmissibility of source) *
(susceptibility of target) * (same_age_bias)

Same-age Bias

The final term in the equation above is a factor the reflects the tendency of agents of similar age to interact with a given place and is controlled by the property:

place <place_id> {
    same_age_bias = <number>

There is also a simulation property that enables transmission in places to take age-bias into account, and it is enabled by default:

simulation {
    enable_transmission_bias = 1

If the place has a positive age-bias, the bias is computed by the formula:

same-age-bias(source, target) = exp(-(same_age_bias of place)*(|age_of_source - age_of_target|))

That is, the probability of transmission decreases with a larger difference in age between the interacting agents.

The following age-bias properties are included in the default_model included in the default synthetic population:

place Household {
    same_age_bias = 0.05

place Block_Group {
    same_age_bias = 0.1

place Census_Tract {
    same_age_bias = 0.1

place County {
    same_age_bias = 0.1


The above values were selected to reflect the age bias observed in published contact matrices. The bias factors in community settings such as Block_Group, Census_Tract, and County model the tendency of people to interact with others closers to their own age.

Notes on Transmission in Places

There several important details in this process:

  • Agents do not contact themselves in this process. Each contact is assumed to be between two distinct agents.

  • The source and target agents may be selected more than once. That is, if an agent in a given place is assumed to have n contacts per day, it is not assumed that these contacts are necessarily with n distinct other agents.

  • The target is selected among all current members of the place, not just those currently attending the place. In other words, it is possible that the target agent is absent when selected. The assumption here is that the number of contacts per agent per place is the nominal number of contacts if everyone is present. If many agents are absent (due to staying home sick, for example), then the number of contacts is effectively reduced proportionally.

  • The selection of the target is independent of the susceptibility, that is, the target is not necessarily susceptible.

Custom Transmission in Places

FRED program may include a custom model of transmission in places for any condition.

condition <condition_name> {
   transmissibility = <value>
   transmission_model = none
   exposed_state = <state_name>

The value for transmissibility must be greater than 0. The transmission_model is none by default so this line is optional. The exposed_state must be the name of a defined state within the condition. When agents are exposed to the condition, they will immediately transition to the exposed state.

In a custom place-based transmission model, the transmission between agents is controlled by the group agent associated with a place site. The group agent may transmit a condition to from a source agent to a destination agent using the action:

transmit(<condition_name>, <source_agent_id>, <destination_agent_id>)

The rules that the group agent uses to select the source agent and the destination agent are defined by the user model. For example, the group agent may or may not take into account the transmissibility of the source agent, the susceptibility of the destination agent, the ages of the agents, the position of the agents, or any other factors such as the agents’ individual viral load, etc.

Transmission by the Meta Agent

The Meta agent may cause transmissions in either the built-in transmission model or custom transmission models, using the same action as described in the last section:

transmit(<condition_name>, <source_agent_id>, <destination_agent_id>)

To model the importation of an exposure (that is, the introduction of a case from an unknown source), the Meta agent can use itself as the source agent:

transmit(<condition_name>, id, <destination_agent_id>)

When the Meta agent transmits to a destination agent, the location of the exposure has the value UNKNOWN.

Other Ways to Model Transmission

Both the built-in transmission model and the transmit() action are provided for convenience, but it is not necessary to use either to model the transmission of a condition from one agent to another. In some cases, it may be more convenient for a model to use the more general action send():

send(<agent_id>, <condition_name>, <state_name>)

This action may be executed by any agent and sends the indicated agent to the indicated state. In a fully customized transmission model, this action can be used to transmit the given state to any agent using whatever rules are appropriate to the given model.