Last Updated June 6, 2026
Cascading failure and contagion describe how disruption spreads through interconnected systems when one failure changes the risk, load, behavior, or stability of other parts of the system. A local disturbance may remain isolated if buffers, redundancy, modularity, and recovery capacity are strong. But in tightly coupled systems, the same disturbance can propagate across networks, sectors, organizations, markets, infrastructures, ecosystems, or communities.
In systems modeling, cascading failure and contagion are not simply dramatic metaphors for “things getting worse.” They are structural propagation processes. A component fails, transfers load, removes capacity, changes expectations, spreads infection, transmits information, alters incentives, or exposes dependencies. That change affects other components. If those components are already near thresholds, they may fail too. The result can be a cascade: a sequence of linked failures that produces system-level disruption far larger than the initial event.
Cascading dynamics appear in power grids, supply chains, transportation systems, financial markets, public health systems, ecosystems, social networks, digital platforms, organizations, information systems, and governance systems. A power-line outage may redistribute load until other lines trip. A supplier failure may delay downstream production. A bank failure may spread through counterparty exposure and confidence loss. A disease may move through contact networks. A rumor may spread through social media. A public institution may lose legitimacy as repeated failures reinforce noncooperation.
For systems modeling, cascading failure and contagion require analysts to represent interdependence, thresholds, exposure, network structure, feedback, timing, recovery, and behavior. Average risk is not enough. The central question is how local disruption becomes systemic.

