Ambiguity aversion and the Ellsberg paradox

decision-theory
ambiguity-aversion
ellsberg-paradox
maxmin-expected-utility
Implement the Ellsberg urn experiment in R, model ambiguity aversion using maxmin expected utility and alpha-MEU, and show how ambiguity affects strategic decisions and games with unknown opponent types.
Author

Raban Heller

Published

May 8, 2026

Modified

May 8, 2026

Keywords

ambiguity aversion, Ellsberg paradox, maxmin expected utility, alpha-MEU, Knightian uncertainty

Introduction & motivation

In 1961, Daniel Ellsberg published a thought experiment that would eventually reshape our understanding of decision-making under uncertainty. The Ellsberg paradox, as it came to be known, demonstrated a systematic pattern of behaviour that violates one of the most fundamental axioms of expected utility theory — the sure-thing principle (also called Savage’s independence axiom). The paradox does not rely on cognitive biases, framing effects, or mistakes in probability assessment. Instead, it reveals a deep and philosophically significant distinction between two types of uncertainty: risk (where probabilities are known) and ambiguity (where probabilities are unknown or imprecise). Most people, when confronted with Ellsberg’s thought experiment, exhibit a clear preference for known risks over unknown ones — a phenomenon called ambiguity aversion.

The classic Ellsberg experiment involves an urn containing 90 balls. Exactly 30 balls are red. The remaining 60 balls are some mixture of black and yellow, but the exact composition is unknown. A ball will be drawn at random, and you face two pairs of choices. In the first pair, you choose between betting on Red (winning $100 if the ball is red) and betting on Black (winning $100 if the ball is black). In the second pair, you choose between betting on Red-or-Yellow (winning $100 if red or yellow) and betting on Black-or-Yellow (winning $100 if black or yellow). The typical pattern of choices is: Red over Black in the first pair, and Black-or-Yellow over Red-or-Yellow in the second pair. This pattern is paradoxical because no single probability distribution over the ball colours can rationalise both choices simultaneously. If you prefer Red to Black, you must believe red is more likely than black, which implies you believe there are fewer than 30 black balls, which implies there are more than 30 yellow balls, which implies you should prefer Red-or-Yellow over Black-or-Yellow. But most people exhibit the opposite pattern.

The resolution lies in recognising that the Ellsberg choices reveal not a belief about probabilities but an attitude toward ambiguity. When you bet on Red, you know the probability of winning is exactly \(1/3\). When you bet on Black, the probability could be anything from \(0\) to \(2/3\) — you simply do not know. Similarly, Black-or-Yellow gives you a known probability of \(2/3\), while Red-or-Yellow gives you an ambiguous probability. People prefer the bets with known probabilities, even when this preference is inconsistent with any single probability distribution. This is ambiguity aversion: a preference for known risks over unknown ones, holding the “average” probability constant.

Formalising ambiguity aversion requires going beyond the expected utility framework of von Neumann-Morgenstern and Savage. The most influential alternative is the maxmin expected utility (MEU) model of Gilboa and Schmeidler (1989). In the MEU model, the decision-maker has a set \(\mathcal{P}\) of probability distributions (called priors) rather than a single prior, and evaluates each act by its minimum expected utility over all distributions in \(\mathcal{P}\). This is a worst-case or “pessimistic” criterion: the agent acts as if nature will choose the distribution that is worst for her. A generalisation is the \(\alpha\)-MEU model, where the agent places weight \(\alpha\) on the worst case and \(1 - \alpha\) on the best case, allowing for a spectrum of attitudes from extreme pessimism (\(\alpha = 1\), pure maxmin) through ambiguity neutrality (\(\alpha = 0.5\), averaging best and worst) to extreme optimism (\(\alpha = 0\), maximax).

In this tutorial, we implement the Ellsberg experiment computationally, show how the standard EU model fails to explain the observed choices, and demonstrate how MEU and \(\alpha\)-MEU resolve the paradox. We then apply these models to a simple investment decision under ambiguity and to a game where players face uncertainty about their opponent’s type. The analysis shows that ambiguity aversion can qualitatively change strategic behaviour: ambiguity-averse players may refuse to enter markets, cooperate less, or hedge more aggressively than EU-maximising agents.

