Este documento es un material de estudio guiado. Cada tema sigue siempre el mismo recorrido, para que entiendas el razonamiento económico y no solo el código:
optim(), integrate() o una
simulación.Instrucciones prácticas
Ctrl + Shift + Enter, o
genera el informe completo con el botón Knit.rmarkdown para el botón Knit).| Sesión | Tema | Herramientas de R |
|---|---|---|
| 5 | Discriminación de precios de primer, segundo y tercer grado | integrate(), solve(),
optim() |
| 6 | Colusión: Cournot, Bertrand, dilema del cártel y factor de descuento crítico | solve(), bucles for,
simulación |
En toda la semana usaremos el mismo mercado, para poder comparar los resultados:
\[P(q) = a - q = 100 - q, \qquad CMg = c = 20 .\]
a <- 100 # intercepto de la demanda inversa: P(q) = a - q
c <- 20 # costo marginal constante
P <- function(q) a - q # demanda inversa como función de R
P(c(0, 40, 80)) # precio que se paga por las unidades 0, 40 y 80[1] 100 60 20
El excedente del consumidor (EC) es la diferencia entre lo que los consumidores estarían dispuestos a pagar y lo que efectivamente pagan. Si compran \(q\) unidades al precio \(p\):
\[EC = \int_0^{q} \big[P(x) - p\big]\,dx .\]
El excedente del productor (EP), con costo marginal constante y sin costos fijos, es el beneficio:
\[EP = \int_0^{q} \big[p - CMg\big]\,dx = (p - c)\,q .\]
El bienestar total es \(W = EC + EP\) y la pérdida irrecuperable de eficiencia (PIE) es lo que falta para llegar al máximo posible, que se alcanza cuando se produce hasta \(P(q) = CMg\):
\[W^{\max} = \int_0^{a-c} \big[P(x) - c\big]\,dx = \frac{(a-c)^2}{2} = \frac{80^2}{2} = 3200 .\]
En R, la función integrate() calcula integrales
definidas numéricamente. Su resultado es una lista; el valor está en
$value.
[1] 3200
Para que las salidas sean fáciles de leer usaremos tres funciones de presentación. Se definen una sola vez y se usan en todo el documento:
ver(): muestra varios resultados con nombre, uno por
línea y alineados.mostrar(): imprime una tabla redondeada y sin la
numeración de filas.recuadro(): igual que ver(), pero dentro
de un recuadro con título; la usamos para los resultados finales.# fmt(): da formato a un número; los enteros se muestran sin decimales.
fmt <- function(v, dec = 2) {
if (is.null(v) || length(v) == 0 || is.na(v)) return("--")
if (!is.numeric(v)) return(as.character(v))
if (abs(v - round(v)) < 1e-9) return(format(round(v), big.mark = ""))
formatC(v, format = "f", digits = dec)
}
# ver(): valores con nombre, uno por línea y alineados.
# Ejemplo: ver("Precio" = 60, "Cantidad" = 40)
ver <- function(..., dec = 2) {
x <- list(...)
cat(paste0(" ", format(names(x)), " : ",
vapply(x, fmt, character(1), dec = dec)), sep = "\n")
}
# mostrar(): data.frame redondeado y sin numeración de filas.
mostrar <- function(df, dec = 2) {
df <- as.data.frame(df)
num <- vapply(df, is.numeric, logical(1))
df[num] <- lapply(df[num], round, dec)
print(df, row.names = FALSE)
}
# recuadro(): resultados finales dentro de un recuadro con título.
recuadro <- function(titulo, ..., dec = 2) {
linea <- strrep("-", 60)
cat(linea, "\n", " ", titulo, "\n", linea, "\n", sep = "")
ver(..., dec = dec)
cat(linea, "\n", sep = "")
}El monopolista que cobra un solo precio elige \(q\) para maximizar \(\pi(q) = P(q)\,q - c\,q = (a - q)\,q - c\,q\). La condición de primer orden es
\[\frac{d\pi}{dq} = \underbrace{a - 2q}_{IMg} - \underbrace{c}_{CMg} = 0 \quad\Longrightarrow\quad q_m = \frac{a-c}{2} = 40, \qquad p_m = a - q_m = 60 .\]
qm <- (a - c) / 2 # cantidad de monopolio
pm <- P(qm) # precio de monopolio
pi_m <- (pm - c) * qm # beneficio
EC_m <- integrate(function(x) P(x) - pm, 0, qm)$value # excedente del consumidor
PIE_m <- W_max - pi_m - EC_m # lo que se pierde
recuadro("Monopolio con precio único",
"Cantidad (q)" = qm, "Precio (p)" = pm, "Beneficio" = pi_m,
"Excedente del consumidor" = EC_m, "Pérdida irrecuperable" = PIE_m,
"Bienestar total" = pi_m + EC_m)------------------------------------------------------------
Monopolio con precio único
------------------------------------------------------------
Cantidad (q) : 40
Precio (p) : 60
Beneficio : 1600
Excedente del consumidor : 800
Pérdida irrecuperable : 800
Bienestar total : 2400
------------------------------------------------------------
Interpretación. Con precio único, el monopolio deja \(EC = 800\) a los consumidores y destruye \(PIE = 800\): hay 40 unidades (de la 41 a la 80) que los consumidores valoran más que su costo, pero no se producen. La pregunta de la semana es: ¿puede la empresa capturar también esos excedentes? Hay dos caminos: cobrar precios distintos (sesión 5) o coordinarse con sus rivales (sesión 6).
Discriminar precios es vender unidades del mismo bien a precios distintos, sin que la diferencia se explique por diferencias de costos. Para hacerlo, la empresa necesita tres condiciones:
Pigou (1920) clasificó la discriminación en tres grados, según cuánta información tiene la empresa:
| Grado | Qué conoce la empresa | Ejemplo |
|---|---|---|
| Primer grado (perfecta) | La disposición a pagar de cada consumidor | Subastas, negociación individual |
| Segundo grado | Nada individual: ofrece un menú y el consumidor elige | Tarifas por bloques, paquetes de datos |
| Tercer grado | Una característica observable del grupo | Tarifa de estudiante, precios por región |
La empresa cobra a cada consumidor exactamente su precio de reserva: la unidad \(q\) se vende al precio \(P(q)\). Entonces su ingreso ya no es \(p \cdot q\) sino el área bajo la demanda, y su beneficio es
\[\pi(Q) = \int_0^{Q} P(x)\,dx - c\,Q = \int_0^{Q} \big[P(x) - c\big]\,dx .\]
¿Hasta dónde produce? Derivando con el teorema fundamental del cálculo:
\[\frac{d\pi}{dQ} = P(Q) - c = 0 \quad\Longrightarrow\quad P(Q) = c \quad\Longrightarrow\quad Q = a - c = 80 .\]
Es decir, el ingreso marginal coincide con la demanda: vender una unidad más no obliga a bajar el precio de las anteriores. Por eso la empresa produce la cantidad eficiente, la misma que en competencia perfecta.
# Paso 1: cantidad que maximiza el beneficio, P(Q) = c
Q1 <- a - c
# Paso 2: beneficio = integral de [P(x) - c] entre 0 y Q
pi_1 <- integrate(function(x) P(x) - c, 0, Q1)$value
# Paso 3: el consumidor paga su precio de reserva, por lo que EC = 0
EC_1 <- 0
PIE_1 <- W_max - pi_1 - EC_1
recuadro("Discriminación de primer grado",
"Cantidad (Q)" = Q1, "Beneficio" = pi_1,
"Excedente del consumidor" = EC_1, "Pérdida irrecuperable" = PIE_1)------------------------------------------------------------
Discriminación de primer grado
------------------------------------------------------------
Cantidad (Q) : 80
Beneficio : 3200
Excedente del consumidor : 0
Pérdida irrecuperable : 0
------------------------------------------------------------
Comprobamos la integral a mano: \(\int_0^{80}(80 - x)\,dx = \big[80x - \tfrac{x^2}{2}\big]_0^{80} = 6400 - 3200 = 3200\).
op <- par(mfrow = c(1, 2), mar = c(4, 4, 2.5, 1))
# Izquierda: monopolio con precio único
plot(0, type = "n", xlim = c(0, 100), ylim = c(0, 100), xlab = "q", ylab = "P",
main = "Precio único")
polygon(c(0, qm, 0), c(a, pm, pm), col = "#cfe0f3", border = NA) # EC
polygon(c(0, qm, qm, 0), c(pm, pm, c, c), col = "#c8e6c9", border = NA) # beneficio
polygon(c(qm, a - c, qm), c(pm, c, c), col = "#f2c4cc", border = NA) # PIE
abline(a = a, b = -1, col = "#002D62", lwd = 2); abline(h = c, lwd = 2, col = "gray40")
text(c(12, 20, 52), c(68, 40, 30), c("EC = 800", "Benef. = 1600", "PIE"), cex = 0.8)
# Derecha: discriminación perfecta
plot(0, type = "n", xlim = c(0, 100), ylim = c(0, 100), xlab = "q", ylab = "P",
main = "Primer grado")
polygon(c(0, Q1, 0), c(a, c, c), col = "#c8e6c9", border = NA)
abline(a = a, b = -1, col = "#002D62", lwd = 2); abline(h = c, lwd = 2, col = "gray40")
text(25, 45, "Beneficio = 3200", cex = 0.8)Si todos los consumidores son idénticos, la empresa puede replicar la discriminación perfecta con una tarifa en dos partes: un cargo fijo \(A\) más un precio \(p\) por unidad,
\[T(q) = A + p\,q .\]
Razonamiento en dos pasos:
p_dp <- c # precio por unidad = CMg
A <- integrate(function(x) P(x) - p_dp, 0, a - p_dp)$value # cargo fijo = EC con p = c
recuadro("Tarifa en dos partes (consumidores idénticos)",
"Precio por unidad (p)" = p_dp, "Cargo fijo (A)" = A,
"Beneficio = A + (p - c) q" = A + (p_dp - c) * (a - p_dp))------------------------------------------------------------
Tarifa en dos partes (consumidores idénticos)
------------------------------------------------------------
Precio por unidad (p) : 20
Cargo fijo (A) : 3200
Beneficio = A + (p - c) q : 3200
------------------------------------------------------------
Conexión con la semana 2. En el monopolio natural usamos la tarifa en dos partes para cubrir el costo fijo. Aquí la empresa la usa para maximizar su beneficio. Es el mismo instrumento con otro objetivo; por eso el regulador suele fijar también el cargo fijo.
Con consumidores distintos, un único cargo fijo deja de funcionar: si \(A\) es alto, los de baja demanda no compran. Esto nos lleva a la discriminación de segundo grado.
La empresa no sabe quién es quién, pero ofrece un menú: las primeras \(q_1\) unidades a \(p_1\) y las siguientes, hasta \(q_2\), a un precio menor \(p_2\) (un descuento por volumen). Cada consumidor elige cuánto comprar. Con \(p_1 = P(q_1)\) y \(p_2 = P(q_2)\), el beneficio es
\[\pi(q_1, q_2) = \underbrace{(a - q_1)\,q_1}_{\text{bloque 1}} + \underbrace{(a - q_2)(q_2 - q_1)}_{\text{bloque 2}} - c\,q_2 .\]
Condiciones de primer orden. Derivamos respecto de cada cantidad:
\[\frac{\partial \pi}{\partial q_1} = a - 2q_1 - (a - q_2) = q_2 - 2q_1 = 0 \quad\Longrightarrow\quad q_2 = 2q_1,\]
\[\frac{\partial \pi}{\partial q_2} = -(q_2 - q_1) + (a - q_2) - c = a - c + q_1 - 2q_2 = 0 .\]
Reemplazando \(q_2 = 2q_1\) en la segunda: \(a - c + q_1 - 4q_1 = 0\), es decir
\[q_1 = \frac{a-c}{3} = 26.67, \qquad q_2 = \frac{2(a-c)}{3} = 53.33 .\]
Las dos condiciones forman un sistema lineal \(M\,\mathbf{q} = \mathbf{b}\):
\[\begin{pmatrix} -2 & 1 \\ 1 & -2 \end{pmatrix} \begin{pmatrix} q_1 \\ q_2 \end{pmatrix} = \begin{pmatrix} 0 \\ -(a - c) \end{pmatrix}.\]
La función solve(M, b) de R lo resuelve
directamente:
M <- matrix(c(-2, 1,
1, -2), nrow = 2, byrow = TRUE)
b <- c(0, -(a - c))
q_bloques <- solve(M, b)
ver("q1" = q_bloques[1], "q2" = q_bloques[2]) q1 : 26.67
q2 : 53.33
optim() minimiza una función. Para
maximizar el beneficio, le damos el beneficio con signo
negativo. Partimos de un punto cualquiera, por ejemplo \((20, 50)\):
menos_beneficio <- function(x) {
q1 <- x[1]; q2 <- x[2]
-((a - q1) * q1 + (a - q2) * (q2 - q1) - c * q2)
}
opt <- optim(c(20, 50), menos_beneficio, method = "BFGS")
ver("q1 (optim)" = opt$par[1], "q2 (optim)" = opt$par[2],
"Beneficio máximo" = -opt$value) q1 (optim) : 26.67
q2 (optim) : 53.33
Beneficio máximo : 2133.33
Los dos métodos coinciden: la solución analítica es correcta.
El consumidor paga \(p_1\) por cada unidad del primer bloque y \(p_2\) por cada unidad del segundo. Su excedente es lo que valora todas las unidades menos lo que paga:
\[EC = \int_0^{q_2} P(x)\,dx - \big[p_1 q_1 + p_2 (q_2 - q_1)\big].\]
q1 <- q_bloques[1]; q2 <- q_bloques[2]
p1 <- P(q1); p2 <- P(q2)
pago <- p1 * q1 + p2 * (q2 - q1) # lo que paga el consumidor
valor <- integrate(P, 0, q2)$value # lo que valora las q2 unidades
EC_2 <- valor - pago
pi_2 <- pago - c * q2
PIE_2 <- W_max - pi_2 - EC_2
recuadro("Discriminación de segundo grado (dos bloques)",
"Precio del bloque 1 (p1)" = p1, "Precio del bloque 2 (p2)" = p2,
"Cantidad total (q2)" = q2, "Beneficio" = pi_2,
"Excedente del consumidor" = EC_2, "Pérdida irrecuperable" = PIE_2,
"Total (debe ser 3200)" = pi_2 + EC_2 + PIE_2)------------------------------------------------------------
Discriminación de segundo grado (dos bloques)
------------------------------------------------------------
Precio del bloque 1 (p1) : 73.33
Precio del bloque 2 (p2) : 46.67
Cantidad total (q2) : 53.33
Beneficio : 2133.33
Excedente del consumidor : 711.11
Pérdida irrecuperable : 355.56
Total (debe ser 3200) : 3200
------------------------------------------------------------
op <- par(mar = c(4, 4, 2.5, 1))
plot(0, type = "n", xlim = c(0, 100), ylim = c(0, 100), xlab = "q", ylab = "P",
main = "Precios por bloques: la empresa cobra p1 y luego p2")
polygon(c(0, q1, q1, 0), c(p1, p1, c, c), col = "#c8e6c9", border = "gray30")
polygon(c(q1, q2, q2, q1), c(p2, p2, c, c), col = "#c8e6c9", border = "gray30")
polygon(c(0, q1, 0), c(a, p1, p1), col = "#cfe0f3", border = NA)
polygon(c(q1, q2, q1), c(p1, p2, p2), col = "#cfe0f3", border = NA)
polygon(c(q2, a - c, q2), c(p2, c, c), col = "#f2c4cc", border = NA)
abline(a = a, b = -1, col = "#002D62", lwd = 2); abline(h = c, lwd = 2, col = "gray40")
text(c(13, 40, 63), c(48, 33, 25), c("Beneficio\nbloque 1", "Beneficio\nbloque 2", "PIE"),
cex = 0.75)
legend("topright", fill = c("#cfe0f3", "#c8e6c9", "#f2c4cc"),
legend = c("Excedente del consumidor", "Beneficio", "Pérdida irrecuperable"),
bty = "n", cex = 0.8)Con \(n\) bloques, el mismo razonamiento da \(q_k = \dfrac{k\,(a-c)}{n+1}\) para \(k = 1, \dots, n\) (cantidades igualmente espaciadas). Sustituyendo en las áreas se obtiene
\[\pi_n = \frac{n}{n+1}\cdot\frac{(a-c)^2}{2}, \qquad PIE_n = \frac{(a-c)^2}{2\,(n+1)^2} .\]
En vez de demostrarlo con álgebra, lo comprobamos
numéricamente: escribimos el beneficio para \(n\) bloques cualesquiera y lo maximizamos
con optim().
# Beneficio con n bloques: sum_k (a - q_k)(q_k - q_{k-1}) - c q_n, con q_0 = 0
beneficio_bloques <- function(q) {
q <- sort(q)
sum((a - q) * diff(c(0, q))) - c * max(q)
}
tabla_bloques <- data.frame()
for (n in 1:6) {
inicio <- seq(10, 70, length.out = n) # punto de partida
r <- optim(inicio, function(q) -beneficio_bloques(q), method = "BFGS")
qn <- max(r$par)
EC <- integrate(P, 0, qn)$value - sum(P(sort(r$par)) * diff(c(0, sort(r$par))))
tabla_bloques <- rbind(tabla_bloques,
data.frame(bloques = n, beneficio = -r$value,
formula = n / (n + 1) * (a - c)^2 / 2,
EC = EC, PIE = W_max + r$value - EC))
}
mostrar(tabla_bloques) bloques beneficio formula EC PIE
1 1600.00 1600.00 800.00 800.00
2 2133.33 2133.33 711.11 355.56
3 2400.00 2400.00 600.00 200.00
4 2560.00 2560.00 512.00 128.00
5 2666.67 2666.67 444.44 88.89
6 2742.86 2742.86 391.84 65.31
Interpretación. La columna beneficio
(calculada con optim()) coincide con la
formula. A medida que aumenta el número de bloques, el
beneficio se acerca a 3200 y la pérdida irrecuperable desaparece:
el segundo grado converge al primer grado. Frente al
precio único (beneficio 1600, PIE 800), los bloques aumentan la
producción y reducen la ineficiencia, aunque el excedente del
consumidor también se reduce.
La empresa vende en dos mercados que puede separar por una característica observable (edad, región, condición de estudiante) y fija un precio en cada uno:
\[\text{Mercado 1: } P_1 = 100 - q_1, \qquad \text{Mercado 2: } P_2 = 60 - q_2, \qquad CMg = 20 .\]
Como el costo marginal es constante, los dos mercados son independientes y en cada uno la empresa iguala su ingreso marginal al costo marginal:
\[IMg_i = a_i - 2q_i = c \quad\Longrightarrow\quad q_i = \frac{a_i - c}{2},\qquad p_i = \frac{a_i + c}{2}.\]
El ingreso marginal se puede escribir en función de la elasticidad. Como \(IT = p(q)\,q\):
\[IMg = p + q\,\frac{dp}{dq} = p\left(1 + \frac{q}{p}\frac{dp}{dq}\right) = p\left(1 - \frac{1}{|\varepsilon|}\right).\]
Igualando \(IMg_i = CMg\) en cada mercado y despejando:
\[p_i\left(1 - \frac{1}{|\varepsilon_i|}\right) = CMg \quad\Longrightarrow\quad \boxed{\;\frac{p_i - CMg}{p_i} = \frac{1}{|\varepsilon_i|}\;}\]
El lado izquierdo es el índice de Lerner. Conclusión: el precio es más alto donde la demanda es más inelástica. Con demanda lineal \(q = a_i - p\), la elasticidad es \(|\varepsilon_i| = p_i / q_i\).
Escribimos una función que resuelve un mercado y la aplicamos a los dos:
mercado <- function(ai, c) {
q <- (ai - c) / 2 # IMg = CMg
p <- ai - q # precio en la demanda
data.frame(q = q, p = p,
beneficio = (p - c) * q,
EC = 0.5 * (ai - p) * q, # área del triángulo
elasticidad = p / q, # |e| = p / q con demanda lineal
Lerner = (p - c) / p,
inversa_elast = q / p) # 1 / |e|: debe ser igual al Lerner
}
discr <- rbind(cbind(mercado = "M1", mercado(100, c)),
cbind(mercado = "M2", mercado(60, c)))
mostrar(discr, dec = 3) mercado q p beneficio EC elasticidad Lerner inversa_elast
M1 40 60 1600 800 1.5 0.667 0.667
M2 20 40 400 200 2.0 0.500 0.500
En los dos mercados, la columna Lerner es igual a
inversa_elast: la regla se cumple. El mercado 1 es
menos elástico (\(|\varepsilon_1| = 1.5\)) y por eso paga más
(60 frente a 40).
op <- par(mfrow = c(1, 2), mar = c(4, 4, 2.5, 1))
for (i in 1:2) {
ai <- c(100, 60)[i]; qi <- discr$q[i]; pi_ <- discr$p[i]
plot(0, type = "n", xlim = c(0, 100), ylim = c(0, 100), xlab = "q", ylab = "P",
main = paste0("Mercado ", i, ": P = ", ai, " - q"))
polygon(c(0, qi, 0), c(ai, pi_, pi_), col = "#cfe0f3", border = NA)
polygon(c(0, qi, qi, 0), c(pi_, pi_, c, c), col = "#c8e6c9", border = NA)
abline(a = ai, b = -1, col = "#002D62", lwd = 2) # demanda
abline(a = ai, b = -2, col = "#80162A", lwd = 2, lty = 2) # ingreso marginal
abline(h = c, lwd = 2, col = "gray40")
points(qi, pi_, pch = 19)
text(qi / 2, (pi_ + c) / 2, paste("Benef. =", discr$beneficio[i]), cex = 0.75)
}La línea punteada guinda es el ingreso marginal: corta al costo marginal en \(q_1 = 40\) y \(q_2 = 20\).
Si la empresa no puede discriminar, cobra un solo precio \(p\) en ambos mercados. Para \(p \le 60\) compran los dos mercados y la demanda agregada es
\[Q(p) = (100 - p) + (60 - p) = 160 - 2p \quad\Longrightarrow\quad \max_p\ (p - 20)(160 - 2p): \quad 200 - 4p = 0 \;\Rightarrow\; p_u = 50 .\]
Hay que tener cuidado: la demanda agregada tiene un quiebre en \(p = 60\) (por encima, el mercado 2 no compra). Por eso, en lugar de confiar solo en la derivada, buscamos el mejor precio único en una grilla de precios. Así el método funciona con cualquier par de mercados:
precio_uniforme <- function(a1, a2, c) {
p <- seq(c, max(a1, a2), by = 0.01) # precios candidatos
q1 <- pmax(a1 - p, 0); q2 <- pmax(a2 - p, 0) # nadie compra cantidades negativas
benef <- (p - c) * (q1 + q2)
k <- which.max(benef)
data.frame(p = p[k], q1 = q1[k], q2 = q2[k], beneficio = benef[k],
EC = 0.5 * q1[k]^2 + 0.5 * q2[k]^2)
}
unico <- precio_uniforme(100, 60, c)
mostrar(unico) p q1 q2 beneficio EC
50 50 10 1800 1300
Ahora comparamos los dos regímenes:
comparacion <- data.frame(
regimen = c("Precio único", "Discriminación 3er grado"),
precio_M1 = c(unico$p, discr$p[1]),
precio_M2 = c(unico$p, discr$p[2]),
Q = c(unico$q1 + unico$q2, sum(discr$q)),
beneficio = c(unico$beneficio, sum(discr$beneficio)),
EC = c(unico$EC, sum(discr$EC)))
comparacion$W <- comparacion$beneficio + comparacion$EC
mostrar(comparacion) regimen precio_M1 precio_M2 Q beneficio EC W
Precio único 50 50 60 1800 1300 3100
Discriminación 3er grado 60 40 60 2000 1000 3000
Interpretación.
Resultado de Schmalensee (1981). Con demandas lineales, si la discriminación de tercer grado no aumenta la producción total, el bienestar cae. Solo puede mejorar cuando permite abrir mercados que con un precio único no se atenderían.
Cambiemos el mercado 2 por uno de menor disposición a pagar: \(P_2 = 40 - q_2\). Basta cambiar un número en el código:
unico_b <- precio_uniforme(100, 40, c)
discr_b <- rbind(mercado(100, c), mercado(40, c))
caso_b <- data.frame(
regimen = c("Precio único", "Discriminación 3er grado"),
precio_M1 = c(unico_b$p, discr_b$p[1]),
precio_M2 = c(unico_b$p, discr_b$p[2]),
q_M2 = c(unico_b$q2, discr_b$q[2]),
beneficio = c(unico_b$beneficio, sum(discr_b$beneficio)),
EC = c(unico_b$EC, sum(discr_b$EC)))
caso_b$W <- caso_b$beneficio + caso_b$EC
mostrar(caso_b) regimen precio_M1 precio_M2 q_M2 beneficio EC W
Precio único 60 60 0 1600 800 2400
Discriminación 3er grado 60 30 10 1700 850 2550
Con precio único, a la empresa le conviene cobrar 60 y abandonar el mercado 2 (nadie ahí paga 60). Con discriminación, atiende al mercado 2 a un precio de 30: la empresa gana 100 más, los consumidores del mercado 2 obtienen 50 de excedente y los del mercado 1 quedan igual. Todos ganan o quedan igual: es una mejora de Pareto. Esta es la justificación de las tarifas sociales y de estudiante.
Un monopolista con \(CMg = 10\) vende en dos mercados: \(P_1 = 80 - q_1\) y \(P_2 = 50 - q_2\).
precio_uniforme().Pista: basta con cambiar los argumentos de
mercado() y precio_uniforme().
Colusión es un acuerdo, explícito o tácito, entre empresas competidoras para fijar precios, repartirse mercados o restringir la producción, con el fin de obtener beneficios cercanos a los de un monopolio.
Para saber si un cártel es sostenible necesitamos dos puntos de referencia de la competencia: el modelo de Cournot (las empresas eligen cantidades) y el de Bertrand (eligen precios).
Dos empresas idénticas eligen sus cantidades \(q_1\) y \(q_2\) al mismo tiempo. El precio depende de la producción total: \(P = 100 - (q_1 + q_2)\) y \(CMg = 20\).
Problema de la empresa 1 (toma \(q_2\) como dada):
\[\max_{q_1}\ \pi_1 = \big(100 - q_1 - q_2 - 20\big)\,q_1 \qquad\Longrightarrow\qquad \frac{\partial \pi_1}{\partial q_1} = 80 - 2q_1 - q_2 = 0 .\]
Despejando obtenemos la función de reacción (la mejor respuesta a cada \(q_2\)):
\[q_1 = R_1(q_2) = \frac{80 - q_2}{2}, \qquad\text{y por simetría}\qquad q_2 = R_2(q_1) = \frac{80 - q_1}{2}.\]
Equilibrio de Nash: ninguna empresa quiere cambiar su cantidad dada la del rival, es decir, cada una está sobre su función de reacción. Resolvemos el sistema:
\[\begin{cases} 2q_1 + q_2 = 80 \\ q_1 + 2q_2 = 80 \end{cases} \quad\Longrightarrow\quad q_1 = q_2 = \frac{80}{3} = 26.67 .\]
solve()M_c <- matrix(c(2, 1,
1, 2), nrow = 2, byrow = TRUE)
q_cournot <- solve(M_c, c(a - c, a - c))
Q_c <- sum(q_cournot)
P_c <- a - Q_c
pi_N <- (P_c - c) * q_cournot[1] # beneficio de cada empresa ("N" de Nash)
recuadro("Equilibrio de Cournot (duopolio)",
"q1" = q_cournot[1], "q2" = q_cournot[2], "Producción total" = Q_c,
"Precio" = P_c, "Beneficio de cada empresa" = pi_N)------------------------------------------------------------
Equilibrio de Cournot (duopolio)
------------------------------------------------------------
q1 : 26.67
q2 : 26.67
Producción total : 53.33
Precio : 46.67
Beneficio de cada empresa : 711.11
------------------------------------------------------------
Imaginemos que la empresa 1 empieza produciendo como monopolio (\(q_1 = 40\)) y que, por turnos, cada empresa responde de manera óptima a lo último que hizo la otra:
R <- function(q_rival) (a - c - q_rival) / 2 # función de reacción
q1_t <- 40; q2_t <- 0
pasos <- data.frame()
for (t in 1:8) {
q2_t <- R(q1_t) # la empresa 2 responde
q1_t <- R(q2_t) # la empresa 1 responde
pasos <- rbind(pasos, data.frame(ronda = t, q1 = q1_t, q2 = q2_t))
}
mostrar(pasos, dec = 3) ronda q1 q2
1 30.000 20.000
2 27.500 25.000
3 26.875 26.250
4 26.719 26.562
5 26.680 26.641
6 26.670 26.660
7 26.667 26.665
8 26.667 26.666
En pocas rondas las cantidades llegan a \(26.667\): el equilibrio de Nash es estable.
op <- par(mar = c(4, 4, 2.5, 1))
q <- seq(0, 80, by = 0.5)
plot(q, R(q), type = "l", lwd = 2, col = "#002D62", xlim = c(0, 80), ylim = c(0, 80),
xlab = "q2", ylab = "q1", main = "Funciones de reacción") # R1: q1 en función de q2
lines(R(q), q, lwd = 2, col = "#80162A") # R2: q2 en función de q1
# puntos visitados en el ajuste por mejores respuestas
points(pasos$q2, pasos$q1, pch = 4, col = "gray40")
points(q_cournot[2], q_cournot[1], pch = 19, cex = 1.3)
text(q_cournot[2] + 4, q_cournot[1] + 4, "Nash", cex = 0.9)
legend("topright", lwd = 2, col = c("#002D62", "#80162A"),
legend = c("R1: q1 = (80 - q2)/2", "R2: q2 = (80 - q1)/2"), bty = "n", cex = 0.85)Con \(n\) empresas simétricas, la misma condición de primer orden (\(a - c - Q - q_i = 0\), con \(Q = n\,q_i\) en el equilibrio) da
\[q_i = \frac{a-c}{n+1}, \qquad P = c + \frac{a-c}{n+1}.\]
Además, en el equilibrio de Cournot se cumple una relación muy usada en política de competencia:
\[L = \frac{P - CMg}{P} = \frac{HHI}{|\varepsilon|}, \qquad HHI = \sum_i s_i^2 .\]
Demostración. La condición de primer orden de la empresa \(i\) es \(P + q_i\,\dfrac{dP}{dQ} = c\). Restando \(c\) y dividiendo entre \(P\):
\[\frac{P - c}{P} = -\frac{q_i}{P}\,\frac{dP}{dQ} = \underbrace{\frac{q_i}{Q}}_{s_i}\cdot\underbrace{\frac{Q}{P}\left(-\frac{dP}{dQ}\right)}_{1/|\varepsilon|} = \frac{s_i}{|\varepsilon|}.\]
Multiplicamos ambos lados por \(s_i\) y sumamos sobre todas las empresas. Como \(\sum_i s_i = 1\):
\[\frac{P - c}{P}\sum_i s_i = \frac{P - c}{P} = \frac{\sum_i s_i^2}{|\varepsilon|} = \frac{HHI}{|\varepsilon|}. \qquad\blacksquare\]
n <- c(1, 2, 3, 5, 10, 20)
qi <- (a - c) / (n + 1)
Pn <- c + (a - c) / (n + 1)
Qn <- n * qi
tabla_n <- data.frame(n = n, q_i = qi, P = Pn,
Lerner = (Pn - c) / Pn,
HHI = 1 / n, # n empresas iguales: s_i = 1/n
elasticidad = Pn / Qn) # |e| = P / Q
tabla_n$HHI_entre_e <- tabla_n$HHI / tabla_n$elasticidad
mostrar(tabla_n, dec = 3) n q_i P Lerner HHI elasticidad HHI_entre_e
1 40.000 60.000 0.667 1.000 1.500 0.667
2 26.667 46.667 0.571 0.500 0.875 0.571
3 20.000 40.000 0.500 0.333 0.667 0.500
5 13.333 33.333 0.400 0.200 0.500 0.400
10 7.273 27.273 0.267 0.100 0.375 0.267
20 3.810 23.810 0.160 0.050 0.312 0.160
Las columnas Lerner y HHI_entre_e son
idénticas: la fórmula se verifica. Con más empresas el precio se acerca
al costo marginal. Esta relación justifica usar el HHI
como medida de poder de mercado, tema de la próxima semana.
Ahora las dos empresas eligen precios, el producto es homogéneo y los consumidores compran a la más barata (si cobran lo mismo, se reparten el mercado). El único equilibrio de Nash es
\[p_1 = p_2 = CMg = 20 .\]
Demostración (por casos).
Con solo dos empresas se obtiene el resultado competitivo y el beneficio es cero.
Simulemos el proceso con precios en soles enteros. La función
mejor_precio() busca, entre todos los precios posibles, el
que da más beneficio a una empresa dado el precio del rival:
beneficio_b <- function(p_propio, p_rival) {
Q <- max(a - p_propio, 0) # demanda del mercado
cuota <- ifelse(p_propio < p_rival, 1, ifelse(p_propio == p_rival, 0.5, 0))
(p_propio - c) * Q * cuota
}
mejor_precio <- function(p_rival) {
candidatos <- c:a # precios de 20 a 100
b <- sapply(candidatos, beneficio_b, p_rival = p_rival)
candidatos[which.max(b)]
}
p1_t <- 60; p2_t <- 60 # empiezan coludidos en 60
guerra <- data.frame(ronda = 0, p1 = p1_t, p2 = p2_t)
for (t in 1:45) {
p1_t <- mejor_precio(p2_t) # la empresa 1 responde
p2_t <- mejor_precio(p1_t) # la empresa 2 responde
guerra <- rbind(guerra, data.frame(ronda = t, p1 = p1_t, p2 = p2_t))
}
mostrar(guerra[c(1:4, 18:22), ]) ronda p1 p2
0 60 60
1 59 58
2 57 56
3 55 54
17 27 26
18 25 24
19 23 22
20 21 21
21 21 21
La tabla muestra las primeras y las últimas rondas. Cada empresa cobra un sol menos que el rival hasta llegar a 21, un sol por encima del costo marginal: con precios enteros, bajar a 20 daría beneficio cero, y es mejor repartirse el mercado a 21. Si los precios pudieran variar en céntimos, el proceso terminaría en 20.01; en el límite, en \(p = c\).
Lección. En mercados que compiten en precios con productos homogéneos, la tentación de coludir es enorme: sin acuerdo, el beneficio es prácticamente cero.
Si las dos empresas actúan como un monopolio, producen en total \(Q = 40\) (\(q_i = 20\) cada una) y cobran \(P = 60\). Pero si la empresa 1 cree que la 2 cumplirá, su mejor respuesta no es 20 sino \(R_1(20) = (80 - 20)/2 = 30\). Calculamos los tres beneficios que necesitamos:
q_cartel <- (a - c) / 4 # mitad de la cantidad de monopolio
pi_C <- (a - 2 * q_cartel - c) * q_cartel # cumplir
q_desvio <- R(q_cartel) # mejor respuesta si el rival cumple
pi_D <- (a - q_desvio - q_cartel - c) * q_desvio
recuadro("Beneficios del cártel",
"Cantidad del cártel por empresa" = q_cartel, "Cumplir (pi_C)" = pi_C,
"Cantidad de desvío" = q_desvio, "Desviarse (pi_D)" = pi_D,
"Castigo de Cournot (pi_N)" = pi_N)------------------------------------------------------------
Beneficios del cártel
------------------------------------------------------------
Cantidad del cártel por empresa : 20
Cumplir (pi_C) : 800
Cantidad de desvío : 30
Desviarse (pi_D) : 900
Castigo de Cournot (pi_N) : 711.11
------------------------------------------------------------
Para ver el dilema en un juego de una sola vez, cada empresa elige entre cumplir (\(q = 20\)) o competir produciendo su cantidad de Cournot (\(q = 26.67\)). Calculamos los pagos de cada combinación:
estrategias <- c(Cumplir = q_cartel, Competir = q_cournot[1])
pago <- function(q_propio, q_rival) (a - q_propio - q_rival - c) * q_propio
matriz <- outer(estrategias, estrategias, Vectorize(pago))
dimnames(matriz) <- list("Empresa 1" = names(estrategias), "Empresa 2" = names(estrategias))
round(matriz, 2) # pagos de la empresa 1 (los de la 2 son simétricos) Empresa 2
Empresa 1 Cumplir Competir
Cumplir 800.00 666.67
Competir 888.89 711.11
Leemos la matriz por columnas (lo que hace la empresa 2):
Competir es una estrategia dominante, pero cuando ambas compiten obtienen 711.11, menos que los 800 del cártel. Es un dilema del prisionero: en un juego de una sola vez el cártel no es un equilibrio.
En la realidad las empresas compiten período tras período. Supongamos la estrategia del gatillo (Friedman, 1971): “cumplo mientras el rival cumpla; si alguna vez se desvía, compito (Nash) para siempre”. Los pagos futuros se descuentan con un factor \(\delta \in (0, 1)\):
\[\text{Cumplir siempre: } \pi^C + \delta\pi^C + \delta^2\pi^C + \cdots = \frac{\pi^C}{1-\delta}\]
\[\text{Desviarse hoy: } \pi^D + \delta\pi^N + \delta^2\pi^N + \cdots = \pi^D + \frac{\delta\,\pi^N}{1-\delta}\]
El cártel es sostenible si cumplir conviene más:
\[\frac{\pi^C}{1-\delta} \ge \pi^D + \frac{\delta\,\pi^N}{1-\delta} \;\overset{\times(1-\delta)}{\Longleftrightarrow}\; \pi^C \ge (1-\delta)\,\pi^D + \delta\,\pi^N \;\Longleftrightarrow\; \delta\,(\pi^D - \pi^N) \ge \pi^D - \pi^C\]
\[\Longleftrightarrow\quad \boxed{\;\delta \;\ge\; \delta^* = \frac{\pi^D - \pi^C}{\pi^D - \pi^N}\;}\]
Lectura económica: el numerador es la ganancia de hacer trampa hoy; el denominador, la pérdida por período que causa el castigo. Si las empresas valoran mucho el futuro (\(\delta\) alto), el cártel se sostiene.
delta_cournot <- (pi_D - pi_C) / (pi_D - pi_N)
delta_bertrand <- 1 - 1 / 2 # ver la siguiente sección
recuadro("Factor de descuento crítico (duopolio)",
"delta* con castigo de Cournot" = delta_cournot,
"Como fracción: 9/17" = 9 / 17,
"delta* con castigo de Bertrand" = delta_bertrand, dec = 4)------------------------------------------------------------
Factor de descuento crítico (duopolio)
------------------------------------------------------------
delta* con castigo de Cournot : 0.5294
Como fracción: 9/17 : 0.5294
delta* con castigo de Bertrand : 0.5000
------------------------------------------------------------
En lugar de usar la fórmula de la serie geométrica, sumamos 200 períodos para dos valores de \(\delta\), uno por debajo y otro por encima de \(\delta^* = 0.529\):
valor_presente <- function(pagos, delta) sum(pagos * delta^(seq_along(pagos) - 1))
T_ <- 200
cumplir <- rep(pi_C, T_)
desviar <- c(pi_D, rep(pi_N, T_ - 1))
simul <- data.frame(delta = c(0.4, 0.7))
simul$VP_cumplir <- sapply(simul$delta, valor_presente, pagos = cumplir)
simul$VP_desviar <- sapply(simul$delta, valor_presente, pagos = desviar)
simul$conviene <- ifelse(simul$VP_cumplir >= simul$VP_desviar, "cumplir", "desviarse")
mostrar(simul) delta VP_cumplir VP_desviar conviene
0.4 1333.33 1374.07 desviarse
0.7 2666.67 2559.26 cumplir
Con \(\delta = 0.4\) (empresas impacientes) conviene desviarse: el cártel se rompe. Con \(\delta = 0.7\) conviene cumplir: el cártel se sostiene. El umbral está en \(\delta^* = 0.529\).
op <- par(mfrow = c(1, 2), mar = c(4, 4, 2.5, 1))
for (d in c(0.4, 0.7)) {
t <- 1:15
acum_c <- cumsum(cumplir[t] * d^(t - 1))
acum_d <- cumsum(desviar[t] * d^(t - 1))
plot(t, acum_c, type = "b", pch = 19, col = "#002D62", ylim = c(0, max(acum_c, acum_d) * 1.05),
xlab = "Período", ylab = "Valor presente acumulado", main = paste("delta =", d))
lines(t, acum_d, type = "b", pch = 17, col = "#80162A")
legend("bottomright", legend = c("Cumplir", "Desviarse"), col = c("#002D62", "#80162A"),
pch = c(19, 17), lwd = 1, bty = "n", cex = 0.85)
}Desviarse da más en el primer período, pero luego el castigo se acumula. Que la curva de “cumplir” termine por encima depende de cuánto pesa el futuro, es decir, de \(\delta\).
Con castigo de Bertrand y \(n\) empresas: cumplir da \(\pi^C = \pi^M / n\); desviarse (bajar el precio un céntimo) da casi todo el beneficio de monopolio, \(\pi^D \approx \pi^M\); y el castigo da \(\pi^N = 0\):
\[\delta^* = \frac{\pi^M - \pi^M/n}{\pi^M - 0} = 1 - \frac{1}{n}.\]
El factor de descuento se relaciona con la tasa de interés por período: \(\delta = \dfrac{1}{1 + r}\). Si las empresas revisan precios \(k\) veces al año y la tasa anual es \(r\), el descuento entre revisiones es \(\delta = (1 + r)^{-1/k}\): interactuar con más frecuencia acerca \(\delta\) a 1.
r <- 0.10 # tasa de interés anual del 10 %
d_anual <- (1 + r)^(-1) # revisan precios una vez al año (k = 1)
d_bienal <- (1 + r)^(-2) # una vez cada dos años (k = 1/2)
d_mensual <- (1 + r)^(-1 / 12) # todos los meses (k = 12)
ver("delta, revisión cada dos años" = d_bienal, "delta, revisión anual" = d_anual,
"delta, revisión mensual" = d_mensual, dec = 4) delta, revisión cada dos años : 0.8264
delta, revisión anual : 0.9091
delta, revisión mensual : 0.9921
n <- c(2, 3, 4, 5, 6, 8, 10, 12, 15)
tabla_delta <- data.frame(empresas = n, delta_Bertrand = 1 - 1 / n)
tabla_delta$cada_2_anios <- ifelse(d_bienal >= tabla_delta$delta_Bertrand, "sí", "no")
tabla_delta$anual <- ifelse(d_anual >= tabla_delta$delta_Bertrand, "sí", "no")
tabla_delta$mensual <- ifelse(d_mensual >= tabla_delta$delta_Bertrand, "sí", "no")
mostrar(tabla_delta, dec = 3) empresas delta_Bertrand cada_2_anios anual mensual
2 0.500 sí sí sí
3 0.667 sí sí sí
4 0.750 sí sí sí
5 0.800 sí sí sí
6 0.833 no sí sí
8 0.875 no sí sí
10 0.900 no sí sí
12 0.917 no no sí
15 0.933 no no sí
Las tres últimas columnas indican si el cártel es sostenible (“sí”) en cada caso. Si los precios se revisan cada dos años (\(\delta = 0.826\)), el cártel solo se sostiene con hasta 5 empresas. Con revisión anual (\(\delta = 0.909\)), hasta 10 empresas. Con revisión mensual \(\delta\) es casi 1 y se sostiene en todos los casos de la tabla. Por eso la frecuencia de interacción es un factor clave para las agencias de competencia.
op <- par(mar = c(4, 4, 2.5, 1))
n <- 2:15
plot(n, 1 - 1 / n, type = "b", pch = 19, col = "#80162A", lwd = 2, ylim = c(0.4, 1),
xlab = "Número de empresas (n)", ylab = "delta*",
main = "Con más empresas es más difícil sostener el cártel")
abline(h = c(d_anual, d_bienal), lty = 2, col = "#002D62")
text(5, d_anual + 0.04, "delta, revisión anual", col = "#002D62", cex = 0.8)
text(11, d_bienal - 0.04, "delta, revisión cada dos años", col = "#002D62", cex = 0.8)| Factor | Efecto en la colusión | Por qué (en términos de \(\delta^*\)) |
|---|---|---|
| Pocas empresas | facilita | \(\delta^* = 1 - 1/n\) es menor |
| Barreras a la entrada | facilita | el cártel no atrae entrantes |
| Interacción frecuente | facilita | \(\delta\) cercano a 1 |
| Precios transparentes | facilita | los desvíos se detectan rápido |
| Producto homogéneo | facilita | es fácil acordar un solo precio |
| Demanda creciente | facilita | el castigo futuro pesa más |
| Compradores grandes | dificulta | aumentan la ganancia de desviarse (\(\pi^D\)) |
| Programa de clemencia | dificulta | desviarse y delatar evita la multa |
Estos factores son los indicios que usan las agencias de competencia, como el Indecopi, para priorizar sus investigaciones. En el Perú las multas pueden llegar al 12 % de las ventas, y el programa de clemencia exonera o reduce la multa al primer integrante que delata el cártel.
Para investigar en grupo. Elijan un caso de concertación sancionado por el Indecopi y respondan: ¿cuántas empresas participaron?, ¿qué factores de la tabla estaban presentes?, ¿cuál fue la multa y cómo se compara con el beneficio estimado del cártel? Verifiquen fechas, montos y el estado del caso en la página web del Indecopi.
Los ejercicios propuestos en las diapositivas se resuelven aquí con el mismo código de clase. Intenta resolverlos primero en papel y usa estos bloques para comprobar tus respuestas.
Un monopolista con \(CMg = 10\) enfrenta \(P = 70 - q\). Calcule el beneficio con precio único, con discriminación perfecta y con una tarifa en dos partes. Compare el excedente del consumidor.
a1 <- 70; c1 <- 10
q_u <- (a1 - c1) / 2; p_u <- a1 - q_u # precio único
A1 <- integrate(function(x) (a1 - x) - c1, 0, a1 - c1)$value # cargo fijo = EC con p = c
e1 <- data.frame(
esquema = c("Precio único", "Primer grado", "Dos partes (p = 10)"),
cantidad = c(q_u, a1 - c1, a1 - c1),
beneficio = c((p_u - c1) * q_u, A1, A1),
EC = c(0.5 * (a1 - p_u) * q_u, 0, 0))
mostrar(e1) esquema cantidad beneficio EC
Precio único 30 900 450
Primer grado 60 1800 0
Dos partes (p = 10) 60 1800 0
Solución. Con precio único, \(q = 30\), \(P = 40\), \(\pi = 900\) y \(EC = 450\). La discriminación perfecta y la tarifa en dos partes (\(p = 10\), \(A = 1800\)) duplican el beneficio y dejan \(EC = 0\), pero eliminan la pérdida irrecuperable.
Una empresa de transporte con \(CMg = 5\) atiende a estudiantes (\(P_E = 25 - q_E\)) y al público (\(P_G = 45 - q_G\)). Halle los precios, verifique la regla de la elasticidad inversa y compare el bienestar.
e2_discr <- rbind(cbind(mercado = "Estudiantes", mercado(25, 5)),
cbind(mercado = "Público", mercado(45, 5)))
mostrar(e2_discr, dec = 3) mercado q p beneficio EC elasticidad Lerner inversa_elast
Estudiantes 10 15 100 50 1.50 0.667 0.667
Público 20 25 400 200 1.25 0.800 0.800
p q1 q2 beneficio EC
20 5 25 450 325
ver("Bienestar con discriminación" = sum(e2_discr$beneficio + e2_discr$EC),
"Bienestar con precio único" = e2_unico$beneficio + e2_unico$EC) Bienestar con discriminación : 750
Bienestar con precio único : 775
Solución. Estudiantes: \(q = 10\), \(p = 15\); público: \(q = 20\), \(p = 25\). El Lerner coincide con \(1/|\varepsilon|\) en ambos (0.667 y 0.8). Con precio único, \(p = 20\) y \(Q = 30\): la producción no cambia, por lo que el bienestar cae de 775 a 750 con la discriminación (resultado de Schmalensee).
Dos cementeras compiten a la Cournot con \(P = 200 - Q\) y \(CMg = 50\). Calcule el equilibrio de Nash, el cártel, el desvío y \(\delta^*\) con castigo de Cournot.
a3 <- 200; c3 <- 50
R3 <- function(q_rival) (a3 - c3 - q_rival) / 2
qN <- (a3 - c3) / 3; piN3 <- (a3 - 2 * qN - c3) * qN
qC <- (a3 - c3) / 4; piC3 <- (a3 - 2 * qC - c3) * qC
qD <- R3(qC); piD3 <- (a3 - qD - qC - c3) * qD
e3 <- data.frame(situacion = c("Nash-Cournot", "Cártel", "Desvío"),
q_i = c(qN, qC, qD), precio = c(a3 - 2 * qN, a3 - 2 * qC, a3 - qD - qC),
beneficio = c(piN3, piC3, piD3))
mostrar(e3) situacion q_i precio beneficio
Nash-Cournot 50.00 100.00 2500.00
Cártel 37.50 125.00 2812.50
Desvío 56.25 106.25 3164.06
delta* (castigo de Cournot) : 0.5294
Solución. \(\delta^* = 0.529\), igual que en el ejemplo de clase. No es casualidad: con demanda lineal y costos constantes, \(\delta^* = 9/17\) en el duopolio de Cournot para cualquier \(a\) y \(c\), porque los tres beneficios son proporcionales a \((a - c)^2\).
Con competencia de Bertrand y 4 empresas, ¿cuál es \(\delta^*\)? Si la tasa anual es 10 % y las empresas revisan precios una vez al año, ¿es sostenible el cártel?
delta_estrella <- 1 - 1 / 4
delta_anual <- 1 / 1.10
ver("delta* (4 empresas)" = delta_estrella, "delta con r = 10 %" = delta_anual, dec = 4) delta* (4 empresas) : 0.7500
delta con r = 10 % : 0.9091
cat(ifelse(delta_anual >= delta_estrella, " El cártel SÍ es sostenible.",
" El cártel NO es sostenible."), "\n") El cártel SÍ es sostenible.
Un programa de clemencia aumenta la ganancia de desviarse: quien delata evita la multa y, además, sabe que el cártel se acabará de todas formas. En la fórmula, sube \(\pi^D\) (y baja el valor esperado de cumplir, porque crece la probabilidad de detección). Ambos efectos elevan \(\delta^*\) y hacen que menos cárteles sean sostenibles.
| Concepto | Fórmula |
|---|---|
| Excedente del consumidor | \(EC = \int_0^{q} \big[P(x) - p\big]\,dx\) |
| Primer grado | \(P(Q) = CMg\); \(\pi\) = excedente total; \(EC = 0\) |
| Tarifa en dos partes | \(T(q) = A + c\,q\), con \(A = EC(c)\) |
| Segundo grado (\(n\) bloques) | \(q_k = \frac{k(a-c)}{n+1}\); \(\pi_n = \frac{n}{n+1}\cdot\frac{(a-c)^2}{2}\) |
| Tercer grado | \(IMg_i = CMg\); \(\frac{p_i - CMg}{p_i} = \frac{1}{\lvert\varepsilon_i\rvert}\) |
| Función de reacción (Cournot) | \(q_i = \frac{a - c - q_j}{2}\) |
| Cournot con \(n\) empresas | \(q_i = \frac{a-c}{n+1}\), \(P = c + \frac{a-c}{n+1}\), \(L = \frac{HHI}{\lvert\varepsilon\rvert}\) |
| Bertrand (homogéneo) | \(p_1 = p_2 = CMg\) |
| Factor de descuento crítico | \(\delta^* = \frac{\pi^D - \pi^C}{\pi^D - \pi^N}\); Bertrand: \(\delta^* = 1 - \frac1n\) |
Próxima semana: fusiones y concentración, cálculo del HHI, prueba SSNIP y mercado relevante.