# Kertesz Threshold¶

The Kertesz Threshold model was introduced in 2015 by Ruan et al. [1] and it is an extension of the Watts threshold model [2].

The authors extend the classical model introducing a density r of blocked nodes – nodes which are immune to social influence – and a probability of spontaneous adoption p to capture external influence.

Thus, the model distinguishes three kinds of node: Blocked (B), Susceptible (S) and Adoptiong (A). The latter class breaks into two categories: vulnerable and stable nodes. A node can adopt either under its neighbors’ influence, or spontaneously, due to endogenous effects.

## Statuses¶

During the simulation a node can experience the following statuses:

Name Code
Susceptible 0
Infected 1
Blocked -1

## Parameters¶

Name Type Value Type Default Mandatory Description
percentage_blocked Model float in [0, 1] 0.1 False Blocked nodes
threshold Node float in [0, 1] 0.1 False Individual threshold

The initial infection status can be defined via:

• percentage_infected: Model Parameter, float in [0, 1]
• Infected: Status Parameter, set of nodes

The initial blocked nodes can be defined via:

• percentage_blocked: Model Parameter, float in [0, 1]
• Blocked: Status Parameter, set of nodes

In both cases, 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¶

class ndlib.models.dynamic.DynKerteszThresholdModel.DynKerteszThresholdModel(graph)
Node Parameters to be specified via ModelConfig
Parameters: profile – The node profile. As default a value of 0.1 is assumed for all nodes.
DynKerteszThresholdModel.__init__(graph)

Model Constructor

Parameters: graph – A networkx graph object
DynKerteszThresholdModel.set_initial_status(self, configuration)

Set the initial model configuration

Parameters: configuration – a ndlib.models.ModelConfig.Configuration object
DynKerteszThresholdModel.reset(self)

Reset the simulation setting the actual status to the initial configuration.

### Describe¶

DynKerteszThresholdModel.get_info(self)

Describes the current model parameters (nodes, edges, status)

Returns: a dictionary containing for each parameter class the values specified during model configuration
DynKerteszThresholdModel.get_status_map(self)

Specify the statuses allowed by the model and their numeric code

Returns: a dictionary (status->code)

### Execute Simulation¶

DynKerteszThresholdModel.iteration(self)

Execute a single model iteration

Returns: Iteration_id, Incremental node status (dictionary node->status)
DynKerteszThresholdModel.execute_snapshots(bunch_size, node_status)
DynKerteszThresholdModel.execute_iterations(node_status)

## Example¶

In the code below is shown an example of instantiation and execution of a Kertesz Threshold model simulation on a random graph: we set the initial infected as well blocked node sets equals to the 10% of the overall population, assign a threshold of 0.25 to all the nodes and impose an probability of spontaneous adoptions of 40%.

import networkx as nx
import dynetx as dn
import ndlib.models.ModelConfig as mc
import ndlib.models.dynamic.DynKerteszThresholdModel as ks

# Dynamic Network topology
dg = dn.DynGraph()

for t in past.builtins.xrange(0, 3):
g = nx.erdos_renyi_graph(200, 0.05)

# Model selection
model = ks.DynKerteszThresholdModel(g)

# Model Configuration
config = mc.Configuration()

# Setting node parameters
threshold = 0.25
for i in g.nodes():