org.eclipse.ohf.stem.diseasemodels.standard
Interface SI

All Superinterfaces:
Decorator, DiseaseModel, org.eclipse.emf.ecore.EObject, Identifiable, NodeDecorator, org.eclipse.emf.common.notify.Notifier, SanityChecker, StandardDiseaseModel
All Known Subinterfaces:
AggregatingSEIRDiseaseModel, AggregatingSIDiseaseModel, AggregatingSIRDiseaseModel, DeterministicSEIRDiseaseModel, DeterministicSIDiseaseModel, DeterministicSIRDiseaseModel, SEIR, SIR, StochasticSEIRDiseaseModel, StochasticSIDiseaseModel, StochasticSIRDiseaseModel
All Known Implementing Classes:
AggregatingSEIRDiseaseModelImpl, AggregatingSIDiseaseModelImpl, AggregatingSIRDiseaseModelImpl, DeterministicSEIRDiseaseModelImpl, DeterministicSIDiseaseModelImpl, DeterministicSIRDiseaseModelImpl, SEIRImpl, SIImpl, SIRImpl, StochasticSEIRDiseaseModelImpl, StochasticSIDiseaseModelImpl, StochasticSIRDiseaseModelImpl

public interface SI
extends StandardDiseaseModel

A DiseaseModel with two states Susceptible and Infectious (SI).

The basic SI (Susceptible, Infectious) disease model assumes a uniform population at a single location and that the population members are well "mixed", meaning that they are equally likely to meet and infect each other. This model, for a normalized population, is defined by the two equations below:

Where:

In the first equation, the Susceptible population increases when new members are born. This value is the birth rate μ multiplied by the total population, which, because the values are normalized, is 1. It also increases due to Infectious population members recovering. The Susceptible population decreases by members who die. That value is μ, the mortality rate, multiplied by the Susceptible population, s. The Susceptible population also decreases by having members become infected. The product of β and i gives the normalized number of Susceptible population members that would become infected for each Infectious population member assuming all population members are in the Susceptible state. Multiplying that by s, the fraction that actually are Susceptible, gives the normalized amount that become Infectious.

In the second equation, the Infectious population increases by the number of Susceptible population members that become Infectious (the first term). It also decreases by the proportion that Recover from the disease (middle term) and by the proportion that die (last term).

Frequently, being infected by a disease will increase the likelihood that a population member will die. The model above needs to be enhanced to include the likelihood of a fatal infection and a potentially different rate at which infected members die.

Let

Thus, we now have two types of Infectious population members, those that will eventually recover at rate σ, and those that will eventually die at rate μi (of course, members in both states still die at the background rate μ).

Let

We modify our model to include these additional states and rates.

Spatial Adaptation

The "SI" disease model computations in STEM enhance these equations by adapting them to populations that are spatially distributed. This relaxes the assumption that the populations are at a single location and opens up the possibility that different locations could have different areas and numbers of population members (i.e., different population densities). To accommodate this situation STEM maintains separate disease state values for each location and uses unnormalized versions of the equations presented above. We develop those below.

