Value of information in strategic games

information-theory
value-of-information
decision-theory
bayesian-games
Compute the value of perfect and imperfect information in decision problems and games, showing that more information always helps a single agent but can hurt in strategic interaction.
Author

Raban Heller

Published

May 8, 2026

Modified

May 8, 2026

Keywords

value of perfect information, VPI, VOI, Bayesian decision theory, information in games, R

Introduction & motivation

Every decision-maker faces uncertainty, and the natural response is to seek information that resolves that uncertainty before committing to a course of action. A farmer deciding whether to plant wheat or rice would benefit from a reliable weather forecast; an investor choosing between stocks and bonds would pay handsomely for a signal about future market returns. The value of information (VOI) quantifies exactly how much a rational agent should be willing to pay for access to a signal before making a decision. This concept is fundamental to decision theory, Bayesian statistics, and information economics.

In single-agent decision problems, the situation is clean and elegant. The celebrated result, often attributed to the foundational work of Raiffa and Schlaifer (1961), states that the value of information is always non-negative for a Bayesian decision-maker: having access to any signal, no matter how noisy, can never make the agent worse off in expectation. The agent can always choose to ignore the signal if it is unhelpful, so additional information weakly dominates ignorance. The special case where the signal perfectly reveals the state of the world gives us the value of perfect information (VPI), which serves as an upper bound on the value of any imperfect signal.

However, the situation changes dramatically when we move from single-agent decision problems to multi-player strategic games. In games, information has a dual role: it helps a player make better decisions, but it may also change the strategic environment by altering the equilibrium. A striking and initially counterintuitive result is that information can hurt in games of strategic interaction. When a player’s information becomes publicly known or predictable by opponents, it may shift the equilibrium in a way that leaves the informed player worse off. This phenomenon, studied in depth by Hirshleifer (1971) and later formalised in the literature on Bayesian games (Harsanyi 1973), has deep implications for mechanism design, signalling, and strategic communication.

In this tutorial, we develop both the theory and computational tools for evaluating the value of information. We begin with a clean single-agent decision problem – the classic weather-farming example – and compute both VPI and the VOI for imperfect signals of varying precision. We then move to a two-player game where one player receives a signal about the state of nature, and we demonstrate computationally that receiving additional information can reduce that player’s expected payoff in equilibrium. Finally, we visualise the VOI as a function of signal precision across both settings, making the contrast vivid and precise.

Mathematical formulation

Consider a decision problem with a finite state space \(\Omega = \{\omega_1, \ldots, \omega_n\}\), a prior distribution \(\pi \in \Delta(\Omega)\), an action set \(A\), and a payoff function \(u : A \times \Omega \to \mathbb{R}\). The expected payoff without information is:

\[ U_0 = \max_{a \in A} \sum_{\omega \in \Omega} \pi(\omega) \, u(a, \omega) \]

A signal is a random variable \(S\) with conditional distribution \(P(S = s \mid \omega)\) for each state. Upon observing signal realisation \(s\), the agent updates beliefs via Bayes’ rule to get posterior \(\pi(\omega \mid s)\) and chooses optimally:

\[ U_{\text{signal}} = \sum_{s} P(s) \max_{a \in A} \sum_{\omega} \pi(\omega \mid s) \, u(a, \omega) \]

The value of information for this signal is:

\[ \text{VOI} = U_{\text{signal}} - U_0 \geq 0 \]

The non-negativity follows from Jensen’s inequality applied to the convex function \(\max_a\). In the special case of perfect information (\(S = \omega\)), this becomes:

\[ \text{VPI} = \sum_{\omega} \pi(\omega) \max_{a \in A} u(a, \omega) - \max_{a \in A} \sum_{\omega} \pi(\omega) \, u(a, \omega) \]

