Last Updated May 8, 2026
Risk, uncertainty, and complexity belong together because sustainable systems do not operate in stable, isolated, or fully knowable environments. They operate in worlds shaped by incomplete information, nonlinear dynamics, interacting institutions, ecological volatility, infrastructural interdependence, technological dependency, financial pressure, and uneven social capacity. To understand risk in such conditions, it is not enough to identify hazards or estimate probabilities. One must also ask what is unknown, what cannot be predicted with confidence, how systems behave when many parts interact at once, and why apparently minor disturbances can sometimes generate disproportionate consequences.
In simpler settings, risk may be treated as a matter of calculable probability and expected loss. But sustainable systems rarely fit that model neatly. Climate, ecosystems, cities, food systems, energy grids, water systems, supply chains, public institutions, digital platforms, and financial networks are characterized by feedback loops, delays, thresholds, path dependence, adaptive behavior, and cross-scale interaction. These features make risk harder to observe, harder to quantify, and harder to govern. Uncertainty does not merely sit outside the analysis as a technical inconvenience. It is part of the substance of the problem itself. Complexity, likewise, is not just another word for complication. It refers to systems whose behavior emerges from interdependence, adaptation, and nonlinear interaction, often producing outcomes that cannot be understood by examining components in isolation.
Main Library
Publications
Article Map
Risk & Resilience
Foundation
Risk & Resilience
Related Topic
Systems Thinking
Related Topic
Sustainable Development

