The Cuban Missile Crisis as a signaling game

real-world-data-applications
signaling-games
incomplete-information
crisis-bargaining
Model the 1962 Cuban Missile Crisis as a game-theoretic signaling game in R, analyzing Kennedy’s and Khrushchev’s strategic choices through incomplete information, credibility, and escalation dynamics.
Author

Raban Heller

Published

May 8, 2026

Modified

May 8, 2026

Keywords

Cuban Missile Crisis, signaling game, crisis bargaining, incomplete information, Kennedy, Khrushchev, brinkmanship

Introduction & motivation

The Cuban Missile Crisis of October 1962 is the most studied case of nuclear brinkmanship in history and a natural laboratory for game-theoretic analysis. When American U-2 reconnaissance discovered Soviet ballistic missiles in Cuba, President Kennedy faced a decision under profound uncertainty: Was Khrushchev’s deployment a committed provocation or a bargaining gambit that could be reversed? The US response — a naval blockade rather than an immediate airstrike — can be understood as a strategic signal designed to demonstrate resolve without irreversibly escalating to nuclear war. Allison and Zelikow (1999) famously analysed this crisis through three lenses (rational actor, organizational process, bureaucratic politics); here we focus on the rational actor model and formalize it as a signaling game with incomplete information. In a signaling game, one player (the Sender) has private information about their type and takes an observable action; the other player (the Receiver) then updates beliefs and responds. In our model, the USSR’s type (resolved vs. accommodating) is private information, the missile deployment is the signal, and the US must decide how to respond based on its beliefs about Soviet type. This framework captures the essential strategic logic of the crisis: credibility, escalation risk, and the information conveyed by costly actions. We implement the game tree, compute equilibrium strategies for different belief parameters, and visualize how the US’s optimal response depends on its prior belief about Soviet resolve.

Mathematical formulation

We model the crisis as a two-player extensive-form game with incomplete information:

Players: USSR (Sender, \(S\)), USA (Receiver, \(R\)).

USSR types: Resolved (\(\theta_H\), prob \(p\)) — willing to risk nuclear war rather than withdraw; Accommodating (\(\theta_L\), prob \(1-p\)) — prefers to withdraw if confronted with credible US resolve.

USSR actions (signal): Deploy missiles (\(D\)) or Not deploy (\(N\)). In the historical case, deployment occurred, so we analyse the subgame after observing \(D\).

USA actions (response to \(D\)): Blockade (\(B\)), Airstrike (\(A\)), or Negotiate (\(G\) for “give in”).

USSR second move (after US response): Escalate (\(E\)) or Withdraw (\(W\)).

The payoff structure captures the preference ordering of each actor:

\[ \begin{aligned} &\text{USA prefers: } \text{Soviet withdrawal} \succ \text{Negotiated removal} \succ \text{Status quo (no missiles)} \succ \text{Escalation} \\ &\text{USSR}_H \text{ prefers: } \text{Missiles stay} \succ \text{Escalation} \succ \text{Negotiated removal} \succ \text{Withdrawal} \\ &\text{USSR}_L \text{ prefers: } \text{Missiles stay} \succ \text{Negotiated removal} \succ \text{Withdrawal} \succ \text{Escalation} \end{aligned} \]

We assign cardinal payoffs to each outcome:

# Payoff table: (US payoff, USSR payoff) for each (US action, USSR response) pair
# USSR types differ in their escalation payoff
payoffs <- tribble(
  ~us_action, ~ussr_response, ~us_payoff, ~ussr_H_payoff, ~ussr_L_payoff,
  "Airstrike",  "Escalate",    -100,  -50,  -100,
  "Airstrike",  "Withdraw",      8,   -5,    -5,
  "Blockade",   "Escalate",    -80,  -30,   -80,
  "Blockade",   "Withdraw",     10,   -3,    -2,
  "Negotiate",  "Escalate",    -60,  -10,   -60,
  "Negotiate",  "Withdraw",      5,    3,     5,
  "Negotiate",  "Missiles stay", -2,   10,    10
)

knitr::kable(payoffs, caption = "Payoff matrix for the Cuban Missile Crisis signaling game.
US payoffs reflect preference for Soviet withdrawal without escalation.
Resolved USSR (θ_H) tolerates escalation more than accommodating USSR (θ_L).",
col.names = c("US Action", "USSR Response", "US Payoff", "USSR (Resolved)", "USSR (Accommodating)"))
Payoff matrix for the Cuban Missile Crisis signaling game. US payoffs reflect preference for Soviet withdrawal without escalation. Resolved USSR (θ_H) tolerates escalation more than accommodating USSR (θ_L).
US Action USSR Response US Payoff USSR (Resolved) USSR (Accommodating)
Airstrike Escalate -100 -50 -100
Airstrike Withdraw 8 -5 -5
Blockade Escalate -80 -30 -80
Blockade Withdraw 10 -3 -2
Negotiate Escalate -60 -10 -60
Negotiate Withdraw 5 3 5
Negotiate Missiles stay -2 10 10