Mathematical formulation

Ellsberg urn. There are 90 balls: 30 red (R), and 60 that are black (B) or yellow (Y) in unknown proportions. Let \(b \in \{0, 1, \ldots, 60\}\) denote the number of black balls (so \(60 - b\) yellow). The set of possible probability distributions is:

\[ \mathcal{P} = \left\{ p_b = \left(\frac{30}{90}, \frac{b}{90}, \frac{60-b}{90}\right) : b \in \{0, \ldots, 60\} \right\} \]

The four bets yield payoffs:

Bet Red drawn Black drawn Yellow drawn
I: Red 100 0 0
II: Black 0 100 0
III: Red or Yellow 100 0 100
IV: Black or Yellow 0 100 100

Expected utility. Under EU with any single prior \(p_b\):

  • \(\text{EU}(\text{Red}) = 100/3 \approx 33.3\) (fixed)
  • \(\text{EU}(\text{Black}) = 100b/90\)
  • If \(\text{EU}(\text{Red}) > \text{EU}(\text{Black})\), then \(b < 30\), implying \(60 - b > 30\), so \(\text{EU}(\text{R or Y}) = 100(90-b)/90 > 100 \cdot 60/90 = \text{EU}(\text{B or Y})\).

Hence, EU cannot explain Red \(\succ\) Black AND B-or-Y \(\succ\) R-or-Y simultaneously.

Maxmin expected utility (Gilboa-Schmeidler). The agent evaluates act \(f\) by:

\[ \text{MEU}(f) = \min_{p \in \mathcal{P}} \mathbb{E}_p[u(f)] \]

Under MEU:

  • \(\text{MEU}(\text{Red}) = u(100) \cdot 1/3 = 100/3\)
  • \(\text{MEU}(\text{Black}) = \min_b u(100) \cdot b/90 = 0\) (worst case: \(b = 0\))
  • \(\text{MEU}(\text{R or Y}) = \min_b u(100) \cdot (90-b)/90 = u(100) \cdot 30/90 = 100/3\)
  • \(\text{MEU}(\text{B or Y}) = u(100) \cdot 60/90 = 200/3\) (fixed, since B + Y = 60 always)

So MEU explains: Red \(\succ\) Black (33.3 > 0) and B-or-Y \(\succ\) R-or-Y (66.7 > 33.3).

\(\alpha\)-MEU. The agent evaluates:

\[ V_\alpha(f) = \alpha \min_{p \in \mathcal{P}} \mathbb{E}_p[u(f)] + (1-\alpha) \max_{p \in \mathcal{P}} \mathbb{E}_p[u(f)] \]

For \(\alpha > 0.5\), the Ellsberg pattern is rationalised.

R implementation

set.seed(42)

# Ellsberg urn: 30 Red, b Black, (60-b) Yellow; b unknown in {0,...,60}
# Payoff = 100 if winning colour drawn, 0 otherwise

# Expected utility of each bet as a function of b
b_range <- 0:60

eu_red      <- rep(100 * 30/90, length(b_range))
eu_black    <- 100 * b_range / 90
eu_red_yel  <- 100 * (90 - b_range) / 90
eu_blk_yel  <- rep(100 * 60/90, length(b_range))

cat("=== Expected Utility Analysis ===\n")
=== Expected Utility Analysis ===
cat(sprintf("EU(Red) = %.2f (constant)\n", eu_red[1]))
EU(Red) = 33.33 (constant)
cat(sprintf("EU(Black) ranges from %.2f to %.2f\n", min(eu_black), max(eu_black)))
EU(Black) ranges from 0.00 to 66.67
cat(sprintf("EU(Red|Yellow) ranges from %.2f to %.2f\n",
            min(eu_red_yel), max(eu_red_yel)))