This article examines how risk, uncertainty, and complexity relate to one another in sustainable systems thinking. It clarifies the difference between risk and uncertainty, explains why complexity changes the character of both, and shows why resilience becomes so important when prediction is limited and system behavior is only partially controllable. It also extends the conceptual discussion into a computational framework by adding a mathematical lens, advanced Python diagnostics, advanced R dashboarding, scenario analysis, and reproducible repository scaffolding.
The article provides a conceptual bridge between the opening article, What Are Risk and Resilience in Sustainable Systems?, and later articles on feedback loops, cascading failure, adaptive governance, critical infrastructure, stress testing, and system breakdown.
Why the Concepts Belong Together
Risk, uncertainty, and complexity are often discussed separately, but in sustainable systems they rarely appear apart. Risk refers to the possibility of adverse outcomes. Uncertainty refers to limits in knowledge, foresight, measurement, or confidence about how those outcomes may arise, how severe they may be, or how systems may respond. Complexity refers to patterns of interdependence, feedback, adaptation, and emergence that make system behavior difficult to reduce to simple linear cause and effect.
When these three conditions combine, governance becomes more demanding. A hazard may be known in general terms but uncertain in timing, magnitude, location, or interaction with other pressures. A system may be mapped formally but still behave unpredictably because its parts adapt, interact, and generate cascading effects. Institutions may have abundant data yet still struggle because complexity makes it difficult to identify which variables matter most, where thresholds lie, how interventions will reverberate through connected domains, or which vulnerabilities will become decisive under stress.
This is why sustainable systems analysis cannot rely exclusively on static models of optimization, prediction, or control. It must also account for surprise, incomplete knowledge, nonlinear change, cross-sector coupling, and the possibility that interventions will generate unintended consequences. Risk, uncertainty, and complexity are therefore not marginal concerns. They define the context within which real systems must endure.
The relationship can be stated simply. Risk asks what can go wrong. Uncertainty asks what is not known about what can go wrong. Complexity asks why the system may behave in ways that are not obvious from its individual parts. Taken together, they force sustainable systems thinking to move beyond simple hazard lists and toward a deeper understanding of dynamic fragility.
This matters because the most consequential risks in sustainable systems often arise where the three concepts overlap. Climate risk is uncertain because future emissions, climate sensitivity, adaptation, political response, and local exposure vary. It is complex because climate interacts with food, water, migration, public health, infrastructure, ecosystems, finance, and governance. It is risky because those interactions can produce material harm. Similar patterns appear in supply chains, financial systems, biodiversity loss, public health, urban infrastructure, and digital dependency.
A serious approach therefore cannot choose between risk analysis, uncertainty management, and complexity thinking. It must hold all three together.
What Risk Means
Risk is often treated as a measurable probability of harm. That remains useful in many contexts, especially where hazards, exposures, and consequences can be estimated with some degree of confidence. Yet in sustainable systems, risk is better understood as a structured possibility of loss produced through the interaction of hazards, exposure, vulnerability, and capacity. A drought becomes socially destructive not because rainfall declines alone, but because ecological stress, water dependence, infrastructure limits, governance failures, crop exposure, debt, and unequal adaptive capacity combine to turn pressure into crisis.
This broader understanding matters because it shifts attention away from hazard in isolation and toward the social, institutional, technological, infrastructural, and ecological conditions that make systems susceptible to damage. It also reveals that risk is distributed unevenly. What appears as a common shock may have radically unequal consequences because some communities, sectors, and institutions possess stronger buffers, better information, more flexible infrastructure, greater wealth, deeper social trust, more robust ecosystems, and greater access to recovery resources than others.
In sustainable systems, risk is therefore not simply an actuarial category. It is also a structural one. It is built into how systems are designed, governed, financed, maintained, inhabited, and connected. Land-use decisions, supply-chain concentration, infrastructure neglect, environmental degradation, social inequality, and short-term optimization all shape the background conditions under which hazard turns into disruption.
This does not mean probability is irrelevant. Probability remains useful where it can be estimated responsibly. Flood frequency, crop failure likelihood, heat-wave recurrence, default risk, equipment failure rates, and disease transmission models can all support decision-making. But sustainable systems often involve changing baselines and interacting risks. Historical probability may become less reliable when climate conditions shift, ecosystems degrade, new technologies emerge, or infrastructure ages beyond its design assumptions.
Risk also has a normative dimension. To call something risky is not only to describe a probability. It is to judge that certain outcomes matter. Death, displacement, crop failure, water insecurity, ecological collapse, infrastructure breakdown, institutional distrust, public-health failure, and community disruption are not neutral events. They involve values, protections, responsibilities, and political choices. Sustainable systems analysis should therefore ask not only how likely harm is, but whose harm counts, who is protected, who bears residual risk, and who decides what level of risk is acceptable.
Risk, in short, is not merely the probability of damage. It is the structured possibility that systems will produce harm under stress.
What Uncertainty Adds
Uncertainty complicates risk because not all relevant variables are known, measurable, stable, or predictable. In some situations, analysts may have a reasonably good sense of possible outcomes and their approximate probabilities. In others, they may know the possible harms but not the probability distribution. In still others, they may not even know the full range of possible futures, interactions, or failure modes. Sustainable systems often contain all three conditions at once.
Some uncertainty is empirical. Data may be incomplete, models may be imperfect, sensors may be uneven, and causal relationships may be difficult to isolate. Some uncertainty is temporal. Systems evolve, institutions adapt, technologies change, markets reorganize, ecosystems shift, and environmental conditions move outside historical ranges. Some uncertainty is epistemic in a deeper sense: the system may be too complex, too novel, too adaptive, or too interconnected for prediction to be complete even in principle. In such cases, uncertainty is not simply a temporary gap waiting to be filled. It is a persistent feature of the system.
This distinction matters because governance strategies differ depending on the kind of uncertainty involved. Where probability can be estimated, risk management may focus on prediction, optimization, insurance, expected loss, and cost-benefit analysis. Where uncertainty is deeper, robust planning, redundancy, monitoring, adaptive pathways, precaution, scenario analysis, and institutional learning become more important than fine-grained forecasts alone. In sustainable systems, the challenge is rarely to eliminate uncertainty. It is to act responsibly despite it.
Uncertainty also changes how evidence should be interpreted. A model projection is not useless because it is uncertain. A forecast is not authoritative because it is numerical. A dashboard is not neutral because it is data-driven. Under uncertainty, the quality of decision-making depends on transparency about assumptions, sensitivity to alternative futures, willingness to revise strategies, and attention to consequences if the model is wrong.
This is especially important for climate adaptation, infrastructure planning, chemical governance, biodiversity protection, public health, and technological risk. A city cannot wait for perfect certainty before upgrading drainage, reducing heat exposure, strengthening social protection, or protecting wetlands. A chemical regulator cannot assume safety simply because cumulative effects are not fully measured. A public-health system cannot treat early signals as irrelevant because the full outbreak trajectory is unknown. In all of these cases, uncertainty creates a duty of caution, not a license for delay.
Uncertainty is therefore not the enemy of analysis. It is one of analysis’s central subjects.
What Complexity Changes
Complexity changes the nature of risk because system behavior is shaped by interaction rather than by isolated variables alone. A complex system contains multiple connected parts whose relationships generate emergent outcomes. These systems often feature nonlinear responses, feedback loops, delays, adaptive behavior, cross-scale effects, lock-in, path dependence, and thresholds beyond which change becomes abrupt or difficult to reverse.
This means that causes and consequences do not line up neatly. A modest disturbance may generate far-reaching disruption if it strikes a highly coupled system at a vulnerable point. Conversely, a large shock may be absorbed if the system has redundancy, modularity, and adaptive capacity. In complex systems, outcomes depend not only on the size of a stressor, but on timing, network structure, accumulated strain, institutional response, social trust, ecological condition, and how other components react.
Complexity also makes prediction harder because the system itself changes as actors respond. Governments alter policy, firms reroute supply chains, households change behavior, ecosystems cross thresholds, platforms adjust algorithms, investors reprice risk, and institutions learn or fail to learn. These responses become part of the evolving system, which means that risk is dynamic rather than static. Complexity therefore undermines any assumption that control can be achieved simply by observing one variable at a time.
The practical importance of complexity is that it turns risk into a relational and systemic problem. A water shortage may interact with energy demand, food prices, migration, conflict, health, fiscal stress, and political legitimacy. A cyber failure may affect hospitals, logistics, payment systems, public communication, and emergency response. A heat wave may affect labor productivity, grid demand, health systems, schools, transport, and air quality. Complexity means that the site where a hazard begins may not be the site where its most serious consequences emerge.
Complexity also challenges narrow efficiency. Highly optimized systems often remove slack, redundancy, diversity, local capacity, and buffers. These systems may perform well under expected conditions but fail sharply when assumptions break. A just-in-time supply chain, a centralized data system, a monoculture crop landscape, or a tightly coupled energy grid may be efficient in normal conditions while fragile under stress. Complexity therefore makes resilience design more important, because the goal is not merely optimal performance but graceful behavior under disturbance.
To think in terms of complexity is to ask how the system behaves as a system.
From Calculable Risk to Systemic Risk
The more complex and interconnected a system becomes, the more likely risk is to take systemic forms. Systemic risk differs from localized risk because its consequences spread across sectors, scales, or institutions rather than remaining confined to one place. Financial contagion, infrastructure cascade, food-energy-water interactions, public-health emergencies, cyber disruption, ecological tipping points, and climate-linked compound events all illustrate this broader pattern.
Systemic risk is difficult because interdependence can transform local failure into network-wide stress. A power outage may disrupt communications, water treatment, hospital functioning, logistics, fuel distribution, payment systems, and emergency response. A climate shock may reverberate through agriculture, migration, insurance markets, public finance, conflict risk, and political stability. A drought may become not only a hydrological event but an economic, developmental, and governance challenge.
In such conditions, linear thinking becomes inadequate. Managing one risk in isolation may shift pressure elsewhere. Increasing efficiency in one part of a system may reduce resilience in another. Interventions can generate trade-offs that are invisible in narrow sectoral analysis. A sustainable systems approach therefore has to think in terms of systemic risk rather than merely individual hazards.
Systemic risk also changes responsibility. If harm propagates through connected systems, then no single local actor may fully control the conditions that shape vulnerability. A community may be told to become resilient while its risk is shaped by national infrastructure policy, global emissions, real-estate markets, insurance withdrawal, supply-chain decisions, or upstream land use. Systemic risk therefore requires systemic governance. Local preparedness matters, but it cannot substitute for structural risk reduction.
Another feature of systemic risk is hidden dependency. Systems may appear diversified while sharing the same underlying vulnerability: one cloud provider, one shipping chokepoint, one crop input, one payment system, one software library, one fuel supply, one watershed, one regulatory assumption, or one political bargain. These common-mode failures are especially dangerous because they defeat the appearance of independence. A portfolio, network, city, or institution may look resilient until the shared dependency is exposed.
The transition from calculable risk to systemic risk therefore changes the question. The issue is not only “What is the probability of this event?” It is also “What else depends on this system, what could cascade, which assumptions are shared, which capacities are missing, and who absorbs the consequences?”
Why Prediction Has Limits
Prediction remains valuable, but complexity and uncertainty place real limits on what prediction can accomplish. Forecasting is often strongest where systems are relatively stable, variables are well measured, and causal relationships are well understood. It becomes weaker where systems are adaptive, tightly coupled, nonlinear, and historically contingent. In such contexts, precise prediction may be less useful than identifying plausible ranges, stress points, early-warning indicators, domains of vulnerability, and conditions under which systems fail.
This does not mean analysis is futile. It means analysis must become more plural and humble. Instead of assuming that one model can master the future, institutions often need scenario planning, sensitivity analysis, stress testing, horizon scanning, structured uncertainty assessment, and continuous monitoring. They must distinguish between situations where probability is informative and those where surprise remains structurally unavoidable. A governance system that confuses uncertainty with ignorance or treats complexity as noise risks overconfidence at exactly the moment caution is most needed.
Sustainable systems especially demand this humility because they operate across long time horizons and large scales. Climate adaptation, infrastructure planning, watershed management, biodiversity governance, public-health preparedness, and urban resilience all involve irreversible or long-lived choices made under uncertainty. Roads, housing, dams, power grids, zoning rules, chemical approvals, coastal defenses, and water systems can lock in vulnerability for decades. The central task is not to know the future perfectly, but to make decisions that remain viable across multiple plausible futures.
Prediction also has political limits. Models can inform decisions, but they cannot decide what risks are acceptable, whose losses matter, or how costs should be distributed. A technically accurate forecast may still be unjust if it ignores people without political voice. A probabilistic model may obscure moral urgency if it treats severe harm to vulnerable communities as a tolerable expected loss. Prediction must therefore be paired with deliberation, precaution, rights, and accountability.
The strongest institutions under uncertainty do not abandon prediction. They use prediction where it helps, scenario planning where futures diverge, monitoring where signals change, precaution where stakes are high, and adaptive governance where learning is necessary. They also preserve enough capacity to respond when predictions fail.
Governance Under Uncertainty
Governance under uncertainty requires a different posture from governance under stable conditions. It places greater value on anticipation, flexibility, learning, redundancy, cross-sector coordination, and public legitimacy. It asks not only how to prevent known harms, but how to maintain capacity when shocks exceed expectations or interact in unforeseen ways.
This often means moving from narrow optimization toward robustness. A highly optimized system may perform impressively when assumptions hold, yet fail quickly when they do not. By contrast, resilient governance often preserves spare capacity, institutional memory, distributed authority, modular design, and the ability to revise strategy as new information emerges. What appears inefficient in a static model may prove indispensable under stress.
Governance under uncertainty also requires adaptive pathways. Instead of making one fixed plan based on one forecast, institutions can define staged decisions, trigger points, monitoring indicators, fallback options, and alternative pathways. This allows action to begin before certainty is complete while preserving the ability to adjust as evidence changes. Such approaches are especially useful for coastal planning, water systems, climate adaptation, infrastructure investment, public health, and ecological restoration.
It also means recognizing that uncertainty is social as well as technical. Vulnerability is shaped by trust, legitimacy, access, inequality, and public capacity. Communities that lack voice, infrastructure, or institutional protection face deeper uncertainty because they have less influence over how risks are perceived, managed, and redistributed. Good governance under uncertainty therefore requires not only better models and monitoring, but fairer institutions and stronger social capacity.
Precaution is also central. Precaution does not mean paralysis or fear of all innovation. It means that when harms may be serious, irreversible, or unequally distributed, decision-makers should not demand impossible certainty before acting. This is especially important for climate tipping risks, biodiversity loss, chemical pollution, public-health threats, and infrastructure exposure. Under uncertainty, delay is itself a decision.
A governance system capable of uncertainty must therefore be evidence-based without being overconfident, flexible without being arbitrary, participatory without being paralyzed, and precautionary without abandoning learning. That is a difficult balance, but it is increasingly the condition of responsible sustainability governance.
Why Resilience Matters
Resilience becomes crucial in conditions of uncertainty and complexity because prediction alone cannot secure sustainable systems. When not all hazards can be anticipated, not all interactions can be modeled, and not all shocks can be prevented, systems need capacities that allow them to cope, adapt, reorganize, and continue functioning under strain.
This is why resilience should be understood not as a substitute for risk analysis, but as its necessary companion. The more complex a system is, the more important it becomes to cultivate diversity, redundancy, adaptability, monitoring, learning, ecological buffers, social trust, and institutional coordination. These capacities do not eliminate risk, but they reduce the chance that disturbance becomes catastrophic breakdown.
Resilience also matters because uncertainty can make prevention incomplete. A city may not know the exact rainfall intensity of future storms, but it can protect wetlands, improve drainage, create cooling centers, strengthen social networks, reduce housing vulnerability, diversify energy systems, and improve emergency communication. A supply chain may not know the exact future disruption, but it can reduce single-source dependency, increase transparency, build strategic reserves, and design substitution pathways. A public-health system may not predict every outbreak, but it can strengthen surveillance, staffing, trust, stockpiles, and local response capacity.
At the same time, resilience must be judged critically. Some systems are resilient because they preserve inequity or shift risk onto others. A wealthy district may protect itself by displacing floodwater elsewhere. A firm may build supply-chain resilience by forcing risk onto workers or suppliers. An authoritarian institution may be resilient in preserving control. Sustainable resilience requires more than persistence. It requires forms of adaptation and endurance that remain compatible with ecological integrity, justice, public legitimacy, and long-term viability.
Complexity makes that task harder, but it also makes it more urgent. In a world where risks interact and prediction has limits, resilience is not optional. It is one of the chief capacities through which societies, infrastructures, ecosystems, and institutions remain viable under pressure.
Mathematical Lens: Risk, Uncertainty, Complexity, and Robust Response
Risk, uncertainty, and complexity can be represented as a relationship among expected harm, uncertainty range, interdependence, nonlinear sensitivity, and adaptive capacity. Let \(p_i\) represent the estimated probability of hazard \(i\), \(L_i\) represent its estimated loss, and \(n\) represent the number of relevant hazards. A simple expected-risk score can be written as:
R = \sum_{i=1}^{n} p_i L_i
\]
Interpretation: Expected risk combines estimated probabilities and losses across hazards. This is useful when probabilities and losses are reasonably knowable.
In complex sustainable systems, probability and loss estimates often carry uncertainty. Let \(\sigma_{p_i}\) represent uncertainty around probability and \(\sigma_{L_i}\) represent uncertainty around loss. An uncertainty-adjusted risk score can be written as:
R_U = \sum_{i=1}^{n} p_i L_i \left(1 + \sigma_{p_i} + \sigma_{L_i}\right)
\]
Interpretation: Uncertainty-adjusted risk rises when probability and loss estimates are less certain, making uncertainty visible rather than hiding it behind point estimates.
Complexity can be represented through an interdependence multiplier. Let \(D\) represent dependency density, \(F\) represent feedback strength, \(T\) represent threshold sensitivity, and \(A\) represent adaptive behavior that can change the system’s response over time. A complexity multiplier can be written as:
M_C = 1 + \alpha D + \beta F + \gamma T + \delta A
\]
Interpretation: Complexity increases systemic risk when dependency, feedback, threshold sensitivity, and adaptive behavior make outcomes harder to predict or contain.
Systemic risk can then be represented as:
R_{sys} = R_U \times M_C
\]
Interpretation: Systemic risk increases when uncertainty-adjusted risk is amplified by interdependence, feedback, thresholds, and adaptive system behavior.
A robust response capacity can be represented through monitoring, redundancy, flexibility, institutional learning, and adaptive governance:
C_R = w_m M + w_r R_d + w_f F_x + w_l L_g + w_a A_g
\]
Interpretation: Robust response capacity rises when systems can monitor change, preserve redundancy, remain flexible, learn institutionally, and adapt governance strategies.
The resilience gap under uncertainty and complexity can then be written as:
\Delta = \max(0, R_{sys} – C_R)
\]
Interpretation: A resilience gap appears when systemic risk exceeds robust response capacity. This is where stress testing, precaution, adaptation, or transformation becomes urgent.
| Term | Meaning | Interpretive role |
|---|---|---|
| \(p_i\) | Estimated probability of hazard \(i\) | Represents calculable risk where probability can be estimated. |
| \(L_i\) | Estimated loss from hazard \(i\) | Represents consequence, damage, disruption, or functional loss. |
| \(R\) | Expected risk | Useful when probabilities and losses are reasonably knowable. |
| \(\sigma_{p_i}\) | Probability uncertainty | Represents uncertainty in the likelihood estimate. |
| \(\sigma_{L_i}\) | Loss uncertainty | Represents uncertainty in the consequence estimate. |
| \(M_C\) | Complexity multiplier | Represents amplification from interdependence, feedback, thresholds, and adaptation. |
| \(R_{sys}\) | Systemic risk | Represents risk after uncertainty and complexity amplification. |
| \(C_R\) | Robust response capacity | Represents monitoring, redundancy, flexibility, learning, and adaptive governance. |
| \(\Delta\) | Resilience gap | Shows where systemic risk exceeds response capacity. |
This mathematical lens does not claim that complex systems can be fully controlled by equations. It clarifies why simple expected-risk models are often insufficient. In sustainable systems, risk must be interpreted through uncertainty, dependency, feedback, thresholds, and adaptive behavior. Resilience becomes essential because robust response capacity is what allows systems to endure when prediction is incomplete.
Advanced Python Workflow: Risk, Uncertainty, and Complexity Diagnostics
The following Python workflow models risk, uncertainty, and complexity as a relationship among hazard probability, expected loss, uncertainty, dependency density, feedback strength, threshold sensitivity, adaptive behavior, monitoring capacity, redundancy, flexibility, institutional learning, and adaptive governance. The workflow generates system-level diagnostics, scenario comparisons, and Monte Carlo uncertainty outputs.
"""
Advanced risk, uncertainty, and complexity diagnostics.
This workflow models:
- expected risk
- uncertainty-adjusted risk
- complexity amplification
- systemic risk
- robust response capacity
- resilience gaps
- scenario-based governance improvement
- Monte Carlo uncertainty around system risk
The sample data are illustrative. Replace them with documented hazard,
loss, uncertainty, dependency, feedback, governance, and capacity indicators
before applied use.
"""
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
from typing import Dict
import numpy as np
import pandas as pd
BASE_DIR = Path("articles/risk-uncertainty-complexity")
DATA_FILE = BASE_DIR / "data" / "risk_uncertainty_complexity_panel.csv"
OUTPUT_DIR = BASE_DIR / "outputs"
@dataclass(frozen=True)
class Scenario:
"""Scenario assumptions for uncertainty and complexity governance."""
name: str
probability_reduction: float
loss_reduction: float
uncertainty_reduction: float
dependency_reduction: float
monitoring_gain: float
redundancy_gain: float
flexibility_gain: float
learning_gain: float
adaptive_governance_gain: float
SCENARIOS: Dict[str, Scenario] = {
"baseline": Scenario("baseline", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),
"monitoring_upgrade": Scenario("monitoring_upgrade", 0.02, 0.02, 0.18, 0.02, 0.20, 0.04, 0.06, 0.08, 0.08),
"redundancy_and_modularity": Scenario("redundancy_and_modularity", 0.03, 0.06, 0.06, 0.16, 0.06, 0.22, 0.18, 0.08, 0.08),
"adaptive_governance": Scenario("adaptive_governance", 0.04, 0.08, 0.10, 0.08, 0.12, 0.10, 0.16, 0.20, 0.22),
"deep_robustness_transition": Scenario("deep_robustness_transition", 0.08, 0.14, 0.18, 0.20, 0.20, 0.24, 0.24, 0.24, 0.26),
}
def load_data(path: Path) -> pd.DataFrame:
"""Load and validate the risk-uncertainty-complexity panel."""
df = pd.read_csv(path)
required = {
"system_id",
"system_name",
"domain",
"region",
"primary_hazard",
"hazard_probability",
"expected_loss_index",
"probability_uncertainty",
"loss_uncertainty",
"dependency_density",
"feedback_strength",
"threshold_sensitivity",
"adaptive_behavior",
"monitoring_capacity",
"redundancy_capacity",
"flexibility_capacity",
"institutional_learning",
"adaptive_governance_capacity",
"social_vulnerability",
"criticality_index",
}
missing = required.difference(df.columns)
if missing:
raise ValueError(f"Missing required columns: {sorted(missing)}")
numeric_cols = [
col for col in df.columns
if col not in {"system_id", "system_name", "domain", "region", "primary_hazard"}
]
for col in numeric_cols:
if ((df[col] < 0) | (df[col] > 1)).any():
raise ValueError(f"{col} must be scaled between 0 and 1.")
return df
def classify_band(value: float, low: float, high: float) -> str:
"""Classify normalized values."""
if value < low:
return "lower"
if value < high:
return "moderate"
return "elevated"
def score_systems(df: pd.DataFrame) -> pd.DataFrame:
"""Compute advanced uncertainty and complexity diagnostics."""
scored = df.copy()
scored["expected_risk"] = (
scored["hazard_probability"] * scored["expected_loss_index"]
)
scored["combined_uncertainty"] = (
scored["probability_uncertainty"] + scored["loss_uncertainty"]
) / 2
scored["uncertainty_adjusted_risk"] = (
scored["expected_risk"] * (1 + scored["combined_uncertainty"])
)
scored["complexity_multiplier"] = (
1
+ 0.28 * scored["dependency_density"]
+ 0.24 * scored["feedback_strength"]
+ 0.24 * scored["threshold_sensitivity"]
+ 0.24 * scored["adaptive_behavior"]
)
scored["systemic_risk"] = (
scored["uncertainty_adjusted_risk"] * scored["complexity_multiplier"]
)
scored["robust_response_capacity"] = (
0.22 * scored["monitoring_capacity"]
+ 0.20 * scored["redundancy_capacity"]
+ 0.18 * scored["flexibility_capacity"]
+ 0.20 * scored["institutional_learning"]
+ 0.20 * scored["adaptive_governance_capacity"]
)
scored["vulnerability_weighted_systemic_risk"] = (
scored["systemic_risk"]
* (1 + 0.30 * scored["social_vulnerability"])
* (1 + 0.20 * scored["criticality_index"])
)
scored["resilience_gap"] = np.maximum(
0,
scored["vulnerability_weighted_systemic_risk"]
- scored["robust_response_capacity"],
)
scored["risk_band"] = scored["vulnerability_weighted_systemic_risk"].apply(
lambda x: classify_band(x, low=0.25, high=0.55)
)
scored["capacity_band"] = scored["robust_response_capacity"].apply(
lambda x: classify_band(x, low=0.40, high=0.65)
)
scored["priority_class"] = np.select(
[
(scored["risk_band"] == "elevated") & (scored["capacity_band"] != "elevated"),
scored["combined_uncertainty"] > 0.45,
scored["complexity_multiplier"] > 1.65,
scored["resilience_gap"] > 0.20,
],
[
"urgent_systemic_risk_reduction",
"uncertainty_management_priority",
"complexity_governance_priority",
"capacity_building_priority",
],
default="monitor_and_learn",
)
return scored.sort_values(
["vulnerability_weighted_systemic_risk", "resilience_gap"],
ascending=False,
).reset_index(drop=True)
def apply_scenario(df: pd.DataFrame, scenario: Scenario) -> pd.DataFrame:
"""Apply scenario assumptions and rescore."""
scenario_df = df.copy()
scenario_df["hazard_probability"] = (
scenario_df["hazard_probability"] * (1 - scenario.probability_reduction)
).clip(0, 1)
scenario_df["expected_loss_index"] = (
scenario_df["expected_loss_index"] * (1 - scenario.loss_reduction)
).clip(0, 1)
for col in ["probability_uncertainty", "loss_uncertainty"]:
scenario_df[col] = (
scenario_df[col] * (1 - scenario.uncertainty_reduction)
).clip(0, 1)
scenario_df["dependency_density"] = (
scenario_df["dependency_density"] * (1 - scenario.dependency_reduction)
).clip(0, 1)
scenario_df["monitoring_capacity"] = (
scenario_df["monitoring_capacity"] + scenario.monitoring_gain
).clip(0, 1)
scenario_df["redundancy_capacity"] = (
scenario_df["redundancy_capacity"] + scenario.redundancy_gain
).clip(0, 1)
scenario_df["flexibility_capacity"] = (
scenario_df["flexibility_capacity"] + scenario.flexibility_gain
).clip(0, 1)
scenario_df["institutional_learning"] = (
scenario_df["institutional_learning"] + scenario.learning_gain
).clip(0, 1)
scenario_df["adaptive_governance_capacity"] = (
scenario_df["adaptive_governance_capacity"] + scenario.adaptive_governance_gain
).clip(0, 1)
rescored = score_systems(scenario_df)
rescored["scenario"] = scenario.name
return rescored
def run_scenarios(df: pd.DataFrame) -> pd.DataFrame:
"""Run all governance scenarios."""
frames = [apply_scenario(df, scenario) for scenario in SCENARIOS.values()]
return pd.concat(frames, ignore_index=True)
def monte_carlo_uncertainty(
df: pd.DataFrame,
draws: int = 3000,
seed: int = 42,
) -> pd.DataFrame:
"""Run Monte Carlo uncertainty around system indicators."""
rng = np.random.default_rng(seed)
records = []
numeric_cols = [
"hazard_probability",
"expected_loss_index",
"probability_uncertainty",
"loss_uncertainty",
"dependency_density",
"feedback_strength",
"threshold_sensitivity",
"adaptive_behavior",
"monitoring_capacity",
"redundancy_capacity",
"flexibility_capacity",
"institutional_learning",
"adaptive_governance_capacity",
"social_vulnerability",
"criticality_index",
]
for draw in range(draws):
sampled = df.copy()
noise = rng.normal(loc=0.0, scale=0.04, size=(len(df), len(numeric_cols)))
sampled[numeric_cols] = np.clip(sampled[numeric_cols].to_numpy() + noise, 0, 1)
scored = score_systems(sampled)
scored["draw"] = draw
records.append(
scored[
[
"system_id",
"system_name",
"draw",
"vulnerability_weighted_systemic_risk",
"robust_response_capacity",
"resilience_gap",
"combined_uncertainty",
"complexity_multiplier",
]
]
)
mc = pd.concat(records, ignore_index=True)
summary = (
mc.groupby(["system_id", "system_name"])
.agg(
risk_p05=("vulnerability_weighted_systemic_risk", lambda x: np.quantile(x, 0.05)),
risk_p50=("vulnerability_weighted_systemic_risk", "median"),
risk_p95=("vulnerability_weighted_systemic_risk", lambda x: np.quantile(x, 0.95)),
capacity_p50=("robust_response_capacity", "median"),
gap_p50=("resilience_gap", "median"),
uncertainty_p50=("combined_uncertainty", "median"),
complexity_p50=("complexity_multiplier", "median"),
)
.reset_index()
.sort_values("risk_p50", ascending=False)
)
return summary
def build_domain_summary(scored: pd.DataFrame) -> pd.DataFrame:
"""Summarize risk, uncertainty, and complexity by domain."""
return (
scored.groupby("domain")
.agg(
systems=("system_id", "count"),
mean_expected_risk=("expected_risk", "mean"),
mean_uncertainty_adjusted_risk=("uncertainty_adjusted_risk", "mean"),
mean_complexity_multiplier=("complexity_multiplier", "mean"),
mean_systemic_risk=("vulnerability_weighted_systemic_risk", "mean"),
mean_response_capacity=("robust_response_capacity", "mean"),
mean_resilience_gap=("resilience_gap", "mean"),
)
.reset_index()
.sort_values("mean_systemic_risk", ascending=False)
)
def main() -> None:
"""Run the full diagnostic workflow."""
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
raw = load_data(DATA_FILE)
scored = score_systems(raw)
scenarios = run_scenarios(raw)
uncertainty = monte_carlo_uncertainty(raw, draws=2000)
domain_summary = build_domain_summary(scored)
scored.to_csv(OUTPUT_DIR / "risk_uncertainty_complexity_scores.csv", index=False)
scenarios.to_csv(OUTPUT_DIR / "risk_uncertainty_complexity_scenarios.csv", index=False)
uncertainty.to_csv(OUTPUT_DIR / "risk_uncertainty_complexity_uncertainty.csv", index=False)
domain_summary.to_csv(OUTPUT_DIR / "risk_uncertainty_complexity_domain_summary.csv", index=False)
print("\nRisk, uncertainty, and complexity scores:")
print(
scored[
[
"system_name",
"domain",
"primary_hazard",
"uncertainty_adjusted_risk",
"complexity_multiplier",
"vulnerability_weighted_systemic_risk",
"robust_response_capacity",
"resilience_gap",
"priority_class",
]
].round(3).to_string(index=False)
)
print("\nDomain summary:")
print(domain_summary.round(3).to_string(index=False))
if __name__ == "__main__":
main()
This workflow makes the article’s argument operational. It begins with expected risk, then makes uncertainty visible, then amplifies risk through complexity, then compares systemic risk with robust response capacity. It is designed to avoid false precision. The Monte Carlo section perturbs key indicators so users can see whether rankings and risk classifications remain stable under plausible uncertainty.
The scenario structure also reflects the article’s governance argument. A monitoring upgrade reduces uncertainty and improves visibility. Redundancy and modularity reduce dependency and improve system survivability. Adaptive governance strengthens learning and flexibility. Deep robustness transition improves several capacities at once. This allows analysts to compare whether a system mainly needs better information, stronger buffers, reduced coupling, adaptive institutions, or deeper transformation.
Advanced R Workflow: Uncertainty, Complexity, and Systemic Risk Dashboarding
The following R workflow creates dashboard-ready outputs for uncertainty and complexity analysis. It is designed for analysts, planners, sustainability teams, public agencies, infrastructure teams, and governance researchers who need to compare expected risk, uncertainty-adjusted risk, complexity multipliers, robust response capacity, resilience gaps, scenario summaries, domain summaries, regional summaries, and long-format dashboard data.
# Advanced risk, uncertainty, and complexity dashboard workflow
#
# This workflow creates dashboard-ready outputs for:
# - expected risk
# - uncertainty-adjusted risk
# - complexity amplification
# - systemic risk
# - robust response capacity
# - resilience gaps
# - scenario comparisons
# - regional and domain summaries
library(readr)
library(dplyr)
library(tidyr)
base_dir <- "articles/risk-uncertainty-complexity"
data_file <- file.path(base_dir, "data", "risk_uncertainty_complexity_panel.csv")
output_dir <- file.path(base_dir, "outputs")
dir.create(output_dir, recursive = TRUE, showWarnings = FALSE)
systems <- read_csv(data_file, show_col_types = FALSE)
required_cols <- c(
"system_id",
"system_name",
"domain",
"region",
"primary_hazard",
"hazard_probability",
"expected_loss_index",
"probability_uncertainty",
"loss_uncertainty",
"dependency_density",
"feedback_strength",
"threshold_sensitivity",
"adaptive_behavior",
"monitoring_capacity",
"redundancy_capacity",
"flexibility_capacity",
"institutional_learning",
"adaptive_governance_capacity",
"social_vulnerability",
"criticality_index"
)
missing_cols <- setdiff(required_cols, names(systems))
if (length(missing_cols) > 0) {
stop(paste("Missing required columns:", paste(missing_cols, collapse = ", ")))
}
classify_band <- function(value, low, high) {
case_when(
value < low ~ "lower",
value < high ~ "moderate",
TRUE ~ "elevated"
)
}
score_systems <- function(df) {
df %>%
mutate(
expected_risk = hazard_probability * expected_loss_index,
combined_uncertainty =
(probability_uncertainty + loss_uncertainty) / 2,
uncertainty_adjusted_risk =
expected_risk * (1 + combined_uncertainty),
complexity_multiplier =
1 +
0.28 * dependency_density +
0.24 * feedback_strength +
0.24 * threshold_sensitivity +
0.24 * adaptive_behavior,
systemic_risk =
uncertainty_adjusted_risk * complexity_multiplier,
robust_response_capacity =
0.22 * monitoring_capacity +
0.20 * redundancy_capacity +
0.18 * flexibility_capacity +
0.20 * institutional_learning +
0.20 * adaptive_governance_capacity,
vulnerability_weighted_systemic_risk =
systemic_risk *
(1 + 0.30 * social_vulnerability) *
(1 + 0.20 * criticality_index),
resilience_gap =
pmax(0, vulnerability_weighted_systemic_risk - robust_response_capacity),
risk_band = classify_band(vulnerability_weighted_systemic_risk, 0.25, 0.55),
capacity_band = classify_band(robust_response_capacity, 0.40, 0.65),
priority_class = case_when(
risk_band == "elevated" & capacity_band != "elevated" ~
"urgent_systemic_risk_reduction",
combined_uncertainty > 0.45 ~
"uncertainty_management_priority",
complexity_multiplier > 1.65 ~
"complexity_governance_priority",
resilience_gap > 0.20 ~
"capacity_building_priority",
TRUE ~
"monitor_and_learn"
)
) %>%
arrange(desc(vulnerability_weighted_systemic_risk))
}
scored <- score_systems(systems)
scenario_parameters <- tibble::tibble(
scenario = c(
"baseline",
"monitoring_upgrade",
"redundancy_and_modularity",
"adaptive_governance",
"deep_robustness_transition"
),
probability_reduction = c(0.00, 0.02, 0.03, 0.04, 0.08),
loss_reduction = c(0.00, 0.02, 0.06, 0.08, 0.14),
uncertainty_reduction = c(0.00, 0.18, 0.06, 0.10, 0.18),
dependency_reduction = c(0.00, 0.02, 0.16, 0.08, 0.20),
monitoring_gain = c(0.00, 0.20, 0.06, 0.12, 0.20),
redundancy_gain = c(0.00, 0.04, 0.22, 0.10, 0.24),
flexibility_gain = c(0.00, 0.06, 0.18, 0.16, 0.24),
learning_gain = c(0.00, 0.08, 0.08, 0.20, 0.24),
adaptive_governance_gain = c(0.00, 0.08, 0.08, 0.22, 0.26)
)
scenario_scores <- systems %>%
tidyr::crossing(scenario_parameters) %>%
mutate(
hazard_probability = pmax(0, hazard_probability * (1 - probability_reduction)),
expected_loss_index = pmax(0, expected_loss_index * (1 - loss_reduction)),
probability_uncertainty = pmax(0, probability_uncertainty * (1 - uncertainty_reduction)),
loss_uncertainty = pmax(0, loss_uncertainty * (1 - uncertainty_reduction)),
dependency_density = pmax(0, dependency_density * (1 - dependency_reduction)),
monitoring_capacity = pmin(1, monitoring_capacity + monitoring_gain),
redundancy_capacity = pmin(1, redundancy_capacity + redundancy_gain),
flexibility_capacity = pmin(1, flexibility_capacity + flexibility_gain),
institutional_learning = pmin(1, institutional_learning + learning_gain),
adaptive_governance_capacity = pmin(1, adaptive_governance_capacity + adaptive_governance_gain)
) %>%
group_by(scenario) %>%
group_modify(~ score_systems(.x)) %>%
ungroup()
scenario_summary <- scenario_scores %>%
group_by(scenario) %>%
summarise(
mean_expected_risk = mean(expected_risk),
mean_uncertainty_adjusted_risk = mean(uncertainty_adjusted_risk),
mean_complexity_multiplier = mean(complexity_multiplier),
mean_systemic_risk = mean(vulnerability_weighted_systemic_risk),
mean_response_capacity = mean(robust_response_capacity),
mean_resilience_gap = mean(resilience_gap),
elevated_risk_systems = sum(risk_band == "elevated"),
.groups = "drop"
) %>%
arrange(mean_systemic_risk)
domain_summary <- scored %>%
group_by(domain) %>%
summarise(
systems = n(),
mean_expected_risk = mean(expected_risk),
mean_uncertainty_adjusted_risk = mean(uncertainty_adjusted_risk),
mean_complexity_multiplier = mean(complexity_multiplier),
mean_systemic_risk = mean(vulnerability_weighted_systemic_risk),
mean_response_capacity = mean(robust_response_capacity),
mean_resilience_gap = mean(resilience_gap),
.groups = "drop"
) %>%
arrange(desc(mean_systemic_risk))
regional_summary <- scored %>%
group_by(region) %>%
summarise(
systems = n(),
mean_expected_risk = mean(expected_risk),
mean_combined_uncertainty = mean(combined_uncertainty),
mean_complexity_multiplier = mean(complexity_multiplier),
mean_systemic_risk = mean(vulnerability_weighted_systemic_risk),
mean_response_capacity = mean(robust_response_capacity),
.groups = "drop"
) %>%
arrange(desc(mean_systemic_risk))
dashboard_long <- scored %>%
select(
system_id,
system_name,
domain,
region,
primary_hazard,
expected_risk,
combined_uncertainty,
uncertainty_adjusted_risk,
complexity_multiplier,
vulnerability_weighted_systemic_risk,
robust_response_capacity,
resilience_gap
) %>%
pivot_longer(
cols = c(
expected_risk,
combined_uncertainty,
uncertainty_adjusted_risk,
complexity_multiplier,
vulnerability_weighted_systemic_risk,
robust_response_capacity,
resilience_gap
),
names_to = "metric",
values_to = "value"
)
write_csv(scored, file.path(output_dir, "r_risk_uncertainty_complexity_scores.csv"))
write_csv(scenario_scores, file.path(output_dir, "r_risk_uncertainty_complexity_scenarios.csv"))
write_csv(scenario_summary, file.path(output_dir, "r_scenario_summary.csv"))
write_csv(domain_summary, file.path(output_dir, "r_domain_summary.csv"))
write_csv(regional_summary, file.path(output_dir, "r_regional_summary.csv"))
write_csv(dashboard_long, file.path(output_dir, "r_dashboard_long.csv"))
print(scored)
print(scenario_summary)
print(domain_summary)
The R workflow complements the Python workflow by producing dashboard-oriented outputs. It is especially useful for comparing domains, regions, scenarios, and metrics across systems. A production version could connect to climate hazard data, infrastructure dependency maps, supply-chain data, social vulnerability indexes, risk registers, public-health indicators, financial exposure data, and institutional-capacity assessments.
This workflow also reinforces a core argument of the article: prediction is only one part of risk governance. A serious system must also evaluate uncertainty, complexity, response capacity, and resilience gaps.
Engineering Extensions in the GitHub Repository
The accompanying repository extends the article beyond conceptual explanation into reproducible systems analysis. The current article folder is designed around a synthetic system panel, advanced Python diagnostics, advanced R dashboarding, scenario outputs, uncertainty analysis, documentation, and extensible scoring logic.
The article body foregrounds Python and R because they are the most accessible languages for data analysis, scenario modeling, uncertainty analysis, and dashboard preparation. Additional languages can strengthen the repository where they serve a real analytical purpose. Go can support lightweight scoring services and APIs. Rust can support reliable command-line scoring tools. SQL can support structured risk registers, scenario matrices, source provenance, and auditability. C and C++ can support compact numerical kernels, dependency simulations, and high-performance scenario testing. Fortran can support numerical modeling, Monte Carlo routines, and legacy scientific-computing workflows.
The deeper purpose of the repository is not to turn complexity into false certainty. It is to make assumptions visible. By separating expected risk, uncertainty, complexity amplification, response capacity, resilience gaps, and scenario effects, the workflow allows users to see how the final interpretation was produced. That transparency is essential in systems where uncertainty and complexity are not temporary inconveniences but defining features of the problem.
GitHub Repository
Complete Code Repository
The full code directory for this article, including advanced Python diagnostics, advanced R dashboard workflow, synthetic risk-uncertainty-complexity system data, scenario outputs, uncertainty analysis, documentation, and systems-level extensions, is available on GitHub.
Common Misunderstandings
A common misunderstanding is that risk and uncertainty are the same thing. Risk usually refers to the possibility of harm, especially when probability and consequence can be estimated. Uncertainty refers to limits in knowledge about probability, consequence, interaction, timing, or system response. Some risks are highly uncertain; others are relatively well characterized.
Another misunderstanding is that complexity simply means many parts. A system can have many parts and still be predictable if the relationships are stable and linear. Complexity refers to interdependence, feedback, adaptation, emergence, threshold behavior, and cross-scale interaction. It is the pattern of relationships, not just the number of components, that matters.
A third misunderstanding is that better data will eliminate uncertainty. Better data can reduce some uncertainty, but not all uncertainty. Adaptive systems change, novel risks emerge, historical baselines shift, and interactions can generate surprise. Responsible governance uses data while recognizing where prediction remains limited.
A fourth misunderstanding is that uncertainty justifies delay. In sustainable systems, uncertainty often strengthens the case for precaution, monitoring, redundancy, and adaptive planning. Waiting for certainty can allow slow-moving risk to accumulate until options narrow.
A fifth misunderstanding is that complexity makes governance impossible. Complexity makes governance more difficult, but not futile. It requires different tools: scenario planning, stress testing, adaptive pathways, modularity, monitoring, public participation, and institutional learning.
A final misunderstanding is that resilience is a substitute for prevention. Resilience matters because not all shocks can be predicted or prevented. But resilience should not be used to excuse avoidable risk creation. Sustainable systems require both risk reduction and resilience capacity.
Conclusion
Risk, uncertainty, and complexity together define the conditions under which sustainable systems must operate. Risk identifies the possibility of harm, but uncertainty reveals the limits of foresight and complexity reveals why system behavior cannot be reduced to simple linear models. As systems become more interconnected, adaptive, and exposed to environmental and social stress, risk increasingly takes systemic forms that exceed conventional sector-by-sector management.
This is why sustainable systems thinking must move beyond prediction alone. It must account for interdependence, emergence, feedback, threshold behavior, and surprise. It must distinguish between calculable risk and deeper uncertainty. It must recognize that complexity is not merely analytical difficulty but a real feature of systems that shape human and ecological outcomes. And it must recognize that resilience is not optional in complex systems, but one of the chief capacities through which societies, infrastructures, ecosystems, and institutions remain viable under pressure.
To understand risk without uncertainty is to overstate what can be known. To understand uncertainty without complexity is to miss how systems generate surprise. To understand complexity without resilience is to describe fragility without identifying how systems might endure. Taken together, these concepts provide one of the essential foundations for serious work in sustainable systems.
The computational workflows attached to this article extend that foundation into practice. They do not eliminate uncertainty or master complexity. They make risk assumptions visible, test scenario pathways, identify resilience gaps, and support more transparent reasoning about systems under stress. That is the real value of modeling in this context: not certainty, but disciplined humility.
Return to the Risk & Resilience knowledge series.
Related Reading
- Risk & Resilience
- What Are Risk and Resilience in Sustainable Systems?
- Systems Thinking
- Sustainable Development
- Planetary Boundaries
- Data Systems & Analytics
- Environmental Monitoring Systems
Further Reading
- Aven, T. and Renn, O. (2010) Risk Management and Governance: Concepts, Guidelines and Applications. Berlin: Springer. Available at: https://doi.org/10.1007/978-3-642-13926-0.
- Folke, C. (2006) ‘Resilience: The emergence of a perspective for social-ecological systems analyses’, Global Environmental Change, 16(3), pp. 253–267. Available at: https://doi.org/10.1016/j.gloenvcha.2006.04.002.
- Helbing, D. (2013) ‘Globally networked risks and how to respond’, Nature, 497, pp. 51–59. Available at: https://doi.org/10.1038/nature12047.
- Intergovernmental Panel on Climate Change (2022) Climate Change 2022: Impacts, Adaptation and Vulnerability. Available at: https://www.ipcc.ch/report/ar6/wg2/.
- Meadows, D.H. (2008) Thinking in Systems: A Primer. White River Junction, VT: Chelsea Green. Available at: https://www.chelseagreen.com/product/thinking-in-systems/.
- National Research Council (2009) Science and Decisions: Advancing Risk Assessment. Washington, DC: The National Academies Press. Available at: https://doi.org/10.17226/12209.
- Organisation for Economic Co-operation and Development (2025) Managing Emerging Critical Risks. Available at: https://www.oecd.org/en/publications/managing-emerging-critical-risks_1f9858ea-en.html.
- Organisation for Economic Co-operation and Development (n.d.) Anticipatory Governance. Available at: https://www.oecd.org/en/topics/anticipatory-governance.html.
- Perrow, C. (1999) Normal Accidents: Living with High-Risk Technologies. Princeton, NJ: Princeton University Press. Available at: https://press.princeton.edu/books/paperback/9780691004129/normal-accidents.
- Renn, O. (2008) Risk Governance: Coping with Uncertainty in a Complex World. London: Earthscan. Available at: https://www.routledge.com/Risk-Governance-Coping-with-Uncertainty-in-a-Complex-World/Renn/p/book/9781844072927.
- Stockholm Resilience Centre (2015) Applying Resilience Thinking. Available at: https://www.stockholmresilience.org/research/research-news/2015-02-19-applying-resilience-thinking.html.
- Stockholm Resilience Centre (n.d.) Interacting Complexities. Available at: https://www.stockholmresilience.org/research/research-themes/interacting-complexities.html.
- Walker, B. and Salt, D. (2006) Resilience Thinking: Sustaining Ecosystems and People in a Changing World. Washington, DC: Island Press. Available at: https://islandpress.org/books/resilience-thinking.
References
- Aven, T. and Renn, O. (2010) Risk Management and Governance: Concepts, Guidelines and Applications. Berlin: Springer. Available at: https://doi.org/10.1007/978-3-642-13926-0.
- Folke, C. (2006) ‘Resilience: The emergence of a perspective for social-ecological systems analyses’, Global Environmental Change, 16(3), pp. 253–267. Available at: https://doi.org/10.1016/j.gloenvcha.2006.04.002.
- Helbing, D. (2013) ‘Globally networked risks and how to respond’, Nature, 497, pp. 51–59. Available at: https://doi.org/10.1038/nature12047.
- Intergovernmental Panel on Climate Change (2022) Climate Change 2022: Impacts, Adaptation and Vulnerability. Available at: https://www.ipcc.ch/report/ar6/wg2/.
- National Research Council (2009) Science and Decisions: Advancing Risk Assessment. Washington, DC: The National Academies Press. Available at: https://doi.org/10.17226/12209.
- Organisation for Economic Co-operation and Development (2025) Managing Emerging Critical Risks. Available at: https://www.oecd.org/en/publications/managing-emerging-critical-risks_1f9858ea-en.html.
- Organisation for Economic Co-operation and Development (n.d.) Anticipatory Governance. Available at: https://www.oecd.org/en/topics/anticipatory-governance.html.
- Perrow, C. (1999) Normal Accidents: Living with High-Risk Technologies. Princeton, NJ: Princeton University Press. Available at: https://press.princeton.edu/books/paperback/9780691004129/normal-accidents.
- Renn, O. (2008) Risk Governance: Coping with Uncertainty in a Complex World. London: Earthscan. Available at: https://www.routledge.com/Risk-Governance-Coping-with-Uncertainty-in-a-Complex-World/Renn/p/book/9781844072927.
- Stockholm Resilience Centre (2015) Applying Resilience Thinking. Available at: https://www.stockholmresilience.org/research/research-news/2015-02-19-applying-resilience-thinking.html.
- Stockholm Resilience Centre (n.d.) Interacting Complexities. Available at: https://www.stockholmresilience.org/research/research-themes/interacting-complexities.html.
- Walker, B. and Salt, D. (2006) Resilience Thinking: Sustaining Ecosystems and People in a Changing World. Washington, DC: Island Press. Available at: https://islandpress.org/books/resilience-thinking.