The key insight is that a resolved USSR escalates after an airstrike (payoff \(-50 > -5\) is false, but the resolved type values not backing down), while an accommodating USSR withdraws. The US must weigh the probability of facing each type.

R implementation

We compute the US expected payoff for each action as a function of the prior belief \(p\) that the USSR is resolved.

# USSR best responses by type:
# Resolved type: Escalate after Airstrike/Blockade, "Missiles stay" after Negotiate
# Accommodating type: Withdraw after Airstrike/Blockade, Withdraw after Negotiate

us_expected_payoff <- function(p, action) {
  if (action == "Airstrike") {
    # Resolved: Escalate -> US gets -100; Accommodating: Withdraw -> US gets 8
    return(p * (-100) + (1 - p) * 8)
  } else if (action == "Blockade") {
    # Resolved: Escalate -> US gets -80; Accommodating: Withdraw -> US gets 10
    return(p * (-80) + (1 - p) * 10)
  } else if (action == "Negotiate") {
    # Resolved: Missiles stay -> US gets -2; Accommodating: Withdraw -> US gets 5
    return(p * (-2) + (1 - p) * 5)
  }
}

# Compute over range of p
p_seq <- seq(0, 1, by = 0.01)

payoff_df <- expand.grid(p = p_seq, action = c("Airstrike", "Blockade", "Negotiate"),
                          stringsAsFactors = FALSE) |>
  rowwise() |>
  mutate(expected_payoff = us_expected_payoff(p, action)) |>
  ungroup()

# Find crossover points
# Blockade vs Negotiate: p*(-80) + (1-p)*10 = p*(-2) + (1-p)*5
# -80p + 10 - 10p = -2p + 5 - 5p => -90p + 10 = -7p + 5 => -83p = -5 => p = 5/83
p_cross_bn <- 5 / 83
cat(sprintf("Blockade = Negotiate at p = %.4f (%.1f%%)\n", p_cross_bn, 100 * p_cross_bn))
Blockade = Negotiate at p = 0.0602 (6.0%)
# Airstrike vs Blockade: p*(-100) + (1-p)*8 = p*(-80) + (1-p)*10
# -100p + 8 - 8p = -80p + 10 - 10p => -108p + 8 = -90p + 10 => -18p = 2 => p = -1/9
# Negative, so Blockade always dominates Airstrike
cat("Airstrike is dominated by Blockade for all p >= 0\n")
Airstrike is dominated by Blockade for all p >= 0
cat(sprintf("\nOptimal US strategy:\n  p < %.1f%%: Blockade (force withdrawal)\n  p > %.1f%%: Negotiate (avoid escalation risk)\n",
            100 * p_cross_bn, 100 * p_cross_bn))

Optimal US strategy:
  p < 6.0%: Blockade (force withdrawal)
  p > 6.0%: Negotiate (avoid escalation risk)

Static publication-ready figure

p_payoff <- ggplot(payoff_df, aes(x = p, y = expected_payoff, color = action)) +
  geom_line(linewidth = 1) +
  geom_vline(xintercept = p_cross_bn, linetype = "dashed", color = "grey50", linewidth = 0.4) +
  annotate("text", x = p_cross_bn + 0.02, y = -40,
           label = sprintf("p* = %.3f", p_cross_bn), size = 3, hjust = 0) +
  annotate("rect", xmin = 0.10, xmax = 0.30, ymin = -105, ymax = -95,
           alpha = 0.15, fill = okabe_ito[6]) +
  annotate("text", x = 0.20, y = -92, label = "Historical estimate\nof p (10–30%)",
           size = 2.8, color = okabe_ito[6]) +
  scale_color_manual(values = c("Airstrike" = okabe_ito[6],
                                 "Blockade" = okabe_ito[5],
                                 "Negotiate" = okabe_ito[3]),
                      name = "US Action") +
  labs(
    title = "Cuban Missile Crisis — US expected payoff by action",
    subtitle = "Signal game analysis: optimal response depends on belief about Soviet resolve (p)",
    x = "Prior belief that USSR is resolved (p)",
    y = "US expected payoff"
  ) +
  theme_publication()

p_payoff
Figure 1: Figure 1. US expected payoff as a function of the prior belief p that the USSR is resolved (willing to escalate). Blockade dominates Airstrike for all p. When p is low (the USSR is likely accommodating), Blockade yields the highest payoff by forcing withdrawal. Above the crossover at p ≈ 6%, Negotiate becomes optimal to avoid catastrophic escalation. The historical belief was estimated at p ≈ 10–30%, placing Kennedy in the Negotiate-optimal zone — yet he chose Blockade, suggesting he valued the signaling effect of demonstrated resolve. Okabe-Ito palette.

