Giter Club home page Giter Club logo

sib's Introduction

C/C++ CI Build status codecov.io

SIB

SIB: [S]tatistical [I]nference in Epidemics via [B]elief Propagation

Message passing algorithm for individual-level inference in epidemics. SIB assumes that the epidemic process is generated by a compartmental model (currently a generalized semi-continuous time SIR model is implemented). Among other things, SIB computes the probability of each individual to be susceptible, infected or recovered at a given time from a list of contacts and partial observations. The method is based on Belief Propagation equations for partial trajectories. See notes and article or go directly to results for more details.

Requirements

Install

you can choose one of the following procedures:

  • make

    1. Adjust Makefile, if needed.
    2. type: make
  • pip install

    1. Adjust the setup.py, if needed.
    2. pip install .

You'll obtain a standalone CLI ./sib, plus a dynamic library containing a python module sib.

When not installing with pip, make sure to include the sib folder into the python path.

note for macosx users

Use OpenMP with Apple Clang and Homebrew libomp:

  1. Check requirements.
  2. Create a conda env (tested with python=3.8) and activate it
  3. conda install openmp
  4. open setup.py and uncomment the following line:
    • COMPILE_FLAGS = "-fPIC -std=c++11 -Wall -O3 -g -Xpreprocessor -fopenmp"
    • extra_link_args = ["-lomp", "-lm"]
  5. pip install . in the sib folder.

Quick start

Have a look at this notebook.

Have a look at this document for some preliminary results on the containment of the Covid-19 epidemics.

Reference

This code implements and expands the method described in this paper.

Documentation

python module

Classes

sib.Params(
  prob_i = Uniform(1.0), 
  prob_r = Exponential(0.1), 
  pseed = 0.01, 
  psus = 0.5, 
  softconstraint = 0):
    
    Settings the parameters of the model used for inference.

    Parameters
    ----------
    prob_i : Function - optional
        function to compute the probability of infection, 
        depending on the difference (t-ti), ti time of infection.
        [default: Uniform]
    prob_r : Function - optional
        function to compute the probability of recovery, 
        depending on the difference (t-ti), ti time of infection.
        [default: exponential decay with mu = 0.1]
    pseed : Float - optional
        Prior to be source of infections (infected at starting times).
        [default 1e-2]
    psus: Float - optional
        Prior to be susceptible.
        [default: 0.5]        

  
    Returns
    -------
    None
sib.FactorGraph(
  Params,
  contacts = [],
  tests = [],
  individuals = []
)
    Construct the factor graph from the list of contacts,
    the lists of observations, the Parameters of the model.
    Eventually is possible to set infectiousness and 
    recoverability priors on each individual.

    Parameters
    ----------
    Params: Class sib.Params -- optional
        see sib.Params
    contacts: list<tuple(int, int, int, float)>
        list of single direct contacts (for bidirectional contacts add also
        the inverse contact). Order of tuple contact: (node_i, node_j, time, lambda)
        The lambdas are the instantaneous probability of infection.
    tests: list<tuple(int, sib.Test, int)>
        list of single observation on single node a time t. Order of observation tuple: (node_i, sib.Test, time). sib.Test is a class containing the probability to be susceptible, infected, recovery, given by medical tests or symptoms.
    individuals: list(tuple(int, prior_t, prior_r)) [optional]
        List of tuple where each tuple are the prior on the infectiousness and recoverability of node "i".

    return
    ------
      Class FactorGraph
sib.Test(
  ps = 0.0, 
  pi = 0.0, 
  pr = 0.0
)
Evidence given by a test.
    Parameters
    ----------
    ps: probability to be susceptible
    pi: probability to be infected
    pr: probability to be recovery
sib.iterate(
  f,
  maxit=100,
  tol=1e-3, 
  damping=0.0,
  callback=(lambda t, err, f: print(t, err, flush=True))
)
Iterate the BP messages.
    Parameters
    ----------
    f: FactorGraph class
      The factor graph. See sib.FactorGraph
    maxit: int -- optional
      max number of iteration of update of BP equation
    tol: float -- optional
      If the error of the update of BP equation is less than `tol`the iteration stop.
    damping: float -- optional
      Damping parameter to help the convergence of BP equation.
    callback: function(iter_n, err, f) -- optional
      Function callback, called after each iteration. Take as argument the number of current iteration (iter_n), error (err), and the FactorGraph (f). 

Contributions

If you want to participate write us (sibyl-team) or make a pull request.

License

Apache License 2.0

Maintainers

The sibyl-team:

Alfredo Braunstein ([email protected]), Alessandro Ingrosso (@ai_ingrosso), Indaco Biazzo (@ocadni), Luca Dall'Asta, Anna Paola Muntoni, Fabio Mazza, Giovanni Catania

Acknowledgements

This project has been partially funded by Fondazione CRT through call "La Ricerca dei Talenti", project SIBYL and by the SmartData@PoliTO center on Big Data and Data Science.

sib's People

Contributors

abraunst avatar aleingrosso avatar anna-pa-m avatar dallasta avatar fabmazz avatar ocadni avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

abraunst fabmazz

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.