Skip to content

Commit

Permalink
📝 update SEIR/SEIS references
Browse files Browse the repository at this point in the history
  • Loading branch information
GiulioRossetti committed Oct 12, 2020
1 parent 7f12d34 commit ae3be26
Show file tree
Hide file tree
Showing 5 changed files with 224 additions and 6 deletions.
7 changes: 4 additions & 3 deletions docs/reference/models/epidemics/SEIR.rst
@@ -1,6 +1,6 @@
****
SEIR
****
*********
SEIR (DT)
*********


In the SEIR model [#]_, during the course of an epidemics, a node is allowed to change its status from **Susceptible** (S) to **Exposed** (E) to **Infected** (I), then to **Removed** (R).
Expand All @@ -9,6 +9,7 @@ The model is instantiated on a graph having a non-empty set of infected nodes.

SEIR assumes that if, during a generic iteration, a susceptible node comes into contact with an infected one, it becomes infected after an exposition period with probability beta, than it can switch to removed with probability gamma (the only transition allowed are S→E→I→R).

This implementation assumes discrete time dynamics for the E->I and I->R transitions.

--------
Statuses
Expand Down
108 changes: 108 additions & 0 deletions docs/reference/models/epidemics/SEIR_ct.rst
@@ -0,0 +1,108 @@
*********
SEIR (CT)
*********


In the SEIR model [#]_, during the course of an epidemics, a node is allowed to change its status from **Susceptible** (S) to **Exposed** (E) to **Infected** (I), then to **Removed** (R).

The model is instantiated on a graph having a non-empty set of infected nodes.

SEIR assumes that if, during a generic iteration, a susceptible node comes into contact with an infected one, it becomes infected after an exposition period with probability beta, than it can switch to removed with probability gamma (the only transition allowed are S→E→I→R).

This implementation assumes continuous time dynamics for the E->I and I->R transitions.

--------
Statuses
--------

During the simulation a node can experience the following statuses:

=========== ====
Name Code
=========== ====
Susceptible 0
Infected 1
Exposed 2
Removed 3
=========== ====

----------
Parameters
----------

===== ===== =============== ======= ========= =====================
Name Type Value Type Default Mandatory Description
===== ===== =============== ======= ========= =====================
beta Model float in [0, 1] True Infection probability
gamma Model float in [0, 1] True Removal probability
alpha Model float in [0, 1] True Latent period
===== ===== =============== ======= ========= =====================

The initial infection status can be defined via:

- **fraction_infected**: Model Parameter, float in [0, 1]
- **Infected**: Status Parameter, set of nodes

The two options are mutually exclusive and the latter takes precedence over the former.

-------
Methods
-------

The following class methods are made available to configure, describe and execute the simulation:

^^^^^^^^^
Configure
^^^^^^^^^
.. autoclass:: ndlib.models.epidemics.SEIR_ct_Model.SEIRctModel
.. automethod:: ndlib.models.epidemics.SEIR_ct_Model.SEIRctModel.__init__(graph)

.. automethod:: ndlib.models.epidemics.SEIR_ct_Model.SEIRctModel.set_initial_status(self, configuration)
.. automethod:: ndlib.models.epidemics.SEIR_ct_Model.SEIRctModel.reset(self)

^^^^^^^^
Describe
^^^^^^^^

.. automethod:: ndlib.models.epidemics.SEIR_ct_Model.SEIRctModel.get_info(self)
.. automethod:: ndlib.models.epidemics.SEIR_ct_Model.SEIRctModel.get_status_map(self)

^^^^^^^^^^^^^^^^^^
Execute Simulation
^^^^^^^^^^^^^^^^^^
.. automethod:: ndlib.models.epidemics.SEIR_ct_Model.SEIRctModel.iteration(self)
.. automethod:: ndlib.models.epidemics.SEIR_ct_Model.SEIRctModel.iteration_bunch(self, bunch_size)


-------
Example
-------

In the code below is shown an example of instantiation and execution of an SEIR simulation on a random graph: we set the initial set of infected nodes as % of the overall population, a probability of infection of 1%, a removal probability of 0.5% and an incubation period of 5% (e.g. 20 iterations).

.. code-block:: python
import networkx as nx
import ndlib.models.ModelConfig as mc
import ndlib.models.epidemics as ep
# Network topology
g = nx.erdos_renyi_graph(1000, 0.1)
# Model selection
model = ep.SEIRctModel(g)
# Model Configuration
cfg = mc.Configuration()
cfg.add_model_parameter('beta', 0.01)
cfg.add_model_parameter('gamma', 0.005)
cfg.add_model_parameter('alpha', 0.05)
cfg.add_model_parameter("fraction_infected", 0.05)
model.set_initial_status(cfg)
# Simulation execution
iterations = model.iteration_bunch(200)
.. [#] J.L. Aron and I.B. Schwartz. Seasonality and period-doubling bifurcations in an epidemic model. Journal Theoretical Biology, 110:665-679, 1984
7 changes: 4 additions & 3 deletions docs/reference/models/epidemics/SEIS.rst
@@ -1,6 +1,6 @@
****
SEIS
****
*********
SEIS (DT)
*********


In the SEIS model, during the course of an epidemics, a node is allowed to change its status from **Susceptible** (S) to **Exposed** (E) to **Infected** (I), then again to **Susceptible** (S).
Expand All @@ -9,6 +9,7 @@ The model is instantiated on a graph having a non-empty set of infected nodes.

SEIS assumes that if, during a generic iteration, a susceptible node comes into contact with an infected one, it becomes infected after an exposition period with probability beta, than it can switch back to susceptible with probability lambda (the only transition allowed are S→E→I→S).

This implementation assumes discrete time dynamics for the E->I and I->S transitions.

--------
Statuses
Expand Down
106 changes: 106 additions & 0 deletions docs/reference/models/epidemics/SEIS_ct.rst
@@ -0,0 +1,106 @@
*********
SEIS (CT)
*********


In the SEIS model, during the course of an epidemics, a node is allowed to change its status from **Susceptible** (S) to **Exposed** (E) to **Infected** (I), then again to **Susceptible** (S).

The model is instantiated on a graph having a non-empty set of infected nodes.

SEIS assumes that if, during a generic iteration, a susceptible node comes into contact with an infected one, it becomes infected after an exposition period with probability beta, than it can switch back to susceptible with probability lambda (the only transition allowed are S→E→I→S).

This implementation assumes continuous time dynamics for the E->I and I->S transitions.

--------
Statuses
--------

During the simulation a node can experience the following statuses:

=========== ====
Name Code
=========== ====
Susceptible 0
Infected 1
Exposed 2
=========== ====

----------
Parameters
----------

====== ===== =============== ======= ========= =====================
Name Type Value Type Default Mandatory Description
====== ===== =============== ======= ========= =====================
beta Model float in [0, 1] True Infection probability
lambda Model float in [0, 1] True Removal probability
alpha Model float in [0, 1] True Latent period
====== ===== =============== ======= ========= =====================

The initial infection status can be defined via:

- **fraction_infected**: Model Parameter, float in [0, 1]
- **Infected**: Status Parameter, set of nodes

The two options are mutually exclusive and the latter takes precedence over the former.

-------
Methods
-------

The following class methods are made available to configure, describe and execute the simulation:

^^^^^^^^^
Configure
^^^^^^^^^
.. autoclass:: ndlib.models.epidemics.SEIS_ct_Model.SEISctModel
.. automethod:: ndlib.models.epidemics.SEIS_ct_Model.SEISctModel.__init__(graph)

.. automethod:: ndlib.models.epidemics.SEIS_ct_Model.SEISctModel.set_initial_status(self, configuration)
.. automethod:: ndlib.models.epidemics.SEIS_ct_Model.SEISctModel.reset(self)

^^^^^^^^
Describe
^^^^^^^^

.. automethod:: ndlib.models.epidemics.SEIS_ct_Model.SEISctModel.get_info(self)
.. automethod:: ndlib.models.epidemics.SEIS_ct_Model.SEISctModel.get_status_map(self)

^^^^^^^^^^^^^^^^^^
Execute Simulation
^^^^^^^^^^^^^^^^^^
.. automethod:: ndlib.models.epidemics.SEIS_ct_Model.SEISctModel.iteration(self)
.. automethod:: ndlib.models.epidemics.SEIS_ct_Model.SEISctModel.iteration_bunch(self, bunch_size)


-------
Example
-------

In the code below is shown an example of instantiation and execution of an SEIS simulation on a random graph:
we set the initial set of infected nodes as 5% of the overall population, a probability of infection of 1%, a removal probability of 0.5% and an latent period of 5% (e.g. 20 iterations).

.. code-block:: python
import networkx as nx
import ndlib.models.ModelConfig as mc
import ndlib.models.epidemics as ep
# Network topology
g = nx.erdos_renyi_graph(1000, 0.1)
# Model selection
model = ep.SEISctModel(g)
# Model Configuration
cfg = mc.Configuration()
cfg.add_model_parameter('beta', 0.01)
cfg.add_model_parameter('lambda', 0.005)
cfg.add_model_parameter('alpha', 0.05)
cfg.add_model_parameter("fraction_infected", 0.05)
model.set_initial_status(cfg)
# Simulation execution
iterations = model.iteration_bunch(200)
2 changes: 2 additions & 0 deletions docs/reference/reference.rst
Expand Up @@ -39,7 +39,9 @@ In ``NDlib`` are implemented the following **Epidemic** models:
models/epidemics/SIS.rst
models/epidemics/SIR.rst
models/epidemics/SEIR.rst
models/epidemics/SEIR_ct.rst
models/epidemics/SEIS.rst
models/epidemics/SEIS_ct.rst
models/epidemics/SWIR.rst
models/epidemics/Threshold.rst
models/epidemics/GeneralisedThreshold.rst
Expand Down

0 comments on commit ae3be26

Please sign in to comment.