Now consider a two-player Bayesian game. Player 1 receives signal \(S\) about state \(\omega\) before choosing action \(a_1\); Player 2 observes nothing (or knows Player 1’s signal structure). The equilibrium strategies now depend on the signal structure. Let \(\sigma^*_1(s), \sigma^*_2\) denote equilibrium strategies. Player 1’s equilibrium payoff is:

\[ U_1^* = \sum_{s} P(s) \sum_{\omega} \pi(\omega \mid s) \, u_1(\sigma^*_1(s), \sigma^*_2, \omega) \]

Crucially, changing the signal structure changes the equilibrium \((\sigma^*_1, \sigma^*_2)\), and Player 2 adjusts their strategy in response. This strategic adjustment can make Player 1 worse off despite having more information.

R implementation

We implement two examples. First, a single-agent weather-farming decision where the farmer chooses between wheat and rice, and a weather signal of varying precision reveals whether conditions will be dry or wet. Second, a two-player Cournot-like game where one firm receives a demand signal, and the opponent adjusts their quantity in response. We compute VOI across a range of signal precisions.

# --- Example 1: Single-agent weather-farming decision ---
# States: Dry (prob 0.5), Wet (prob 0.5)
# Actions: Wheat, Rice
# Payoffs: Wheat yields 100 in Dry, 40 in Wet; Rice yields 50 in Dry, 90 in Wet

payoff_matrix <- matrix(c(100, 40, 50, 90), nrow = 2, byrow = TRUE,
                        dimnames = list(c("Wheat", "Rice"), c("Dry", "Wet")))
prior <- c(Dry = 0.5, Wet = 0.5)

cat("=== Single-Agent: Weather-Farming Decision ===\n")
=== Single-Agent: Weather-Farming Decision ===
cat("Payoff matrix:\n")
Payoff matrix:
print(payoff_matrix)
      Dry Wet
Wheat 100  40
Rice   50  90
# Expected payoffs without information
eu_no_info <- apply(payoff_matrix, 1, function(row) sum(row * prior))
cat("\nExpected payoffs without info:", eu_no_info, "\n")

Expected payoffs without info: 70 70 
cat("Optimal action without info:", names(which.max(eu_no_info)), "\n")
Optimal action without info: Wheat 
U0 <- max(eu_no_info)
cat("U0 =", U0, "\n")
U0 = 70 
# Value of perfect information
U_perfect <- sum(prior * apply(payoff_matrix, 2, max))
VPI <- U_perfect - U0
cat("U(perfect info) =", U_perfect, "\n")
U(perfect info) = 95 
cat("VPI =", VPI, "\n")
VPI = 25 
# VOI as function of signal precision q in [0.5, 1]
# Signal: P(s=Dry|Dry) = P(s=Wet|Wet) = q
compute_voi_single <- function(q) {
  # P(s=Dry) = q*0.5 + (1-q)*0.5 = 0.5
  p_s_dry <- q * prior["Dry"] + (1 - q) * prior["Wet"]
  p_s_wet <- (1 - q) * prior["Dry"] + q * prior["Wet"]

  # Posteriors after s=Dry
  post_dry_given_s_dry <- q * prior["Dry"] / p_s_dry
  post_wet_given_s_dry <- (1 - q) * prior["Wet"] / p_s_dry

  # Posteriors after s=Wet
  post_dry_given_s_wet <- (1 - q) * prior["Dry"] / p_s_wet
  post_wet_given_s_wet <- q * prior["Wet"] / p_s_wet

  # Optimal expected payoff after each signal
  eu_s_dry <- max(
    payoff_matrix["Wheat", "Dry"] * post_dry_given_s_dry +
      payoff_matrix["Wheat", "Wet"] * post_wet_given_s_dry,
    payoff_matrix["Rice", "Dry"] * post_dry_given_s_dry +
      payoff_matrix["Rice", "Wet"] * post_wet_given_s_dry
  )
  eu_s_wet <- max(
    payoff_matrix["Wheat", "Dry"] * post_dry_given_s_wet +
      payoff_matrix["Wheat", "Wet"] * post_wet_given_s_wet,
    payoff_matrix["Rice", "Dry"] * post_dry_given_s_wet +
      payoff_matrix["Rice", "Wet"] * post_wet_given_s_wet
  )

  U_signal <- p_s_dry * eu_s_dry + p_s_wet * eu_s_wet
  return(U_signal - U0)
}