EU(Red|Yellow) ranges from 33.33 to 100.00
cat(sprintf("EU(Black|Yellow) = %.2f (constant)\n\n", eu_blk_yel[1]))
EU(Black|Yellow) = 66.67 (constant)
# Show impossibility under single prior
cat("Under any single prior (fixed b):\n")
Under any single prior (fixed b):
cat("If Red > Black => b < 30 => 60-b > 30 => Red|Yellow > Black|Yellow\n")
If Red > Black => b < 30 => 60-b > 30 => Red|Yellow > Black|Yellow
cat("But Ellsberg pattern: Red > Black AND Black|Yellow > Red|Yellow\n")
But Ellsberg pattern: Red > Black AND Black|Yellow > Red|Yellow
cat("=> CONTRADICTION under any single prior.\n\n")
=> CONTRADICTION under any single prior.
# Maxmin EU (alpha = 1)
meu_red     <- min(eu_red)
meu_black   <- min(eu_black)
meu_red_yel <- min(eu_red_yel)
meu_blk_yel <- min(eu_blk_yel)

cat("=== Maxmin Expected Utility ===\n")
=== Maxmin Expected Utility ===
cat(sprintf("MEU(Red)          = %.2f\n", meu_red))
MEU(Red)          = 33.33
cat(sprintf("MEU(Black)        = %.2f\n", meu_black))
MEU(Black)        = 0.00
cat(sprintf("MEU(Red|Yellow)   = %.2f\n", meu_red_yel))
MEU(Red|Yellow)   = 33.33
cat(sprintf("MEU(Black|Yellow) = %.2f\n", meu_blk_yel))
MEU(Black|Yellow) = 66.67
cat(sprintf("Choice 1: %s (%.2f > %.2f)\n",
            ifelse(meu_red > meu_black, "Red", "Black"), meu_red, meu_black))
Choice 1: Red (33.33 > 0.00)
cat(sprintf("Choice 2: %s (%.2f > %.2f)\n",
            ifelse(meu_blk_yel > meu_red_yel, "Black|Yellow", "Red|Yellow"),
            meu_blk_yel, meu_red_yel))
Choice 2: Black|Yellow (66.67 > 33.33)
cat("=> Ellsberg pattern explained!\n\n")
=> Ellsberg pattern explained!
# Alpha-MEU for varying alpha
alpha_grid <- seq(0, 1, by = 0.05)

alpha_meu_results <- lapply(alpha_grid, function(alpha) {
  v <- function(eu_vec) alpha * min(eu_vec) + (1 - alpha) * max(eu_vec)
  data.frame(
    alpha = alpha,
    Red = v(eu_red),
    Black = v(eu_black),
    Red_or_Yellow = v(eu_red_yel),
    Black_or_Yellow = v(eu_blk_yel),
    choice1 = ifelse(v(eu_red) >= v(eu_black), "Red", "Black"),
    choice2 = ifelse(v(eu_blk_yel) >= v(eu_red_yel), "B|Y", "R|Y"),
    ellsberg = (v(eu_red) >= v(eu_black)) & (v(eu_blk_yel) >= v(eu_red_yel))
  )
})

alpha_df <- bind_rows(alpha_meu_results)

cat("=== Alpha-MEU: Ellsberg pattern by alpha ===\n")
=== Alpha-MEU: Ellsberg pattern by alpha ===
alpha_df |>
  filter(alpha %in% c(0, 0.25, 0.5, 0.75, 1.0)) |>
  select(alpha, Red, Black, Red_or_Yellow, Black_or_Yellow, ellsberg) |>
  print()
  alpha      Red    Black Red_or_Yellow Black_or_Yellow ellsberg
1  0.00 33.33333 66.66667     100.00000        66.66667    FALSE
2  0.25 33.33333 50.00000      83.33333        66.66667    FALSE
3  0.50 33.33333 33.33333      66.66667        66.66667     TRUE
4  0.75 33.33333 16.66667      50.00000        66.66667     TRUE
5  1.00 33.33333  0.00000      33.33333        66.66667     TRUE
cat(sprintf("\nEllsberg pattern holds for alpha >= %.2f\n",
            min(alpha_df$alpha[alpha_df$ellsberg])))

