In a series of papers in the early 1990s American economists Tim Bresnahan and Peter Reiss explored how game theory could be used to understand competition and market structure. The two economists pointed out that the number of firms in a market is not determined randomly. Rather the number of firms in the market can be thought of as determined by the equilibrium outcome of a game.
A normal form representation.
Assume that we have a game with two players C1 and C2. In the example below these players will be retail tire stores. Each player can choose to either enter a market or not enter a market. In the example below a market is a rural American town in the 1980s. The payoffs or profits from the two choices are presented in the matrix. If both players choose Not enter, then they get 0 (nothing happens). If C1 chooses Not enter and C2 chooses Enter, then C1 gets 0 (nothing) but C2 gets 10. If C1 chooses Enter and C2 chooses Not enter then C1 gets 10 and C2 gets 0. If both players choose Enter they both get -5.
This game is supposed to represent the decision to enter a market when there are fixed costs to entry. These costs may consistent of building a store or retrofitting a current building, marketing and hiring staff. The game also highlights the fact that the players compete against each other if they both enter the same market. If only one firm enters the market, then that firm is a monopoly and can charge monopoly prices and earn monopoly profits. In the example, these monopoly profits more than cover the fixed costs of entering the market. This outcome is represented by 10 in the normal form version of the game. However, if both firms enter then they compete the price down and while they still make profits those profits are not high enough to cover the firm's fixed cost of entering the market. This outcome is represented by -5 in the normal form version of the game.
What outcome should we predict for such a game? Will firms enter this market? We can use Nash equilibrium to predict the outcome of the game. A Nash equilibrium is where each strategy used in equilibrium is optimal given the strategies used by the other players in equilibrium. Is {Not enter, Not enter} a Nash equilibrium? It isn't. We can see that by looking at the last column, we see that if C2 chooses Not enter, then C1 earns more if they choose Enter. Is {Enter, Enter} a Nash equilibrium. No. If we look at the first column we have that C2 chooses Enter, we can see that C1 is better off choosing Not enter in that circumstance. What if C1 chooses Not Enter and C2 chooses Enter? Is that a Nash equilibrium. It is! Finally! Looking at the first column, Not enter is optimal for C1. Looking at the last row then C2's choice to Enter is optimal. Are there other Nash equilibrium?
p = function(N) a/(N + 1) + c*N/(N+ 1)
pi = function(N, Q) (p(N) - c)*Q/N
a = 10
c = 3
Q = 6
e = 11
pi(1, Q) - e
pi(2, Q) - e
p(1)
p(2)
In the code above prices fall with the number of firms in the market (N) and they depend on two parameters (a and c). The parameter (a) represents the level of demand for the product in the market and (c) represents the marginal cost to sell the product. For tires the marginal cost would include the wholesale price of the tire itself as well as hourly wages of the sales people. The other parameters determine the firm's profits (pi). These are Q the market level quantity demanded and (e) which is the entry costs.
If you run the code the firm's profit if they are monopoly is 10 and if they have to compete in the market it is -4. The reason for the different profits are two-fold. First the prices are lower with two firms 6.5 and 5.33 respectively. Second, the demand is split between the firms, 6 and 3 respectively.
c = 5
Q = 15
pi(1, Q) - e
pi(2, Q) - e
p(1)
p(2)
Now change the marginal cost parameter to 5 and the market size parameter to 15. What is the Nash equilibirum of the new game? HINT - Write down the box and change the numbers using the results from the code.
Monopoly profits are now 26.5, but duopoly profits are 1.5 (positive!)
How do market prices changes between the two cases. In equilibrium in the first case only one firm enters and the price charged is 6.5. In the second case there are two firms enter the market in equilibrium and the price is 6.66. Prices are actually higher when there are two firms!
Do you see why? The competitive market is still working and the function we use assumes that prices fall as the number entrants into the market increases. It just that to have two firms enter the market we have to have an increase in the size of the market. We also snuck in a change to the marginal cost, which is why prices are higher in the second case.
The chart above is based on data used in Bresnahan and Reiss (1991). The data is available here. I have not been able to replicate results in the paper for a number of reasons including missing observations and missing variables. So the data used in the chart is a subset of the data used in the paper.
The chart suggests that average prices in the market are increasing with competition. Of course, that is not what the chart shows. It shows that some towns have both higher average prices and a larger number of stores than other towns. We don't get to observe the theoretical relationship between price and competition in the market. We get to observe the equilibrium outcome of entry decisions by actual firms accounting for equilibrium prices upon entry, marginal costs and fixed costs of entry.
Bresnahan and Reiss (1991) presents regression results that are consistent with prices falling with competition. The regressions in their paper do not account for the endogeneity of the decision to enter the market but they do account for other observed characteristics such as the brand of the tire and the mileage rating of the tire.
The chart above adjusts the prices for observed characteristics such as whether or not the store is California, the milage rating of the tire and whether or the tire is Michelin brand. Adjusting for observable characteristics of the tires seems to lead to prices that are unrelated to the number of stores in the market.
Instead of limiting things to just 2 firms, let's set up a game where there are N_max firms and N firms enter in equilibrium.
If prices and profits are determined by the functions written above and we add in a fixed cost of entry (e in the toy problem), then how determine the equilibrium number of firms in the market?
The left hand side of the equation is the firm's profits which depend on its margin (a - c), the willingness of customers to leave the market, b (price sensitivity parameter), and the number of firms in the market in equilibrium N. The right hand side of the equation are the parameters for the entry costs that adjust with the number of firms in the market in equilibrium, theta and K. As more firms enter the market, it becomes harder to find store fronts and other spaces for the firm.
The equation must hold in equilibrium. If the left hand side is bigger, then more firms should enter. If the right hand side is bigger, then fewer firms should enter.
Bresnahan and Reiss (1991) is an analysis of the entry game. However, the analysis in prices presented in the paper does not account for the endogeneity of entry. If you were going to redo this paper how would you estimate the causal relationship between prices and the number of firms in the market?
library(tidyverse)
library(data.table)
# Load data
dir = "ENTER DIRECTORY PATH"
file = paste0(dir, "tirepr.csv") #this data is based on "tirepr.prn" in the data set but with information from "t390.prn" added to it. This seems to be additional
# prices collected from the second and third waves of the survey. In addition I merged in the market ID from "tire90.prn" (by hand).
dt = fread(file)[,-c(7,10,11)] # drops empty columns and extra state variable from the sheet I created with the merge.
colnames(dt) = c("price", "brand", "rating", "state", "city",
"store", "ID", "county_state")
head(dt)
dt$price = ifelse(dt$price < 0, NA, dt$price)
dt$rating = ifelse(dt$rating <= 0, NA, dt$rating)
dt$brand = ifelse(dt$brand == "Unknown", NA, dt$brand)
# Summary statistics
dt1 = dt[, .(mean_price = mean(price, na.rm = TRUE),
sd_price = sd(price, na.rm = TRUE),
n = length(unique(store))),
by = city]
setDF(dt1) |>
ggplot(aes(x = n, y = mean_price)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
scale_x_continuous(breaks = seq(0, 6, 1)) +
# x-axis from 0 to 6
lims(x = c(0, 8)) +
labs(title = "Mean price vs. number of stores",
x = "Number of stores",
y = "Mean price") +
theme_minimal()
dt2 = merge(dt, dt1, by = "city")
dt2$brand2 = NA
for(i in 1:dim(dt2)[1]) {
dt2$brand2[i] = strsplit(dt2$brand[i], " ")[[1]][1]
}
dt2$brand2[grep("Good", dt2$brand)] = "GoodYear"
dt2$brand2[grep("Multi", dt2$brand)] = "Milti-Mile"
dt2$brand2[grep("Toyo", dt2$brand)] = "Toyo"
dt2$brand2[grep("Reming", dt2$brand)] = "Remington"
dt2$brand2[grep("Kell", dt2$brand)] = "Kelly"
dt2$brand2[grep("Han", dt2$brand)] = "Hankook"
dt2$brand2[grep("Dominato", dt2$brand)] = "Dominator"
dt2$brand2[grep("Star", dt2$brand)] = "Star"
dt2$rating = as.numeric(dt2$rating)
lm1 = lm(price ~ n + rating + as.factor(brand2) +
as.factor(state), data = dt2)
summary(lm1)
lm2 = lm(price ~ as.factor(n) + rating + as.factor(brand2) +
as.factor(state), data = dt2)
summary(lm2)
table = dt2 %>%
na.omit %>%
group_by(n) %>%
summarise(mean_price = mean(price, na.rm = TRUE),
sd_price = sd(price, na.rm = TRUE),
median_price = median(price, na.rm = TRUE),
mean_rating = mean(rating, na.rm = TRUE),
median_rating = median(rating, na.rm = TRUE),
mean_n = mean(n, na.rm = TRUE),
) %>%
arrange(n)
table
dt2$brand3 = as.factor(dt2$brand2)
dt2$state3 = as.factor(dt2$state)
lm3 = lm(price ~ rating + I(brand2 == "Michelin") +
I(state == "CA"), data = dt2)
summary(lm3)
dt2$price_pred = predict.lm(lm3, newdata = dt2)
dt2$residual = dt2$price - dt2$price_pred
dt2 %>%
ggplot(aes(x = n, y = residual)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
lims(x = c(0, 8)) +
labs(title = "Residuals vs. Number of stores",
x = "Number of stores",
y = "Residual") +
theme_minimal()