q_values <- seq(0.5, 1.0, by = 0.01)
voi_single <- sapply(q_values, compute_voi_single)

cat("\nVOI at selected precisions:\n")

VOI at selected precisions:
for (q in c(0.5, 0.6, 0.7, 0.8, 0.9, 1.0)) {
  cat(sprintf("  q = %.1f: VOI = %.2f\n", q, compute_voi_single(q)))
}
  q = 0.5: VOI = 0.00
  q = 0.6: VOI = 5.00
  q = 0.7: VOI = 10.00
  q = 0.8: VOI = 15.00
  q = 0.9: VOI = 20.00
  q = 1.0: VOI = 25.00
# --- Example 2: Two-player investment game where info can hurt ---
# Simplified Cournot duopoly with demand uncertainty.
# State: High demand (theta=10, prob 0.5) or Low demand (theta=4, prob 0.5)
# Firms choose quantities q1, q2 >= 0; price = theta - q1 - q2
# Profit_i = (theta - q1 - q2) * qi - c*qi, with c = 1

# Without info: both firms optimise against E[theta] = 7
# q_i^* = (E[theta] - c) / 3 = 6/3 = 2 each (Cournot NE)
# With perfect info to Firm 1 (Firm 2 knows Firm 1 is informed):
# This becomes a Bayesian Cournot game.

# Firm 1 chooses q1(H) and q1(L) for each state.
# Firm 2 chooses q2 (single quantity, doesn't observe state).
# Firm 2 best responds to E[q1] = 0.5*q1(H) + 0.5*q1(L).

# BR for Firm 2: q2 = (E[theta] - c - E[q1]) / 2
# BR for Firm 1 in state theta: q1(theta) = (theta - c - q2) / 2

# Solving the system:
# q1(H) = (10 - 1 - q2) / 2 = (9 - q2) / 2
# q1(L) = (4 - 1 - q2) / 2 = (3 - q2) / 2
# E[q1] = 0.5*(9-q2)/2 + 0.5*(3-q2)/2 = (12 - 2*q2) / 4 = (6 - q2) / 2
# q2 = (7 - 1 - (6-q2)/2) / 2 = (6 - (6-q2)/2) / 2
# q2 = (12 - 6 + q2) / 4 = (6 + q2) / 4
# 4*q2 = 6 + q2 => 3*q2 = 6 => q2 = 2