Ellsberg pattern holds for alpha >= 0.50
# Investment under ambiguity: risky asset with ambiguous return
# Two states: Good (return R_g) and Bad (return R_b)
# Known probability of Good: p in [p_low, p_high] (ambiguous)

R_good <- 1.15   # Return in good state
R_bad <- 0.85    # Return in bad state
R_safe <- 1.02   # Safe asset return
W <- 100          # Initial wealth
p_low <- 0.4     # Lower bound on P(Good)
p_high <- 0.7    # Upper bound on P(Good)

# Utility function: CRRA with gamma = 2
u <- function(w) -1/w  # u(w) = w^(1-gamma)/(1-gamma) for gamma = 2

# Optimal investment share in risky asset
invest_grid <- seq(0, 1, by = 0.01)

# EU with middle prior p = 0.55
p_mid <- (p_low + p_high) / 2
eu_invest <- sapply(invest_grid, function(theta) {
  w_g <- W * (theta * R_good + (1 - theta) * R_safe)
  w_b <- W * (theta * R_bad + (1 - theta) * R_safe)
  p_mid * u(w_g) + (1 - p_mid) * u(w_b)
})

# Maxmin EU: worst-case p for each investment level
meu_invest <- sapply(invest_grid, function(theta) {
  w_g <- W * (theta * R_good + (1 - theta) * R_safe)
  w_b <- W * (theta * R_bad + (1 - theta) * R_safe)
  eu_low <- p_low * u(w_g) + (1 - p_low) * u(w_b)
  eu_high <- p_high * u(w_g) + (1 - p_high) * u(w_b)
  min(eu_low, eu_high)
})

# Alpha-MEU with alpha = 0.7
alpha_invest <- 0.7
alpha_meu_invest <- sapply(invest_grid, function(theta) {
  w_g <- W * (theta * R_good + (1 - theta) * R_safe)
  w_b <- W * (theta * R_bad + (1 - theta) * R_safe)
  eu_low <- p_low * u(w_g) + (1 - p_low) * u(w_b)
  eu_high <- p_high * u(w_g) + (1 - p_high) * u(w_b)
  alpha_invest * min(eu_low, eu_high) + (1 - alpha_invest) * max(eu_low, eu_high)
})

optimal_eu <- invest_grid[which.max(eu_invest)]
optimal_meu <- invest_grid[which.max(meu_invest)]
optimal_alpha <- invest_grid[which.max(alpha_meu_invest)]

cat("=== Optimal Investment Under Ambiguity ===\n")
=== Optimal Investment Under Ambiguity ===
cat(sprintf("EU (p = %.2f):           theta* = %.2f\n", p_mid, optimal_eu))
EU (p = 0.55):           theta* = 0.00
cat(sprintf("Maxmin EU:               theta* = %.2f\n", optimal_meu))
Maxmin EU:               theta* = 0.00
cat(sprintf("Alpha-MEU (alpha = %.1f): theta* = %.2f\n",
            alpha_invest, optimal_alpha))
Alpha-MEU (alpha = 0.7): theta* = 0.00
cat("\nAmbiguity aversion reduces risk-taking.\n")

Ambiguity aversion reduces risk-taking.
invest_df <- data.frame(
  theta = rep(invest_grid, 3),
  value = c(eu_invest, meu_invest, alpha_meu_invest),
  model = rep(c("EU (p = 0.55)", "Maxmin EU", "Alpha-MEU (0.7)"),
              each = length(invest_grid))
)

Static publication-ready figure

alpha_long <- alpha_df |>
  select(alpha, Red, Black, Red_or_Yellow, Black_or_Yellow) |>
  pivot_longer(-alpha, names_to = "Bet", values_to = "Value") |>
  mutate(Bet = factor(Bet, levels = c("Red", "Black",
                                       "Red_or_Yellow", "Black_or_Yellow"),
                      labels = c("Red", "Black",
                                 "Red or Yellow", "Black or Yellow")))