To account for population differences at different locations, we define a new parameter Pl which is the number of population members at location l (Note: Pl = S + I). We also need to account for variability in the disease transmission (infection) rate, β, due to potentially different population densities. This modification is based upon the assumption that locations with greater population densities will have a higher effective transmission rates than locations with lower densities (i.e., one value can't be used for all locations). Thus, we need to replace the β in the non-spatial versions of the equations with a β l that is specific to the location.

Making the substitution for β and multiply both sides of the equations by Pl, we obtain:

We choose the value for βl to be original β scaled by the ratio between the population density at the location and the average population density of all locations. Where dl is the population density at location l, and APD is the average population density for all locations.

Let Sl = s Pl be the number of Susceptible population members at location l. , let Il = i Pl be the number of population members at location l that are Infectious (both states combined). For readability, we drop the l subscript and substitute.

Continuing with i = I/Pl, we have: Letting β* = βl/Pl = β (dl/(APD * Pl)) gives:

Computing β* is straightforward. Let TSFl = (dl/(APD * Pl) be the transmission scale factor at location l.

Thus

Substituting Pl = S + I, APD = P/Area and dl = (S+I)/Areal, where P is the total population for all locations, Areal is the area of location l, and Area is the total area of all locations, we get:

So the TSFl is the product of the reciprocal of the total population of all locations and the constant ratio between the area of the location and the total area of all locations. The former can be computed by accumulating the population of all locations as they are generated and the later ratio can be computed once at the start of the simulation.

Neighboring Infectious Populations

The extension of the non-spatial model into a spatial one in STEM also needs to account for infectious population members that reside in a location's "neighbors". Consider a location with no infections that is physically adjacent to several locations that have large infectious populations. This physical adjacency would naturally lead to population-to-population contact and eventually to disease transmission. We need to further extend the equations we are here to incorporate this aspect of a spatially distributed population.

In STEM, a location has another location as a neighbor Relationship that links it to that location. If the Relationship represents the exchange of of population members (i.e., some kind of transportation relationship like pathways, roads or air travel) then it would be possible for Infectious population members from a neighbor to "visit" a location. We need to account for this potential by increasing the "effective" Infectious population at a location when doing our computations. Each Relationship has a rate at which population members travel from one location to another. It is assumed that the visitors would have the same level of "infectious contact" as an infectious member of the population at the current location (i.e., that they could could be counted as an infectious member of the population at the current location).

The equations become:

Where

Specific statistics on the total number of births, deaths and deaths due to the disease can be computed by adding the appropriate terms of the equations above.

See Also:
SIImpl#computeInfectiousMortalityRate(double, double), SIRLabel, SIRLabel, SIRLabelValue, SEIR, SEIRLabel, SEIRLabelValue

Field Summary
static java.lang.String URI_TYPE_STANDARD_SI_DISEASE_MODEL_SEGMENT
          This is the segment of the type URI that prefixes all other segments in a standard disease model type URI.
 
Fields inherited from interface org.eclipse.ohf.stem.diseasemodels.standard.StandardDiseaseModel
URI_TYPE_STANDARD_DISEASEMODEL_SEGMENT
 
Fields inherited from interface org.eclipse.ohf.stem.diseasemodels.standard.DiseaseModel
URI_TYPE_DISEASEMODEL_SEGMENT
 
Method Summary
 double getAdjustedInfectiousMortalityRate(long timeDelta)
          Compute the infectious mortality rate adjusted for a time delta potentially different from the time period specified for the rate.
 double getAdjustedRecoveryRate(long timeDelta)
          Compute the recovery rate adjusted for a time delta potentially different from the time period specified for the rate.
 double getAdjustedTransmissionRate(long timeDelta)
          Compute the transmission rate adjusted for a time delta potentially different from the time period specified for the rate.
 double getInfectiousMortality()
          This is the proportion of the Infectious population members that will die due to the disease.
 double getInfectiousMortalityRate()
          This is the proportion which fatally Infectious population members die per time period.
 double getNonLinearityCoefficient()
          By default this exponent is one (1.0) and the rate of infection scales as the product of the Susceptible population and the Infectious population.
 double getPhysicallyAdjacentInfectious(Node node)
           
 double getPhysicallyAdjacentInfectiousProportion()
          Two Nodes that share a border exchange population members through otherwise unmodeled transportation routes.
 double getRecoveryRate()
          This coefficient determines the number of population members that recover from the disease per population member in the Infectious state.
 double getTransmissionRate()
          This is the proportion of population members that become infected/exposed per population member in the Infectious state, assuming the entire population is in the Susceptible state, per time period.
 void setInfectiousMortality(double value)
          Sets the value of the 'Infectious Mortality' attribute.
 void setInfectiousMortalityRate(double value)
          Sets the value of the 'Infectious Mortality Rate' attribute.
 void setNonLinearityCoefficient(double value)
          Sets the value of the 'Non Linearity Coefficient' attribute.
 void setPhysicallyAdjacentInfectiousProportion(double value)
          Sets the value of the 'Physically Adjacent Infectious Proportion' attribute.
 void setRecoveryRate(double value)
          Sets the value of the 'Recovery Rate' attribute.
 void setTransmissionRate(double value)
          Sets the value of the 'Transmission Rate' attribute.
 
Methods inherited from interface org.eclipse.ohf.stem.diseasemodels.standard.StandardDiseaseModel
addToTotalArea, addToTotalPopulationCount, computeTotalPopulationCountReciprocal, getTotalArea, getTotalPopulationCount, getTotalPopulationCountReciprocal, setTotalArea, setTotalPopulationCount
 
Methods inherited from interface org.eclipse.ohf.stem.diseasemodels.standard.DiseaseModel
createDiseaseModelLabel, createDiseaseModelLabelValue, createDiseaseModelState, createInfector, getAdjustedBackgroundMortalityRate, getBackgroundMortalityRate, getDiseaseName, getPopulationIdentifier, getTimePeriod, initializeDiseaseState, initializeDiseaseState, setBackgroundMortalityRate, setDiseaseName, setPopulationIdentifier, setTimePeriod
 
Methods inherited from interface org.eclipse.ohf.stem.core.model.Decorator
decorateGraph, getGraph, getLabelsToUpdate, resetLabels, setGraph, updateLabels
 
Methods inherited from interface org.eclipse.ohf.stem.core.common.Identifiable
getDublinCore, getTypeURI, getURI, sane, setDublinCore, setTypeURI, setURI
 
Methods inherited from interface org.eclipse.emf.ecore.EObject
eAllContents, eClass, eContainer, eContainingFeature, eContainmentFeature, eContents, eCrossReferences, eGet, eGet, eIsProxy, eIsSet, eResource, eSet, eUnset
 
Methods inherited from interface org.eclipse.emf.common.notify.Notifier
eAdapters, eDeliver, eNotify, eSetDeliver
 

Field Detail

URI_TYPE_STANDARD_SI_DISEASE_MODEL_SEGMENT

static final java.lang.String URI_TYPE_STANDARD_SI_DISEASE_MODEL_SEGMENT
This is the segment of the type URI that prefixes all other segments in a standard disease model type URI.

See Also:
Constant Field Values
Method Detail

getInfectiousMortality

double getInfectiousMortality()
This is the proportion of the Infectious population members that will die due to the disease. A value of 0.10 would correspond to a 10% increase in deaths due to the disease. This is independent of the time period. This is x.

Returns:
the infectious mortality

setInfectiousMortality

void setInfectiousMortality(double value)
Sets the value of the 'Infectious Mortality' attribute.

Parameters:
value - the new value of the 'Infectious Mortality' attribute.
See Also:
getInfectiousMortality()

getInfectiousMortalityRate

double getInfectiousMortalityRate()
This is the proportion which fatally Infectious population members die per time period. This is μi.

Returns:
the number of fatally infected population members that die per time period.
See Also:
getInfectiousMortality(), DiseaseModel.getBackgroundMortalityRate()

setInfectiousMortalityRate

void setInfectiousMortalityRate(double value)
Sets the value of the 'Infectious Mortality Rate' attribute.

Parameters:
value - the new value of the 'Infectious Mortality Rate' attribute.
See Also:
getInfectiousMortalityRate()

getAdjustedInfectiousMortalityRate

double getAdjustedInfectiousMortalityRate(long timeDelta)
Compute the infectious mortality rate adjusted for a time delta potentially different from the time period specified for the rate.

Parameters:
timeDelta - the time period (milliseconds) to which the rate is to be adjusted.
Returns:
the adjusted rate

getTransmissionRate

double getTransmissionRate()
This is the proportion of population members that become infected/exposed per population member in the Infectious state, assuming the entire population is in the Susceptible state, per time period.

In the rate equation this coefficient is normalize by the ratio of the Susceptible population to the total population. The final value may also be rescaled based on variations in local population density (above or below average). This is β.

Returns:
the number of population members that become infected per time period

setTransmissionRate

void setTransmissionRate(double value)
Sets the value of the 'Transmission Rate' attribute.

Parameters:
value - the new value of the 'Transmission Rate' attribute.
See Also:
getTransmissionRate()

getAdjustedTransmissionRate

double getAdjustedTransmissionRate(long timeDelta)
Compute the transmission rate adjusted for a time delta potentially different from the time period specified for the rate.

Parameters:
timeDelta - the time period (milliseconds) to which the rate is to be adjusted.
Returns:
the adjusted rate

getNonLinearityCoefficient

double getNonLinearityCoefficient()
By default this exponent is one (1.0) and the rate of infection scales as the product of the Susceptible population and the Infectious population. In a nonlinear model (which captures saturation of the immune system for Susceptible population), the Infectious term is raise to this power (>= 1.0) This exponent should never be less than one (that would imply Susceptible population would become less susceptible as their probability of exposure increases.

Returns:
the non-linearity coefficient

setNonLinearityCoefficient

void setNonLinearityCoefficient(double value)
Sets the value of the 'Non Linearity Coefficient' attribute.

Parameters:
value - the new value of the 'Non Linearity Coefficient' attribute.
See Also:
getNonLinearityCoefficient()

getRecoveryRate

double getRecoveryRate()
This coefficient determines the number of population members that recover from the disease per population member in the Infectious state. This is σ.

Returns:
the number of population members that recover per time period

setRecoveryRate

void setRecoveryRate(double value)
Sets the value of the 'Recovery Rate' attribute.

Parameters:
value - the new value of the 'Recovery Rate' attribute.
See Also:
getRecoveryRate()

getAdjustedRecoveryRate

double getAdjustedRecoveryRate(long timeDelta)
Compute the recovery rate adjusted for a time delta potentially different from the time period specified for the rate.

Parameters:
timeDelta - the time period (milliseconds) to which the rate is to be adjusted.
Returns:
the adjusted rate

getPhysicallyAdjacentInfectiousProportion

double getPhysicallyAdjacentInfectiousProportion()
Two Nodes that share a border exchange population members through otherwise unmodeled transportation routes. This is the proportion of the infectious population members in any adjacent Node to include in the computations of another Node.

Returns:
the proportion of the infectious population in physically adjacent Nodes that contribute to the effective infectious population at the current Node.

setPhysicallyAdjacentInfectiousProportion

void setPhysicallyAdjacentInfectiousProportion(double value)
Sets the value of the 'Physically Adjacent Infectious Proportion' attribute.

Parameters:
value - the new value of the 'Physically Adjacent Infectious Proportion' attribute.
See Also:
getPhysicallyAdjacentInfectiousProportion()

getPhysicallyAdjacentInfectious

double getPhysicallyAdjacentInfectious(Node node)
Returns:
the number of infectious population members in Nodes that share a CommonBorderRelationshipLabel with this Node.