compute_cournot_payoffs <- function(q_precision) {
  # q_precision in [0.5, 1]: precision of Firm 1's signal
  # Signal: P(s=H | H) = P(s=L | L) = q_precision
  c_cost <- 1
  theta_H <- 10
  theta_L <- 4
  p_H <- 0.5
  p_L <- 0.5
  E_theta <- p_H * theta_H + p_L * theta_L  # = 7

  if (q_precision == 0.5) {
    # No information: standard Cournot
    q_star <- (E_theta - c_cost) / 3
    profit_each <- function(theta) (theta - 2 * q_star) * q_star - c_cost * q_star
    pi_1 <- p_H * profit_each(theta_H) + p_L * profit_each(theta_L)
    return(pi_1)
  }

  # Firm 1's posteriors:
  # After s=H: P(H|s=H) = q*p_H / (q*p_H + (1-q)*p_L)
  p_sH <- q_precision * p_H + (1 - q_precision) * p_L
  p_sL <- (1 - q_precision) * p_H + q_precision * p_L

  post_H_sH <- q_precision * p_H / p_sH
  post_L_sH <- (1 - q_precision) * p_L / p_sH
  post_H_sL <- (1 - q_precision) * p_H / p_sL
  post_L_sL <- q_precision * p_L / p_sL

  E_theta_sH <- post_H_sH * theta_H + post_L_sH * theta_L
  E_theta_sL <- post_H_sL * theta_H + post_L_sL * theta_L

  # Bayesian NE: Firm 1 plays q1(sH), q1(sL); Firm 2 plays q2
  # BR Firm 1 given signal s: q1(s) = (E[theta|s] - c - q2) / 2
  # BR Firm 2: q2 = (E_theta - c - E[q1]) / 2
  # E[q1] = p_sH * q1(sH) + p_sL * q1(sL)
  #        = p_sH * (E_theta_sH - c - q2)/2 + p_sL * (E_theta_sL - c - q2)/2
  #        = (p_sH*E_theta_sH + p_sL*E_theta_sL - c - q2) / 2
  #        = (E_theta - c - q2) / 2

  # q2 = (E_theta - c - (E_theta - c - q2)/2) / 2
  # q2 = ((E_theta - c) - (E_theta - c - q2)/2) / 2
  # Let M = E_theta - c = 6
  M <- E_theta - c_cost
  # q2 = (M - (M - q2)/2) / 2 = (M + q2) / 4
  # 4*q2 = M + q2 => q2 = M/3 = 2
  q2 <- M / 3

  q1_sH <- (E_theta_sH - c_cost - q2) / 2
  q1_sL <- (E_theta_sL - c_cost - q2) / 2

  # Firm 1's expected profit:
  # In state theta, Firm 1 played q1(s) (s may be right or wrong)
  # E[pi_1] = sum over theta, s of P(theta)*P(s|theta) * [(theta - q1(s) - q2)*q1(s) - c*q1(s)]
  profit <- function(theta, q1) {
    price <- theta - q1 - q2
    return(price * q1 - c_cost * q1)
  }

  pi_1 <- p_H * (q_precision * profit(theta_H, q1_sH) +
                    (1 - q_precision) * profit(theta_H, q1_sL)) +
    p_L * ((1 - q_precision) * profit(theta_L, q1_sH) +
              q_precision * profit(theta_L, q1_sL))

  return(pi_1)
}

# Compute Firm 1's payoff as function of signal precision
game_voi_data <- data.frame(
  q = q_values,
  profit = sapply(q_values, compute_cournot_payoffs)
)
baseline_profit <- compute_cournot_payoffs(0.5)
game_voi_data$voi <- game_voi_data$profit - baseline_profit

cat("=== Two-Player Cournot Game ===\n")
=== Two-Player Cournot Game ===
cat("Firm 1 profit without info:", baseline_profit, "\n")
Firm 1 profit without info: 4 
for (q in c(0.5, 0.6, 0.7, 0.8, 0.9, 1.0)) {
  cat(sprintf("  q = %.1f: profit = %.4f, VOI = %.4f\n",
              q, compute_cournot_payoffs(q),
              compute_cournot_payoffs(q) - baseline_profit))
}
  q = 0.5: profit = 4.0000, VOI = 0.0000
  q = 0.6: profit = 4.0900, VOI = 0.0900
  q = 0.7: profit = 4.3600, VOI = 0.3600
  q = 0.8: profit = 4.8100, VOI = 0.8100
  q = 0.9: profit = 5.4400, VOI = 1.4400
  q = 1.0: profit = 6.2500, VOI = 2.2500

Static publication-ready figure

We combine both scenarios into a single figure that contrasts the strictly non-negative VOI in the single-agent case with the VOI profile in the strategic game.

plot_data <- bind_rows(
  data.frame(q = q_values, voi = voi_single,
             setting = "Single-Agent (Farmer)"),
  data.frame(q = q_values, voi = game_voi_data$voi,
             setting = "Two-Player (Cournot)")
)