p_ellsberg <- ggplot(alpha_long, aes(x = alpha, y = Value, color = Bet)) +
  geom_line(linewidth = 0.9) +
  geom_vline(xintercept = 0.5, linetype = "dashed", color = "grey50") +
  annotate("rect", xmin = 0.5, xmax = 1, ymin = -Inf, ymax = Inf,
           alpha = 0.08, fill = okabe_ito[5]) +
  annotate("text", x = 0.75, y = 15, label = "Ambiguity averse",
           size = 3.5, color = "grey40", fontface = "italic") +
  scale_color_manual(values = c("Red" = okabe_ito[6],
                                 "Black" = okabe_ito[5],
                                 "Red or Yellow" = okabe_ito[1],
                                 "Black or Yellow" = okabe_ito[3])) +
  labs(
    title = "Ellsberg paradox: Alpha-MEU valuations of four bets",
    subtitle = "Ellsberg pattern (Red > Black, B|Y > R|Y) emerges for alpha > 0.5",
    x = expression(paste("Ambiguity parameter ", alpha, " (0 = optimist, 1 = pessimist)")),
    y = "Alpha-MEU valuation",
    color = "Bet"
  ) +
  theme_publication()

p_ellsberg
Figure 1: Figure 1. Alpha-MEU valuations of the four Ellsberg bets as a function of the ambiguity parameter alpha. For alpha > 0.5, the model reproduces the Ellsberg pattern (Red preferred to Black, Black-or-Yellow preferred to Red-or-Yellow). The shaded region marks the ambiguity-averse range. Okabe-Ito palette.

Interactive figure

invest_df <- invest_df |>
  mutate(text = sprintf("Investment share: %.0f%%\n%s\nValue: %.6f",
                         theta * 100, model, value))

p_invest <- ggplot(invest_df,
       aes(x = theta, y = value, color = model, text = text)) +
  geom_line(linewidth = 0.8) +
  geom_vline(xintercept = optimal_eu, linetype = "dotted",
             color = okabe_ito[1], alpha = 0.6) +
  geom_vline(xintercept = optimal_meu, linetype = "dotted",
             color = okabe_ito[6], alpha = 0.6) +
  geom_vline(xintercept = optimal_alpha, linetype = "dotted",
             color = okabe_ito[3], alpha = 0.6) +
  scale_color_manual(values = c("EU (p = 0.55)" = okabe_ito[1],
                                 "Maxmin EU" = okabe_ito[6],
                                 "Alpha-MEU (0.7)" = okabe_ito[3])) +
  labs(
    title = "Optimal investment under ambiguity",
    subtitle = sprintf("R_good = %.0f%%, R_bad = %.0f%%, R_safe = %.0f%%, P(Good) in [%.1f, %.1f]",
                       (R_good-1)*100, (R_bad-1)*100, (R_safe-1)*100, p_low, p_high),
    x = "Share invested in risky asset (theta)",
    y = "Decision criterion value",
    color = "Model"
  ) +
  theme_publication()

ggplotly(p_invest, tooltip = "text") |>
  config(displaylogo = FALSE,
         modeBarButtonsToRemove = c("select2d", "lasso2d"))
Figure 2

Interpretation

The Ellsberg paradox is not merely a curiosity or a laboratory artefact — it reveals a fundamental limitation of the standard expected utility framework and points toward a richer theory of decision-making under uncertainty. Our implementation makes the impossibility result transparent: no single probability distribution over ball colours can simultaneously rationalise the typical Ellsberg choices. This is not a matter of getting the probabilities wrong; it is a categorical failure of the single-prior framework. The agent’s behaviour reveals that she treats known probabilities (Red has probability exactly 1/3) differently from unknown probabilities (Black has probability somewhere between 0 and 2/3), even when the “average” probability might be the same. This distinction between risk and ambiguity, first articulated by Frank Knight in 1921 and formalised by Ellsberg in 1961, is now recognised as one of the most robust findings in experimental economics.