This article examines cascading failure and contagion as core problems in systems modeling. It covers propagation mechanisms, network thresholds, overload cascades, epidemic contagion, financial contagion, supply-chain failure, infrastructure interdependence, social contagion, ecological cascades, feedback amplification, recovery dynamics, mathematical foundations, professional modeling workflows, R and Python examples, responsible use, common pitfalls, and authoritative references.
Why Cascading Failure Matters
Cascading failure matters because systemic risk is often hidden in relationships rather than isolated components. A system may appear safe when each component is evaluated separately, yet remain fragile because the components depend on one another. The risk is not only that something fails. The risk is that one failure changes the conditions of many others.
This is why cascading failure is central to systems modeling. A bridge, bank, supplier, hospital, data center, transformer, species, or public agency may not be the largest element in the system. But if it connects many dependencies, absorbs critical load, coordinates flows, or shapes behavior, its failure can propagate far beyond its immediate boundary.
Cascades also challenge conventional risk assessment. If analysts examine average conditions, they may miss tail events. If they examine components one at a time, they may miss interdependence. If they examine first-order effects only, they may miss second-order and third-order consequences. If they assume failure remains local, they may underestimate systemic disruption.
| Ordinary risk question | Cascade-aware question | Why it matters |
|---|---|---|
| Which component is most likely to fail? | Which failure spreads the farthest? | The most probable failure may not be the most systemic. |
| How reliable is each component? | How do component failures interact? | Independent reliability estimates can miss interdependence. |
| What is the first-order impact? | What are second-order and third-order impacts? | Indirect effects may dominate total harm. |
| How much reserve capacity exists? | Where does load go after failure? | Redistribution can overload remaining components. |
| How connected is the system? | Does connectivity contain or amplify disruption? | Connectivity can support resilience or spread failure. |
| How fast can the system recover? | Can recovery happen before propagation accelerates? | Timing determines whether disturbance is contained. |
Cascade-aware modeling shifts attention from isolated failure probability to propagation structure, containment, recovery, and systemic consequence.
What Is Cascading Failure?
Cascading failure occurs when the failure of one component increases the likelihood that other components will fail. This may happen through load redistribution, dependency interruption, loss of coordination, delayed response, information effects, behavioral adaptation, or feedback amplification.
The key feature is propagation. A single failure is not yet a cascade. A cascade begins when failure changes the state or risk profile of other system elements. If those affected elements cross their own thresholds, they fail too, spreading disruption further.
Cascading failure often occurs in systems that are highly interconnected, tightly coupled, capacity constrained, optimized for efficiency, low in redundancy, dependent on critical hubs, or slow to recover. Such systems may perform well under normal conditions but become brittle under stress.
| Cascade element | Meaning | Modeling representation |
|---|---|---|
| Initial disturbance | The first shock, failure, overload, infection, withdrawal, or disruption. | Seed node, exogenous shock, pulse event, or failure trigger. |
| Propagation pathway | The relationship through which disruption spreads. | Network edge, dependency link, exposure channel, contact tie, or flow path. |
| Transmission rule | The mechanism by which one affected component influences another. | Load transfer, infection probability, threshold rule, dependency failure, or influence function. |
| Component threshold | The condition under which an affected component fails or changes state. | Capacity limit, adoption threshold, solvency threshold, infection threshold, or stress tolerance. |
| Amplification | Positive feedback that increases spread or severity. | Reinforcing loop, panic, congestion, rerouting, depletion, or confidence loss. |
| Containment | Processes that stop or slow propagation. | Redundancy, modularity, isolation, recovery, buffers, or intervention. |
The modeling challenge is to specify which components can fail, how failure spreads, what thresholds matter, and which structures contain or amplify propagation.
What Is Contagion?
Contagion is a specific form of propagation in which a state, behavior, risk, infection, belief, financial shock, or failure condition spreads from one unit to another through contact, exposure, influence, dependency, or imitation. The term originated in disease transmission but is now used in finance, social systems, technology adoption, information diffusion, infrastructure risk, and organizational behavior.
Contagion differs from ordinary correlation. If two banks fail because they both held the same asset, that may be common exposure. If one bank’s failure directly weakens another through counterparty obligations, liquidity pressure, or confidence loss, that is contagion. If two communities adopt the same behavior because they face the same policy incentive, that is common cause. If adoption spreads through peer influence, that is social contagion.
| Contagion type | Transmission mechanism | Example |
|---|---|---|
| Biological contagion | Pathogen transmission through contact or exposure. | Disease spread through a contact network. |
| Financial contagion | Losses, liquidity stress, counterparty exposure, or confidence effects. | One institution’s failure weakens others. |
| Behavioral contagion | Imitation, peer effects, social proof, or threshold adoption. | Adoption, panic, protest, or noncompliance spreads through a population. |
| Informational contagion | Messages, rumors, misinformation, or narratives spread through communication networks. | False information rapidly changes public behavior. |
| Operational contagion | Failure of one process disrupts dependent processes. | A software outage disrupts downstream services. |
| Institutional contagion | Loss of trust or legitimacy spreads across related institutions. | Failure in one agency damages confidence in a broader governance system. |
Contagion modeling requires specifying what spreads, how it spreads, who is exposed, how susceptibility varies, and what stops transmission.
Local Failure Versus Systemic Failure
A local failure affects one component or a small region of the system. A systemic failure changes the functioning of the system as a whole. The difference is not only scale; it is structure. A local failure becomes systemic when it disrupts critical dependencies, overloads remaining components, shifts behavior, disables recovery, or triggers feedback that expands the disturbance.
This distinction matters because not all failures should be prevented at all cost. Some local failures are tolerable, expected, or even useful if they reveal weakness and remain contained. A resilient system can absorb local disruption without losing system function. A fragile system converts local disruption into widespread failure.
| Failure pattern | Description | Modeling implication |
|---|---|---|
| Isolated failure | One component fails without spreading. | Represent component reliability and local repair. |
| Contained cascade | Failure spreads briefly but stops within a module or region. | Represent modularity, buffers, and containment boundaries. |
| Escalating cascade | Each failure increases stress on additional components. | Represent load transfer, thresholds, and propagation speed. |
| Systemic failure | The system loses core function across many components. | Represent functionality, service loss, and recovery capacity. |
| Regime shift | The system reorganizes into a different operating mode. | Represent path dependence, hysteresis, and structural change. |
| Chronic cascade | Repeated small failures keep the system in degraded condition. | Represent backlog, repair delay, depletion, and recurring stress. |
The goal is not simply to count failures. The goal is to understand how failure propagates, when propagation stops, and when the system changes state.
Propagation Mechanisms
Cascades and contagion can spread through multiple mechanisms. These mechanisms often overlap. A financial crisis may involve direct exposure, confidence contagion, asset fire sales, and policy feedback. An infrastructure cascade may involve load transfer, dependency failure, communication breakdown, and delayed repair. A public health cascade may involve infection, hospital capacity, workforce fatigue, supply shortages, and public behavior.
Load Redistribution
When one component fails, its load shifts to remaining components. If those components are near capacity, they may fail too.
Dependency Failure
A component fails because it depends on another component for input, power, data, finance, coordination, or legitimacy.
Exposure Transmission
Loss, infection, stress, or risk transfers through direct exposure, contact, counterparty relationship, or shared process.
Behavioral Response
Actors change behavior in ways that amplify disruption, such as panic buying, withdrawal, rerouting, hoarding, or noncompliance.
Information Propagation
Signals, warnings, rumors, misinformation, or narratives spread and alter expectations, trust, or coordination.
Recovery Delay
Slow repair, depleted capacity, or coordination failure allows disruption to spread before the system can stabilize.
| Mechanism | What spreads? | Typical model form |
|---|---|---|
| Overload cascade | Load, congestion, or stress. | Capacity-threshold network model. |
| Epidemic contagion | Infection state. | SIR, SEIR, contact-network, or agent-based model. |
| Financial contagion | Loss, insolvency, liquidity stress, or confidence. | Exposure network, balance-sheet model, or fire-sale model. |
| Supply-chain cascade | Shortage, delay, backlog, or production loss. | Input-output network, inventory model, or flow simulation. |
| Social contagion | Behavior, belief, adoption, panic, protest, or noncompliance. | Threshold model, diffusion model, or agent-based simulation. |
| Ecological cascade | Species loss, trophic effects, habitat change, or disturbance. | Food-web model, population dynamics, or spatial ecological model. |
Good cascade modeling begins by identifying the mechanism of propagation. Without a mechanism, “cascade” becomes only a descriptive label.
Network Structure and Cascade Risk
Network structure strongly shapes cascade risk. The same initial failure can produce very different outcomes depending on topology, dependency direction, centrality, redundancy, modularity, clustering, path length, and coupling strength. A system with many redundant pathways may absorb disruption. A system dependent on a small number of central hubs may suffer widespread failure when one hub is disrupted.
Network connectivity is double-edged. It can improve resilience by enabling rerouting, mutual support, information flow, and resource sharing. But it can also increase exposure by giving disruption more pathways to travel. Highly optimized networks may be efficient under normal conditions and fragile under stress.
| Network feature | Resilience benefit | Cascade risk |
|---|---|---|
| High connectivity | Provides alternate routes and coordination paths. | Can increase contagion and propagation reach. |
| Central hubs | Improve efficiency and coordination. | Hub failure can create systemic disruption. |
| Modularity | Contains failure within communities or subsystems. | Excessive isolation may reduce mutual support. |
| Redundancy | Allows rerouting after disruption. | Can hide fragility if redundant paths share common vulnerabilities. |
| Tight coupling | Supports rapid coordination. | Allows fast propagation before intervention. |
| Dependency depth | Supports complex production and specialization. | Hidden indirect dependencies can spread disruption unexpectedly. |
Systems modeling should therefore examine not only whether a network is connected, but how failure travels through that connectivity.
Thresholds, Load, and Capacity
Cascading failure often depends on thresholds. A component may remain functional until load, stress, exposure, infection, delay, debt, or pressure exceeds its tolerance. Once the threshold is crossed, the component changes state: it fails, defaults, becomes infected, adopts a behavior, leaves the system, or transmits disruption onward.
Thresholds can be physical, operational, financial, biological, social, or institutional. A power line has a load capacity. A hospital has bed and staff capacity. A supplier has production limits. A bank has capital and liquidity thresholds. A person has an adoption threshold for social behavior. A public institution has a legitimacy threshold beyond which cooperation deteriorates.
| Threshold type | System example | Cascade mechanism |
|---|---|---|
| Capacity threshold | Power line, hospital, road, server, warehouse. | Overload causes failure or degraded service. |
| Solvency threshold | Bank, firm, household, insurer. | Losses trigger default, withdrawal, or fire sale. |
| Inventory threshold | Supplier, retailer, manufacturer. | Shortage propagates downstream. |
| Infection threshold | Person, animal, crop, computer system. | Exposure changes state and creates new transmission source. |
| Behavioral threshold | Adopter, protester, consumer, voter, worker. | Peer exposure changes behavior and spreads influence. |
| Legitimacy threshold | Agency, institution, governance system. | Loss of trust produces noncooperation or resistance. |
Cascade models should distinguish between exposure and failure. Exposure increases risk; threshold crossing changes state.
Feedback Loops and Amplification
Cascades become dangerous when feedback loops amplify propagation. A failure may not only spread outward; it may also worsen the conditions that caused the failure. In a financial crisis, falling asset prices can trigger margin calls, which force sales, which further depress prices. In a transportation network, congestion reroutes traffic, which overloads alternate routes, which creates more congestion. In a public health system, overload delays care, which worsens outcomes, which increases demand for emergency services.
Feedback loops also shape perception. If people believe a system is failing, their behavior may make failure more likely. Bank runs, panic buying, platform abandonment, rumor spread, institutional noncompliance, and market withdrawal all involve expectation feedback.
| Feedback pattern | Amplification process | Example |
|---|---|---|
| Load feedback | Failure shifts load to remaining components. | Grid or transportation overload. |
| Confidence feedback | Loss of trust produces withdrawal, which confirms fear. | Bank run or market panic. |
| Congestion feedback | Delay causes rerouting, which creates more delay. | Traffic, logistics, emergency response. |
| Capacity depletion feedback | Stress reduces recovery capacity, increasing future stress. | Hospital overload, organizational burnout, repair backlog. |
| Information feedback | Signals change behavior, which changes the system state. | Rumor, misinformation, panic, protest diffusion. |
| Ecological feedback | Species or habitat loss reduces stabilizing interactions. | Trophic cascade or ecosystem regime shift. |
Feedback-aware cascade modeling asks whether failure merely spreads, or whether propagation changes the system in ways that accelerate further propagation.
Infrastructure Cascades
Infrastructure systems are classic sites of cascading failure because they are highly interconnected and often mutually dependent. Electricity, water, telecommunications, transportation, fuel, finance, emergency response, and digital systems rely on one another. A failure in one sector can disable the services needed to maintain or restore another.
Infrastructure cascades often involve load redistribution, dependency loss, control-system failure, delayed repair, common exposure, and human decision-making under pressure. A storm may damage power infrastructure. Power loss may disable communications and pumping stations. Communication loss may slow repair coordination. Transportation disruption may delay crews and supplies. The result is not one failure but an interdependent failure sequence.
| Infrastructure system | Initial failure | Cascade pathway | Modeling diagnostic |
|---|---|---|---|
| Power grid | Line, generator, transformer, or control failure. | Load redistribution and protective trips. | Overloaded component count and service loss. |
| Water system | Pump, treatment, pipe, or power failure. | Pressure loss, contamination risk, service interruption. | Service area affected and recovery time. |
| Transportation | Bridge, road, transit, port, or rail disruption. | Rerouting, congestion, delivery delay. | Travel-time increase and network accessibility loss. |
| Telecommunications | Data center, fiber, tower, or power dependency failure. | Communication loss and coordination breakdown. | Disconnected users and critical-service reachability. |
| Healthcare infrastructure | Hospital overload or supply shortage. | Delayed care, diversion, staffing strain. | Queue length, occupancy, mortality risk, recovery lag. |
| Emergency response | Dispatch, staffing, fuel, road, or communications failure. | Delayed response increases harm and demand. | Response-time distribution and unmet need. |
Infrastructure cascade modeling must represent dependency direction, capacity, redundancy, repair time, and cross-sector coordination. Static maps of assets are not enough.
Supply-Chain Cascades
Supply chains are vulnerable to cascades because production depends on timely inputs, logistics, inventories, labor, finance, data, and demand signals. A disruption at one node can propagate downstream as shortage, upstream as order distortion, and sideways through substitute suppliers or shared transport networks.
Modern supply chains often optimize for efficiency, low inventory, specialization, and global sourcing. These strategies can reduce cost under normal conditions but increase fragility when shocks occur. The system may lack slack, visibility, or substitution capacity.
| Supply-chain mechanism | Propagation pattern | Modeling concern |
|---|---|---|
| Input shortage | Supplier failure reduces downstream production. | Identify critical inputs and substitution options. |
| Inventory depletion | Buffers absorb shock temporarily before shortage appears. | Model delay between disruption and visible failure. |
| Transport bottleneck | Port, road, rail, or shipping disruption delays many flows. | Represent logistics network constraints. |
| Demand amplification | Small demand changes become larger upstream order swings. | Model bullwhip effects and information delays. |
| Supplier concentration | Many firms depend on a small set of suppliers. | Measure dependency centrality and common exposure. |
| Financial stress | Cash-flow disruption causes supplier failure. | Connect operational and financial dependencies. |
Supply-chain cascade models should include inventories, lead times, dependency structure, capacity constraints, substitution rules, and demand response. Without these, models may miss delayed but severe propagation.
Financial Contagion
Financial contagion occurs when stress spreads across institutions, markets, assets, or expectations. It may spread through direct exposure, asset price declines, liquidity shortages, margin calls, fire sales, funding runs, interbank lending, correlated portfolios, or confidence loss.
Financial systems are vulnerable to contagion because balance sheets are connected. One institution’s asset may be another institution’s liability. The sale of an asset by one actor changes the market price faced by others. The failure of one firm can change beliefs about similar firms. Uncertainty can produce withdrawal even from solvent institutions if confidence collapses.
| Financial contagion channel | What spreads? | Modeling representation |
|---|---|---|
| Counterparty exposure | Losses through direct obligations. | Weighted exposure network. |
| Liquidity contagion | Withdrawal, funding stress, or rollover failure. | Cash-flow and liquidity threshold model. |
| Fire-sale contagion | Forced asset sales depress prices. | Asset-price feedback and portfolio overlap. |
| Confidence contagion | Fear spreads across actors or markets. | Expectation feedback or behavioral model. |
| Common exposure | Many actors suffer from the same external shock. | Portfolio correlation and factor exposure model. |
| Regulatory or policy feedback | Rules, margin requirements, or interventions change incentives. | Endogenous policy-response model. |
Financial contagion modeling must separate direct contagion from common exposure. Both matter, but they imply different interventions.
Epidemic and Public Health Contagion
Epidemic contagion is the most familiar form of contagion modeling. Infectious disease spreads through contacts among susceptible and infectious individuals. But public health cascades extend beyond pathogen transmission. Disease spread can overload hospitals, reduce workforce capacity, disrupt supply chains, alter public behavior, delay routine care, and strain institutions.
This makes public health a multi-layer cascade problem. A biological contagion layer interacts with healthcare capacity, logistics, communication, public trust, policy response, and economic activity. Failure to represent these layers can underestimate systemic consequences.
| Public health layer | Contagion or cascade process | Modeling diagnostic |
|---|---|---|
| Disease transmission | Infection spreads through contact networks. | Effective reproduction number and incidence. |
| Healthcare capacity | Cases produce demand for beds, staff, and supplies. | Occupancy, queue length, and unmet care. |
| Workforce availability | Illness and burnout reduce capacity. | Staffing level and recovery time. |
| Supply availability | Demand surge depletes medical supplies. | Inventory days and replenishment delay. |
| Public behavior | Risk perception changes contact, vaccination, or care-seeking behavior. | Behavioral response and compliance dynamics. |
| Institutional trust | Communication affects cooperation and legitimacy. | Trust, adherence, misinformation spread, and response delay. |
Public health contagion modeling should include both transmission and system capacity. Infection counts alone do not describe collapse risk.
Social, Behavioral, and Informational Contagion
Social contagion occurs when behavior, belief, emotion, narrative, adoption, protest, panic, trust, or noncompliance spreads through social influence. Unlike biological contagion, social contagion is not simply exposure. People interpret signals. They respond to peers, identities, institutions, incentives, norms, credibility, and perceived risk.
Behavioral contagion can be beneficial or harmful. Cooperation, innovation, public health behavior, and mutual aid can spread. So can misinformation, panic, violence, stigma, withdrawal, or institutional mistrust. Modeling must therefore identify what spreads and whether the spread improves or damages system function.
| Social contagion process | Transmission mechanism | Modeling concern |
|---|---|---|
| Technology adoption | Peer influence, network effects, perceived usefulness. | Threshold distribution and adoption spillovers. |
| Panic behavior | Fear, scarcity signals, imitation. | Expectation feedback and self-fulfilling dynamics. |
| Misinformation spread | Attention, trust, repetition, network amplification. | Information quality, platform structure, correction delay. |
| Protest diffusion | Grievance, perceived efficacy, identity, repression response. | Agency, power, legitimacy, and network mobilization. |
| Institutional noncompliance | Trust erosion and peer normalization. | Legitimacy thresholds and policy feedback. |
| Cooperation spread | Norm formation, reciprocity, shared identity. | Positive contagion and resilience-building feedback. |
Social contagion models should avoid mechanical determinism. Human systems include interpretation, agency, power, values, and institutions.
Ecological Cascades
Ecological cascades occur when changes in one species, habitat, disturbance regime, or environmental condition propagate through ecological relationships. Trophic cascades are the classic example: changes in predators affect herbivores, which affect vegetation, which affects habitat, nutrient cycling, hydrology, and other species.
Ecological cascades can also spread through mutualistic networks, invasive species, disease, fire regimes, water availability, climate stress, and habitat fragmentation. A local ecological change may remain contained or reorganize the broader system depending on connectivity, redundancy, functional diversity, and feedback structure.
| Ecological cascade type | Propagation pathway | Modeling diagnostic |
|---|---|---|
| Trophic cascade | Predator, prey, herbivore, vegetation interactions. | Population change across trophic levels. |
| Mutualism loss | Pollinator, plant, seed dispersal, or symbiotic relationships. | Network dependency and species co-loss. |
| Habitat fragmentation | Loss of connectivity changes movement and reproduction. | Patch connectivity and metapopulation persistence. |
| Disturbance cascade | Fire, drought, pest, flood, or disease alters feedback. | Disturbance spread and recovery time. |
| Invasion cascade | Invasive species alters competition, predation, or habitat. | Spread rate and native species response. |
| Regime shift | Feedback changes move ecosystem to alternative state. | Order parameter, threshold, and hysteresis diagnostics. |
Ecological cascade modeling should include both direct and indirect effects. The most important consequence of a species or habitat change may appear several links away.
Recovery, Buffering, and Containment
Cascades are not inevitable. Systems can be designed or governed to absorb local failure without systemic collapse. The central resilience question is not whether disturbances occur, but whether they are contained, slowed, rerouted, repaired, or transformed before they propagate widely.
Redundancy
Extra capacity, backup paths, substitute suppliers, reserve staff, or alternate systems allow function to continue after local failure.
Modularity
Subsystem boundaries can prevent failure from spreading across the entire system.
Buffers
Inventories, reserves, slack, savings, emergency capacity, or ecological diversity absorb shocks before thresholds are crossed.
Isolation
Firebreaks, circuit breakers, quarantines, ring-fencing, or segmentation stop transmission across links.
Adaptive Rerouting
Flows can shift to alternate paths without overloading them when capacity and information are sufficient.
Rapid Recovery
Fast detection, repair, response, learning, and coordination shorten the propagation window.
| Containment strategy | What it prevents | Potential tradeoff |
|---|---|---|
| Redundancy | Single point of failure. | Higher cost or apparent inefficiency. |
| Modularity | System-wide propagation. | Less integration or slower coordination. |
| Buffers | Immediate threshold crossing. | Inventory, capital, or capacity cost. |
| Firebreaks | Transmission across critical links. | Temporary isolation or reduced flow. |
| Monitoring | Delayed recognition of propagation. | Data burden and false alarms. |
| Recovery investment | Long disruption duration. | Requires sustained institutional capacity. |
Containment modeling should examine not only whether an intervention works, but when it must be activated and what tradeoffs it creates.
Modeling Design Strategies
Modeling cascading failure and contagion requires a design choice about what spreads, how it spreads, and how the system responds. Different cascade mechanisms require different models. A disease model is not a supply-chain model. A financial exposure model is not a power-grid model. A threshold adoption model is not an overload model.
Network Threshold Models
Represent components as nodes that fail, adopt, or change state when exposure from neighbors crosses a threshold.
Load-Capacity Models
Represent overload cascades where failed components redistribute load to remaining components.
Epidemic Models
Represent transmission between susceptible, exposed, infected, recovered, or removed states.
Exposure Network Models
Represent financial, operational, or dependency exposure through weighted directed links.
Agent-Based Models
Represent heterogeneous actors, local decision rules, adaptation, behavior change, and social contagion.
Hybrid Cascade Models
Combine network structure, flows, behavior, recovery, and policy response across multiple layers.
| Model type | Best suited for | Key diagnostic |
|---|---|---|
| Threshold cascade model | Adoption, failure, noncompliance, social contagion. | Final affected fraction and cascade depth. |
| Load-capacity model | Infrastructure, grid, transport, server, logistics failure. | Overloaded nodes and service loss. |
| SIR or SEIR model | Infectious disease and similar transmission processes. | Effective reproduction number and peak burden. |
| Financial network model | Counterparty exposure, liquidity, solvency, fire sales. | Loss propagation and systemic capital shortfall. |
| Input-output model | Supply-chain and sectoral dependency cascades. | Production loss and downstream shortage. |
| Multiplex network model | Interdependent infrastructure or social-technical systems. | Cross-layer cascade size and recovery time. |
The best cascade models make the propagation rule explicit and test how results change under alternative assumptions.
Mathematical Lens: Thresholds, Reproduction, and Network Propagation
A simple node threshold model can be written as:
s_i(t+1)=
\begin{cases}
1, & \frac{\sum_j A_{ij}s_j(t)}{\sum_j A_{ij}} \ge \theta_i \\
s_i(t), & \frac{\sum_j A_{ij}s_j(t)}{\sum_j A_{ij}} \lt \theta_i
\end{cases}
\]
Interpretation: Node \(i\) becomes affected when the fraction of affected neighbors exceeds its threshold \(\theta_i\). The matrix \(A\) represents network connections.
A load-capacity cascade can be represented as:
\text{fail}_i(t+1)=
\begin{cases}
1, & L_i(t) \gt C_i \\
0, & L_i(t) \le C_i
\end{cases}
\]
Interpretation: Node \(i\) fails if load \(L_i(t)\) exceeds capacity \(C_i\). After failure, load may be redistributed to other nodes.
In epidemic-style contagion, the effective reproduction number can be written conceptually as:
R_t=\beta_t c_t D_t S_t
\]
Interpretation: Transmission depends on infectiousness \(\beta_t\), contact rate \(c_t\), infectious duration \(D_t\), and susceptible share \(S_t\). When \(R_t \gt 1\), spread tends to grow.
A simple branching condition for cascade growth is:
B = p(k-1)
\]
Interpretation: If each affected node reaches \(k-1\) additional neighbors with transmission probability \(p\), cascades tend to grow when \(B \gt 1\).
Financial exposure can be represented through a weighted directed network:
\ell_i(t+1)=\ell_i(t)+\sum_j E_{ij}d_j(t)
\]
Interpretation: Loss \(\ell_i\) increases when connected counterparties \(j\) default or transmit loss through exposure \(E_{ij}\).
Cascade size can be summarized as:
C=\frac{1}{N}\sum_{i=1}^{N}s_i(T)
\]
Interpretation: \(C\) is the final fraction of affected nodes after the cascade process reaches time \(T\).
These equations show why cascade modeling requires thresholds, network structure, transmission rules, and final system-state measures. The mathematics is not merely formal; it determines what kinds of systemic risk the model can detect.
The Cascading Failure and Contagion Modeling Workflow
Professional cascade modeling requires a workflow that moves from system definition to network structure, propagation mechanism, threshold assumptions, scenario testing, intervention analysis, and responsible communication.
1. Define the Failure State
Specify what it means for a component to fail, become infected, default, adopt, overload, withdraw, or lose function.
2. Map the Propagation Network
Identify nodes, links, directionality, weights, dependency types, layers, and hidden indirect connections.
3. Identify Transmission Mechanisms
Determine whether disruption spreads through load, exposure, infection, influence, confidence, dependency, or information.
4. Define Thresholds and Capacities
Specify when exposed components change state and how thresholds vary across components.
5. Select Initial Shock Scenarios
Test random failures, targeted hub failures, regional disruptions, common exposure, compound shocks, and slow-burn stress.
6. Simulate Propagation
Track cascade depth, affected fraction, service loss, timing, overload, recovery, and cross-layer propagation.
7. Evaluate Containment
Test redundancy, modularity, firebreaks, isolation, reserves, repair speed, rerouting, and behavioral response.
8. Compare Model Structures
Compare threshold, epidemic, load-capacity, exposure, agent-based, and hybrid models to identify structural dependence.
9. Validate Against Evidence
Use historical events, stress tests, expert review, operational data, and sensitivity analysis to assess plausibility.
10. Communicate Systemic Risk
Explain uncertainty, propagation pathways, affected groups, intervention timing, and limits of model confidence.
Strengths and Limitations
Cascading failure and contagion models are powerful because they reveal systemic risk that component-level analysis can miss. They show how local disruptions propagate, how network structure shapes vulnerability, how thresholds produce nonlinear outcomes, and how interventions can contain or amplify failure.
But cascade models are also assumption-sensitive. Results depend heavily on network data, threshold values, transmission rules, recovery timing, behavioral assumptions, and omitted dependencies. A model may produce dramatic cascades because of unrealistic thresholds, or it may miss cascades because hidden dependencies were not included.
| Strength | Why it matters | Limitation to watch |
|---|---|---|
| Reveals systemic risk | Shows how local failures become system-wide disruption. | Requires accurate dependency mapping. |
| Tests shock scenarios | Identifies vulnerable hubs, links, sectors, or populations. | Scenario selection can bias results. |
| Represents thresholds | Captures nonlinear failure behavior. | Thresholds may be uncertain or context-dependent. |
| Supports intervention design | Evaluates redundancy, modularity, firebreaks, and recovery. | Interventions can create tradeoffs or new dependencies. |
| Works across domains | Applies to infrastructure, finance, health, ecology, and social systems. | Mechanisms differ and should not be conflated. |
| Improves resilience thinking | Connects failure propagation to containment and recovery. | Model output should not replace expert judgment. |
The value of cascade modeling is not perfect prediction. It is disciplined reasoning about propagation pathways, thresholds, systemic exposure, and intervention timing.
R Workflow: Simulating a Threshold Cascade
The R workflow below uses base R. It creates a synthetic network, seeds an initial failure, applies a neighbor-threshold contagion rule, tracks the affected share over time, and exports reproducible diagnostics.
# cascading_failure_threshold_diagnostics.R
# Base R workflow:
# simulating a network threshold cascade.
#
# Suggested repository placement:
# articles/cascading-failure-and-contagion/r/cascading_failure_threshold_diagnostics.R
args <- commandArgs(trailingOnly = FALSE)
file_arg <- grep("^--file=", args, value = TRUE)
if (length(file_arg) > 0) {
script_path <- normalizePath(sub("^--file=", "", file_arg[1]), mustWork = TRUE)
article_root <- normalizePath(file.path(dirname(script_path), ".."), mustWork = TRUE)
} else {
article_root <- normalizePath(getwd(), mustWork = TRUE)
}
tables_dir <- file.path(article_root, "outputs", "tables")
figures_dir <- file.path(article_root, "outputs", "figures")
dir.create(tables_dir, recursive = TRUE, showWarnings = FALSE)
dir.create(figures_dir, recursive = TRUE, showWarnings = FALSE)
set.seed(42)
build_random_network <- function(node_count = 80, link_probability = 0.055) {
adjacency <- matrix(0, nrow = node_count, ncol = node_count)
for (i in 1:(node_count - 1)) {
for (j in (i + 1):node_count) {
if (runif(1) < link_probability) {
adjacency[i, j] <- 1
adjacency[j, i] <- 1
}
}
}
adjacency
}
simulate_threshold_cascade <- function(
scenario,
node_count = 80,
link_probability = 0.055,
threshold = 0.25,
seed_count = 4,
max_steps = 40
) {
adjacency <- build_random_network(node_count, link_probability)
affected <- rep(0, node_count)
degree <- rowSums(adjacency)
seed_nodes <- order(degree, decreasing = TRUE)[1:seed_count]
affected[seed_nodes] <- 1
rows <- data.frame()
for (step in 0:max_steps) {
rows <- rbind(
rows,
data.frame(
scenario = scenario,
step = step,
node_count = node_count,
link_probability = link_probability,
threshold = threshold,
affected_count = sum(affected),
affected_share = sum(affected) / node_count,
new_failures = ifelse(step == 0, seed_count, NA)
)
)
next_affected <- affected
new_failures <- 0
for (node in 1:node_count) {
if (affected[node] == 1 || degree[node] == 0) {
next
}
affected_neighbors <- sum(adjacency[node, ] * affected)
exposure_share <- affected_neighbors / degree[node]
if (exposure_share >= threshold) {
next_affected[node] <- 1
new_failures <- new_failures + 1
}
}
if (new_failures == 0) {
break
}
affected <- next_affected
}
rows$new_failures[is.na(rows$new_failures)] <- c(diff(rows$affected_count), 0)[1:sum(is.na(rows$new_failures))]
rows
}
runs <- rbind(
simulate_threshold_cascade("baseline_threshold", threshold = 0.25, link_probability = 0.055, seed_count = 4),
simulate_threshold_cascade("lower_threshold", threshold = 0.18, link_probability = 0.055, seed_count = 4),
simulate_threshold_cascade("higher_connectivity", threshold = 0.25, link_probability = 0.075, seed_count = 4),
simulate_threshold_cascade("larger_initial_shock", threshold = 0.25, link_probability = 0.055, seed_count = 8)
)
summary_rows <- data.frame()
for (scenario_name in unique(runs$scenario)) {
subset_data <- runs[runs$scenario == scenario_name, ]
summary_rows <- rbind(
summary_rows,
data.frame(
scenario = scenario_name,
final_affected_share = subset_data$affected_share[nrow(subset_data)],
final_affected_count = subset_data$affected_count[nrow(subset_data)],
cascade_duration = max(subset_data$step),
maximum_new_failures = max(subset_data$new_failures, na.rm = TRUE),
diagnostic_label = ifelse(
subset_data$affected_share[nrow(subset_data)] >= 0.5,
"systemic cascade",
"contained cascade"
)
)
)
}
write.csv(
runs,
file.path(tables_dir, "r_threshold_cascade_trajectories.csv"),
row.names = FALSE
)
write.csv(
summary_rows,
file.path(tables_dir, "r_threshold_cascade_summary.csv"),
row.names = FALSE
)
png(file.path(figures_dir, "r_threshold_cascade_affected_share.png"), width = 1200, height = 700)
plot(
NULL,
xlim = range(runs$step),
ylim = c(0, 1),
xlab = "Step",
ylab = "Affected Share",
main = "Threshold Cascade Dynamics"
)
for (scenario_name in unique(runs$scenario)) {
subset_data <- runs[runs$scenario == scenario_name, ]
lines(subset_data$step, subset_data$affected_share, lwd = 2)
}
legend(
"bottomright",
legend = unique(runs$scenario),
lwd = 2,
bty = "n",
cex = 0.8
)
grid()
dev.off()
print(summary_rows)
cat("R cascading failure threshold diagnostics complete.\n")
This workflow demonstrates how threshold assumptions, connectivity, and initial shock size can change a cascade from contained disruption to systemic spread.
Python Workflow: Modeling Network Contagion and Cascade Size
The Python workflow below uses only the standard library. It creates synthetic networks, seeds initial failures, applies a threshold cascade rule, exports trajectories, summarizes cascade size, and validates output ranges.
#!/usr/bin/env python3
"""
Cascading failure and contagion workflow.
Dependency-light workflow demonstrating:
1. Random network generation
2. Threshold contagion
3. Targeted initial shocks
4. Cascade size measurement
5. Scenario comparison
6. Validation checks
All data are synthetic.
"""
from __future__ import annotations
from pathlib import Path
import csv
import random
from statistics import mean
ARTICLE_ROOT = Path(__file__).resolve().parents[1]
TABLES = ARTICLE_ROOT / "outputs" / "tables"
def write_csv(path: Path, rows: list[dict[str, object]]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
if not rows:
raise ValueError(f"No rows to write: {path}")
with path.open("w", newline="", encoding="utf-8") as handle:
writer = csv.DictWriter(handle, fieldnames=list(rows[0].keys()))
writer.writeheader()
writer.writerows(rows)
def build_random_network(node_count: int, link_probability: float, seed: int) -> dict[int, set[int]]:
rng = random.Random(seed)
graph: dict[int, set[int]] = {node: set() for node in range(node_count)}
for source in range(node_count):
for target in range(source + 1, node_count):
if rng.random() < link_probability:
graph[source].add(target)
graph[target].add(source)
return graph
def degree_map(graph: dict[int, set[int]]) -> dict[int, int]:
return {node: len(neighbors) for node, neighbors in graph.items()}
def simulate_threshold_cascade(
scenario: str,
node_count: int,
link_probability: float,
threshold: float,
seed_count: int,
max_steps: int = 40,
seed: int = 42,
) -> list[dict[str, object]]:
graph = build_random_network(node_count, link_probability, seed)
degrees = degree_map(graph)
seed_nodes = sorted(degrees, key=lambda node: degrees[node], reverse=True)[:seed_count]
affected: set[int] = set(seed_nodes)
rows: list[dict[str, object]] = []
for step in range(max_steps + 1):
rows.append({
"scenario": scenario,
"step": step,
"node_count": node_count,
"link_probability": round(link_probability, 6),
"threshold": threshold,
"seed_count": seed_count,
"affected_count": len(affected),
"affected_share": round(len(affected) / node_count, 6),
"mean_degree": round(mean(degrees.values()), 6),
"maximum_degree": max(degrees.values()),
})
newly_affected: set[int] = set()
for node in graph:
if node in affected or degrees[node] == 0:
continue
affected_neighbors = len(graph[node].intersection(affected))
exposure_share = affected_neighbors / degrees[node]
if exposure_share >= threshold:
newly_affected.add(node)
if not newly_affected:
break
affected.update(newly_affected)
for index, row in enumerate(rows):
if index == 0:
row["new_failures"] = seed_count
else:
row["new_failures"] = int(rows[index]["affected_count"]) - int(rows[index - 1]["affected_count"])
return rows
def summarize(rows: list[dict[str, object]]) -> list[dict[str, object]]:
summary_rows: list[dict[str, object]] = []
for scenario in sorted(set(str(row["scenario"]) for row in rows)):
subset = [row for row in rows if row["scenario"] == scenario]
final = subset[-1]
maximum_new_failures = max(int(row["new_failures"]) for row in subset)
summary_rows.append({
"scenario": scenario,
"final_affected_count": final["affected_count"],
"final_affected_share": final["affected_share"],
"cascade_duration": final["step"],
"maximum_new_failures": maximum_new_failures,
"mean_degree": final["mean_degree"],
"maximum_degree": final["maximum_degree"],
"diagnostic_label": (
"systemic cascade"
if float(final["affected_share"]) >= 0.5
else "contained cascade"
),
})
return summary_rows
def main() -> None:
scenarios = [
{
"scenario": "baseline_threshold",
"node_count": 90,
"link_probability": 0.055,
"threshold": 0.25,
"seed_count": 4,
"seed": 42,
},
{
"scenario": "lower_threshold",
"node_count": 90,
"link_probability": 0.055,
"threshold": 0.18,
"seed_count": 4,
"seed": 43,
},
{
"scenario": "higher_connectivity",
"node_count": 90,
"link_probability": 0.075,
"threshold": 0.25,
"seed_count": 4,
"seed": 44,
},
{
"scenario": "larger_initial_shock",
"node_count": 90,
"link_probability": 0.055,
"threshold": 0.25,
"seed_count": 8,
"seed": 45,
},
{
"scenario": "high_threshold_containment",
"node_count": 90,
"link_probability": 0.055,
"threshold": 0.35,
"seed_count": 4,
"seed": 46,
},
]
all_rows: list[dict[str, object]] = []
for scenario in scenarios:
all_rows.extend(simulate_threshold_cascade(**scenario))
summary_rows = summarize(all_rows)
validation_rows: list[dict[str, object]] = []
for row in summary_rows:
for metric, low, high in [
("final_affected_share", 0.0, 1.0),
("final_affected_count", 0.0, 1000000.0),
("cascade_duration", 0.0, 1000000.0),
("maximum_new_failures", 0.0, 1000000.0),
("mean_degree", 0.0, 1000000.0),
]:
value = float(row[metric])
validation_rows.append({
"scenario": row["scenario"],
"metric": metric,
"value": round(value, 6),
"target_low": low,
"target_high": high,
"passed": low <= value <= high,
})
write_csv(TABLES / "python_threshold_cascade_trajectories.csv", all_rows)
write_csv(TABLES / "python_threshold_cascade_summary.csv", summary_rows)
write_csv(TABLES / "python_threshold_cascade_validation_checks.csv", validation_rows)
print("Cascading failure and contagion workflow complete.")
print(TABLES / "python_threshold_cascade_summary.csv")
if __name__ == "__main__":
main()
This workflow shows how cascade size depends on threshold assumptions, network connectivity, and the size of the initial disturbance.
GitHub Repository
Complete Code Repository
Companion repository for the article, including threshold-cascade simulations, contagion workflows, overload and capacity diagnostics, network propagation examples, containment scenarios, validation checks, synthetic datasets, documentation assets, and multi-language examples for professional systems modeling.
Ethics and Responsible Use
Cascading failure and contagion models are ethically sensitive because they can influence infrastructure investment, emergency planning, financial regulation, public health policy, platform governance, national security, environmental management, and institutional response. They can reveal hidden systemic risk, but they can also create false certainty, alarm, blame, or unjust intervention.
Responsible use requires clarity about assumptions, propagation mechanisms, data quality, threshold uncertainty, and affected groups. A cascade model should not be used to stigmatize communities, justify surveillance, exaggerate threats, or hide institutional responsibility. It should help identify where systems are fragile and how harm can be reduced.
| Ethical issue | Risk | Responsible practice |
|---|---|---|
| False precision | Model outputs imply exact cascade probabilities without evidence. | Report uncertainty, ranges, and sensitivity. |
| Blame displacement | Failure is blamed on a trigger rather than structural fragility. | Analyze design choices, governance, and systemic conditions. |
| Stigmatization | Communities or groups are labeled as contagion sources. | Use careful language and avoid dehumanizing metaphors. |
| Security overreach | Cascade risk justifies excessive control or surveillance. | Include rights, accountability, and proportionality review. |
| Distributional blindness | Aggregate cascade metrics hide unequal harm. | Disaggregate impacts by place, group, sector, and time horizon. |
| Model misuse | Results are used outside their domain or evidence base. | State limitations and validation requirements clearly. |
Cascade modeling should make systems more accountable, not simply make risk sound inevitable.
Common Pitfalls
Cascade analysis can fail when analysts assume that all propagation is the same, confuse correlation with contagion, ignore recovery, use incomplete networks, or focus only on dramatic worst cases. The strongest models are explicit about mechanism, uncertainty, and intervention relevance.
| Pitfall | Why it matters | Correction |
|---|---|---|
| Confusing correlation with contagion | Common exposure may look like transmission. | Distinguish direct propagation from shared cause. |
| Ignoring thresholds | Exposure does not always mean failure. | Represent capacity, susceptibility, tolerance, or decision thresholds. |
| Using incomplete network data | Hidden dependencies can dominate cascade behavior. | Audit direct, indirect, cross-layer, and common-mode dependencies. |
| Assuming connectivity is always good | More links can increase propagation. | Analyze redundancy, modularity, and contagion pathways separately. |
| Ignoring recovery timing | Fast repair can stop cascades; slow repair can amplify them. | Include response, restoration, and delay dynamics. |
| Overfitting dramatic cascades | Models may exaggerate systemic collapse. | Use sensitivity analysis, validation, and plausible thresholds. |
| Reducing social contagion to mechanics | Human behavior includes interpretation, agency, power, and trust. | Include institutional and social context. |
| Failing to connect results to action | Risk maps are useless without interventions. | Test containment, redundancy, monitoring, and governance strategies. |
The central correction is to treat cascading failure as a structural propagation claim that requires mechanism, network evidence, threshold logic, and responsible interpretation.
Conclusion
Cascading failure and contagion are central to systems modeling because they explain how local disruption can become systemic crisis. A single failure may remain isolated in a resilient system, but in a tightly coupled, capacity-constrained, highly dependent, or behaviorally reactive system, that failure can spread through load redistribution, dependency loss, exposure, infection, influence, confidence, or information.
These dynamics challenge component-by-component analysis. Systemic risk lives in relationships, thresholds, feedback loops, timing, and recovery capacity. A system can look efficient under normal conditions and fragile under stress. A local shock can reveal hidden dependencies. A small trigger can produce large consequences if the system is already near threshold.
For systems modeling, the task is to represent propagation explicitly. What spreads? Through which network? Under what threshold? At what speed? With what recovery capacity? Which interventions contain the cascade? Which assumptions drive the result?
Used responsibly, cascade and contagion models help decision-makers identify hidden fragility, protect critical functions, design containment strategies, invest in redundancy and recovery, and understand why resilience is not merely the strength of parts but the structure of relationships among them.
Related Articles
- What Is Systems Modeling?
- Systems Thinking vs Systems Modeling
- Why Complex Systems Require Models
- Network Models
- Nonlinearity, Thresholds, and Regime Change
- Resilience and Adaptive Systems
- Critical Transitions and Tipping Points in Complex Systems
- Early Warning Signals of System Collapse
- Phase Transitions in Complex Systems
- Scenario Modeling and Simulation
- Stress Testing and Robustness Analysis
- Uncertainty and Model Interpretation
Further Reading
- Newman, M.E.J. (2018) Networks. 2nd edn. Oxford: Oxford University Press.
- Barabási, A.-L. (2016) Network Science. Cambridge: Cambridge University Press. Available at: https://networksciencebook.com/.
- Watts, D.J. (2002) ‘A simple model of global cascades on random networks’, Proceedings of the National Academy of Sciences, 99(9), pp. 5766–5771. Available at: https://www.pnas.org/doi/10.1073/pnas.082090499.
- Buldyrev, S.V., Parshani, R., Paul, G., Stanley, H.E. and Havlin, S. (2010) ‘Catastrophic cascade of failures in interdependent networks’, Nature, 464, pp. 1025–1028. Available at: https://www.nature.com/articles/nature08932.
- Albert, R., Jeong, H. and Barabási, A.-L. (2000) ‘Error and attack tolerance of complex networks’, Nature, 406, pp. 378–382. Available at: https://www.nature.com/articles/35019019.
- Haldane, A.G. and May, R.M. (2011) ‘Systemic risk in banking ecosystems’, Nature, 469, pp. 351–355. Available at: https://www.nature.com/articles/nature09659.
- May, R.M., Levin, S.A. and Sugihara, G. (2008) ‘Complex systems: Ecology for bankers’, Nature, 451, pp. 893–895. Available at: https://www.nature.com/articles/451893a.
- Helbing, D. (2013) ‘Globally networked risks and how to respond’, Nature, 497, pp. 51–59. Available at: https://www.nature.com/articles/nature12047.
- Pastor-Satorras, R., Castellano, C., Van Mieghem, P. and Vespignani, A. (2015) ‘Epidemic processes in complex networks’, Reviews of Modern Physics, 87, pp. 925–979. Available at: https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.87.925.
- Vespignani, A. (2010) ‘Complex networks: The fragility of interdependency’, Nature, 464, pp. 984–985. Available at: https://www.nature.com/articles/464984a.
- Sterman, J.D. (2000) Business Dynamics: Systems Thinking and Modeling for a Complex World. Boston: Irwin/McGraw-Hill.
- Meadows, D.H. (2008) Thinking in Systems: A Primer. White River Junction, VT: Chelsea Green.
- Santa Fe Institute. What Is Complex Systems Science? Available at: https://www.santafe.edu/what-is-complex-systems-science.
- System Dynamics Society. System Dynamics Society. Available at: https://systemdynamics.org/.
References
- Albert, R., Jeong, H. and Barabási, A.-L. (2000) ‘Error and attack tolerance of complex networks’, Nature, 406, pp. 378–382. Available at: https://www.nature.com/articles/35019019.
- Barabási, A.-L. (2016) Network Science. Cambridge: Cambridge University Press. Available at: https://networksciencebook.com/.
- Buldyrev, S.V., Parshani, R., Paul, G., Stanley, H.E. and Havlin, S. (2010) ‘Catastrophic cascade of failures in interdependent networks’, Nature, 464, pp. 1025–1028. Available at: https://www.nature.com/articles/nature08932.
- Haldane, A.G. and May, R.M. (2011) ‘Systemic risk in banking ecosystems’, Nature, 469, pp. 351–355. Available at: https://www.nature.com/articles/nature09659.
- Helbing, D. (2013) ‘Globally networked risks and how to respond’, Nature, 497, pp. 51–59. Available at: https://www.nature.com/articles/nature12047.
- May, R.M., Levin, S.A. and Sugihara, G. (2008) ‘Complex systems: Ecology for bankers’, Nature, 451, pp. 893–895. Available at: https://www.nature.com/articles/451893a.
- Meadows, D.H. (2008) Thinking in Systems: A Primer. White River Junction, VT: Chelsea Green.
- Newman, M.E.J. (2018) Networks. 2nd edn. Oxford: Oxford University Press.
- Pastor-Satorras, R., Castellano, C., Van Mieghem, P. and Vespignani, A. (2015) ‘Epidemic processes in complex networks’, Reviews of Modern Physics, 87, pp. 925–979. Available at: https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.87.925.
- Santa Fe Institute. (n.d.) What Is Complex Systems Science? Available at: https://www.santafe.edu/what-is-complex-systems-science.
- Sterman, J.D. (2000) Business Dynamics: Systems Thinking and Modeling for a Complex World. Boston: Irwin/McGraw-Hill.
- System Dynamics Society. (n.d.) System Dynamics Society. Available at: https://systemdynamics.org/.
- Vespignani, A. (2010) ‘Complex networks: The fragility of interdependency’, Nature, 464, pp. 984–985. Available at: https://www.nature.com/articles/464984a.
- Watts, D.J. (2002) ‘A simple model of global cascades on random networks’, Proceedings of the National Academy of Sciences, 99(9), pp. 5766–5771. Available at: https://www.pnas.org/doi/10.1073/pnas.082090499.