p_static <- ggplot(plot_data, aes(x = q, y = voi, color = setting)) +
  geom_line(linewidth = 1.2) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "grey50") +
  scale_color_manual(values = okabe_ito[c(1, 5)],
                     name = "Setting") +
  labs(
    title = "Value of Information: Single Agent vs. Strategic Game",
    subtitle = "More information always helps a lone decision-maker, but the gain in games is modulated by strategic responses",
    x = "Signal Precision (q)",
    y = "Value of Information"
  ) +
  theme_publication() +
  theme(legend.position = "bottom")

p_static
Figure 1: Figure 1. Value of information as a function of signal precision. Left: single-agent weather-farming decision where VOI is always non-negative. Right: Cournot duopoly where Firm 1’s information advantage is partially captured by the opponent’s strategic adjustment.

Interactive figure

The interactive version allows the reader to hover over any point to see the exact signal precision and corresponding VOI, making it easy to compare the two settings at each precision level.

plot_data_interactive <- plot_data %>%
  mutate(label = sprintf("Precision: %.2f\nVOI: %.3f\nSetting: %s",
                         q, voi, setting))

p_int <- ggplot(plot_data_interactive,
                aes(x = q, y = voi, color = setting, text = label)) +
  geom_line(linewidth = 1.0) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "grey50") +
  scale_color_manual(values = okabe_ito[c(1, 5)], name = "Setting") +
  labs(
    title = "Value of Information: Interactive Comparison",
    x = "Signal Precision (q)",
    y = "Value of Information"
  ) +
  theme_publication()

ggplotly(p_int, tooltip = "text") %>%
  config(displaylogo = FALSE)
Figure 2

Interpretation

The results confirm and illustrate a foundational distinction in information economics. In the single-agent weather-farming problem, the value of information is monotonically increasing in signal precision, starting at zero (when the signal is pure noise at \(q = 0.5\)) and reaching its maximum at VPI = 25 when the signal perfectly reveals the state (\(q = 1.0\)). This monotonicity is a direct consequence of the Blackwell ordering: a more informative signal is always at least as valuable as a less informative one for a single decision-maker. The curvature of the VOI function is convex in \(q\), reflecting the fact that the marginal value of additional precision increases as the signal becomes more diagnostic.

In the Cournot duopoly, the picture is qualitatively different. While Firm 1 does benefit from having a more precise signal (VOI remains positive in this parameterisation), the magnitude of the benefit is substantially smaller than in the single-agent case. This is because Firm 2 strategically adjusts its quantity in response to the information asymmetry: knowing that Firm 1 will produce more in high-demand states and less in low-demand states, Firm 2 optimises its single quantity against the expected output, partially offsetting Firm 1’s informational advantage.

In other game-theoretic contexts, the effect can be even more dramatic. In certain zero-sum games and in games with commitment power, it has been shown that information revelation can strictly hurt the informed player. The Hirshleifer effect provides a canonical example: a risk-averse agent who would benefit from insurance may be unable to obtain it if the insurer observes the same information, because the information destroys the gains from trade. These phenomena highlight that the value of information is fundamentally a property of the entire decision environment, not just of the signal itself.

References

Harsanyi, John C. 1973. “Games with Randomly Disturbed Payoffs: A New Rationale for Mixed-Strategy Equilibrium Points.” International Journal of Game Theory 2 (1): 1–23. https://doi.org/10.1007/BF01737554.
Back to top

Reuse

Citation

BibTeX citation:
@online{heller2026,
  author = {Heller, Raban},
  title = {Value of Information in Strategic Games},
  date = {2026-05-08},
  url = {https://r-heller.github.io/equilibria/tutorials/information-theory/value-of-information-games/},
  langid = {en}
}
For attribution, please cite this work as:
Heller, Raban. 2026. “Value of Information in Strategic Games.” May 8. https://r-heller.github.io/equilibria/tutorials/information-theory/value-of-information-games/.