The maxmin expected utility model of Gilboa and Schmeidler provides an elegant resolution. By allowing the agent to hold a set of priors rather than a single one, and by evaluating each act according to its worst-case expected utility, MEU captures the intuition that ambiguity-averse agents “hedge” against unknown probabilities. In the Ellsberg urn, the set of priors is \(\{p_b : b = 0, \ldots, 60\}\), and the MEU agent evaluates each bet by its minimum over this set. Red always gives 100/3, regardless of \(b\), so its MEU is 100/3. Black’s minimum (over \(b\)) is 0 (when \(b = 0\)). Hence Red is preferred. Similarly, Black-or-Yellow always gives 200/3 regardless of \(b\), while Red-or-Yellow’s minimum is 100/3 (when \(b = 60\)). Hence Black-or-Yellow is preferred. The pattern is explained: the agent prefers bets whose outcomes do not depend on the ambiguous parameter \(b\).

The \(\alpha\)-MEU model adds a valuable degree of freedom: the parameter \(\alpha \in [0, 1]\) captures the degree of ambiguity aversion. Our analysis shows that the Ellsberg pattern emerges for any \(\alpha > 0.5\) — the agent must be more than half pessimistic about ambiguity. This is a testable prediction: by varying the stakes or the degree of ambiguity in experiments, one can estimate subjects’ \(\alpha\) parameters. The empirical literature generally finds \(\alpha\) values between 0.5 and 0.8, indicating moderate ambiguity aversion. Importantly, \(\alpha = 0.5\) corresponds to the case where the agent averages best and worst cases equally — this is equivalent to EU with the midpoint prior and generates no Ellsberg-type behaviour. The behavioural content of ambiguity aversion comes from \(\alpha > 0.5\), the extra weight on worst cases.

The investment application demonstrates that ambiguity aversion has substantial economic consequences beyond the Ellsberg urn. When the probability of the good state is ambiguous (known only to lie in an interval), the MEU investor allocates significantly less to the risky asset than the EU investor who uses the midpoint probability. The \(\alpha\)-MEU investor falls in between, with the exact allocation depending on \(\alpha\). This “ambiguity premium” — the additional compensation required to hold ambiguous assets — helps explain several puzzles in finance, including the equity premium puzzle (Epstein and Wang, 1994), the home bias in international portfolio allocation, and the reluctance to participate in stock markets at all. If investors are ambiguity-averse, they require higher expected returns to hold assets with unknown probability distributions, which drives up the equity premium and reduces market participation.

The implications for game theory are equally profound. When players face strategic uncertainty — they do not know their opponent’s type, strategy, or payoff function — standard game theory assumes this uncertainty can be captured by a single prior distribution (the common prior assumption of Harsanyi). But if players are ambiguity-averse, they may evaluate strategies by their worst-case expected payoff over a set of possible beliefs about the opponent. This can lead to more conservative behaviour: choosing safer strategies, cooperating less in Prisoner’s Dilemma situations with type uncertainty, or refusing to trade when the counterparty’s information advantage is ambiguous. The literature on games with ambiguity-averse players is growing rapidly and has produced new equilibrium concepts (such as the “equilibrium under ambiguity” of Marinacci, 2000) that extend Nash equilibrium to settings with Knightian uncertainty.

References

Back to top

Reuse

Citation

BibTeX citation:
@online{heller2026,
  author = {Heller, Raban},
  title = {Ambiguity Aversion and the {Ellsberg} Paradox},
  date = {2026-05-08},
  url = {https://r-heller.github.io/equilibria/tutorials/decision-theory/ambiguity-aversion-ellsberg/},
  langid = {en}
}
For attribution, please cite this work as:
Heller, Raban. 2026. “Ambiguity Aversion and the Ellsberg Paradox.” May 8. https://r-heller.github.io/equilibria/tutorials/decision-theory/ambiguity-aversion-ellsberg/.