EoN.estimate_nonMarkov_SIR_prob_size

EoN.estimate_nonMarkov_SIR_prob_size(G, xi, zeta, transmission, *, rng=None)[source]

Predicts epidemic probability and size using nonMarkov_directed_percolate_network.

This is not directly described in Kiss, Miller, & Simon, but is based on (fig 6.18).

Warning:

You probably DON’T REALLY WANT TO USE THIS. Check if estimate_nonMarkov_prob_size_with_timing fits your needs better.

Arguments:

G (networkx Graph)

The input graph

xi dict

xi[u] gives all necessary information to determine what u’s infectiousness is.

zeta dict

zeta[v] gives everything needed about v’s susceptibility

transmission user-defined function

transmission(xi[u], zeta[v]) determines whether u transmits to v. Returns True or False depending on whether the transmission would happen

rng random number generator

If None, will be set to np.random.default_rng()

Returns:

PE, AR numbers (between 0 and 1)

Estimates of epidemic probability and attack rate found by finding largest strongly connected component and finding in/out components.

SAMPLE USE:

#mimicking the standard version with transmission rate tau
#and recovery rate gamma

import networkx as nx
import EoN
import random
from collections import defaultdict

G=nx.fast_gnp_random_graph(1000,0.002)
tau = 2
gamma = 1

xi = {node:rng.exponential(1/gamma) for node in G.nodes()}
#xi[node] is duration of infection of node.

zeta = defaultdict(lambda : tau) #every node has zeta=tau, so same
                                #transmission rate

def my_transmission(infection_duration, trans_rate):
    #infect if duration is longer than time to infection.
    if infection_duration > rng.exponential(1/trans_rate):
        return True
    else:
        return False

PE, AR = EoN.estimate_nonMarkov_SIR_prob_size(G, xi, zeta,
                                                my_transmission)