Interactive figure

payoff_df_text <- payoff_df |>
  mutate(text = paste0("p = ", round(p, 2),
                       "\nAction: ", action,
                       "\nE[payoff] = ", round(expected_payoff, 1)))

p_int <- ggplot(payoff_df_text, aes(x = p, y = expected_payoff, color = action, text = text)) +
  geom_line(linewidth = 0.8) +
  scale_color_manual(values = c("Airstrike" = okabe_ito[6],
                                 "Blockade" = okabe_ito[5],
                                 "Negotiate" = okabe_ito[3])) +
  labs(x = "P(USSR resolved)", y = "US expected payoff", color = "Action") +
  theme_publication()

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

Sensitivity analysis: escalation costs

What if the cost of escalation were different? We explore how changing the nuclear war payoff affects the optimal strategy threshold.

escalation_costs <- seq(-200, -50, by = 10)

thresholds <- sapply(escalation_costs, function(esc_cost) {
  # Blockade: p*esc_cost + (1-p)*10 = p*(-2) + (1-p)*5
  # p*esc_cost + 10 - 10p = -2p + 5 - 5p
  # p*(esc_cost - 10 + 2 + 5) = 5 - 10
  # Actually: p*esc_cost + 10 - 10*p = -7*p + 5
  # p*(esc_cost - 10 + 7) = -5
  # p = -5 / (esc_cost - 3)
  p_star <- -5 / (esc_cost - 3)
  max(0, min(1, p_star))
})

sens_df <- tibble(
  escalation_cost = escalation_costs,
  threshold_p = thresholds
)

p_sens <- ggplot(sens_df, aes(x = escalation_cost, y = threshold_p,
                                text = paste0("Escalation cost: ", escalation_cost,
                                             "\nThreshold p: ", round(threshold_p, 3)))) +
  geom_line(color = okabe_ito[5], linewidth = 1) +
  geom_point(color = okabe_ito[5], size = 2) +
  labs(
    title = "How escalation costs shift the optimal strategy threshold",
    subtitle = "Higher costs (more negative) push the US toward Negotiate at lower beliefs about resolve",
    x = "US payoff from escalation (nuclear war cost)",
    y = "Threshold p* (Blockade → Negotiate)"
  ) +
  theme_publication()

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

Interpretation

The game-theoretic analysis reveals why the Cuban Missile Crisis unfolded as it did and what made Kennedy’s choice so difficult. The simple expected-payoff analysis shows that Blockade dominates Airstrike for all beliefs about Soviet resolve — the US gains nothing from the more aggressive option because Blockade achieves the same withdrawal from accommodating types at lower escalation cost against resolved types. The critical decision is between Blockade and Negotiate: if the probability of facing a resolved USSR exceeds roughly 6%, Negotiate yields higher expected payoffs. Historical estimates of Kennedy’s inner circle suggest they placed the probability of Soviet escalation (a proxy for \(p\)) at 10–30%, which would make Negotiate the risk-neutral optimum. Yet Kennedy chose Blockade — a decision explicable through several game-theoretic lenses: signaling resolve to deter future Soviet provocations (a repeated-game consideration), risk acceptance that Kennedy was willing to bear escalation risk for the larger payoff of forced withdrawal, and audience costs — having publicly committed to a strong response, backing down would damage credibility with domestic and allied audiences. The sensitivity analysis shows that as escalation costs increase (more destructive weapons, larger populations at risk), the threshold for preferring Negotiate drops rapidly, explaining why nuclear-armed states generally prefer diplomatic solutions even when provoked. This model, while simplified, captures the essential strategic logic identified by Allison and Zelikow (1999) and demonstrates how game theory provides a rigorous framework for analyzing historical crises.

References

Allison, Graham T., and Philip Zelikow. 1999. Essence of Decision: Explaining the Cuban Missile Crisis. 2nd ed. Longman.
Back to top

Reuse

Citation

BibTeX citation:
@online{heller2026,
  author = {Heller, Raban},
  title = {The {Cuban} {Missile} {Crisis} as a Signaling Game},
  date = {2026-05-08},
  url = {https://r-heller.github.io/equilibria/tutorials/real-world-data-applications/cuban-missile-crisis-signaling-game/},
  langid = {en}
}
For attribution, please cite this work as:
Heller, Raban. 2026. “The Cuban Missile Crisis as a Signaling Game.” May 8. https://r-heller.github.io/equilibria/tutorials/real-world-data-applications/cuban-missile-crisis-signaling-game/.