Carregando WebR...
# ============================================ # Mercado de Limoes (Akerlof, 1970) # Exercicio Resolvido 19.3 # ============================================ # Valores VH <- 24000 # valor carro bom para comprador CH <- 20000 # valor carro bom para vendedor VL <- 10000 # valor carro ruim para comprador CL <- 6000 # valor carro ruim para vendedor lambda <- 0.40 # fracao de carros bons cat("====== MERCADO DE LIMOES (AKERLOF) ======\n") cat(sprintf("Carros bons: VH = %s CH = %s\n", format(VH, big.mark="."), format(CH, big.mark="."))) cat(sprintf("Carros ruins: VL = %s CL = %s\n", format(VL, big.mark="."), format(CL, big.mark="."))) cat(sprintf("Fracao de bons: lambda = %.0f%%\n\n", lambda*100)) # --- Analise --- V_bar <- lambda * VH + (1 - lambda) * VL cat("--- Disposicao a pagar do comprador desinformado ---\n") cat(sprintf("V_bar = %.2f*%s + %.2f*%s = %s\n\n", lambda, format(VH, big.mark="."), 1-lambda, format(VL, big.mark="."), format(V_bar, big.mark="."))) if (V_bar >= CH) { cat("V_bar >= CH => Ambos os tipos sao transacionados!\n") } else { cat(sprintf("V_bar = %s < CH = %s\n", format(V_bar, big.mark="."), format(CH, big.mark="."))) cat("=> Carros BONS saem do mercado! So sobram limoes.\n") cat(sprintf("=> Comprador oferece no maximo VL = %s\n\n", format(VL, big.mark="."))) } # --- Perda de bem-estar --- excedente_bom <- VH - CH excedente_ruim <- VL - CL excedente_total <- lambda * excedente_bom + (1-lambda) * excedente_ruim excedente_perdido <- lambda * excedente_bom cat("--- Perda de bem-estar ---\n") cat(sprintf("Excedente por carro bom: %s\n", format(excedente_bom, big.mark="."))) cat(sprintf("Excedente por carro ruim: %s\n", format(excedente_ruim, big.mark="."))) cat(sprintf("Excedente medio (info simetrica): %s\n", format(excedente_total, big.mark="."))) cat(sprintf("Excedente perdido (selecao adversa): %s\n\n", format(excedente_perdido, big.mark="."))) # --- Custo da vistoria --- custo_vistoria <- 500 ganho_vistoria <- VH - CH - custo_vistoria cat("--- Vistoria como solucao ---\n") cat(sprintf("Custo da vistoria: R$ %s\n", format(custo_vistoria, big.mark="."))) cat(sprintf("Ganho liquido vendedor bom: %s - %s = %s => %s\n\n", format(excedente_bom, big.mark="."), format(custo_vistoria, big.mark="."), format(ganho_vistoria, big.mark="."), ifelse(ganho_vistoria > 0, "VALE A PENA!", "Nao compensa"))) # --- Variando lambda --- cat("--- Limiar critico de lambda ---\n") # V_bar >= CH <=> lambda*VH + (1-lambda)*VL >= CH # lambda >= (CH - VL) / (VH - VL) lambda_crit <- (CH - VL) / (VH - VL) cat(sprintf("lambda_critico = (CH-VL)/(VH-VL) = %.4f = %.1f%%\n", lambda_crit, lambda_crit*100)) cat(sprintf("Mercado de bons funciona se lambda >= %.1f%%\n\n", lambda_crit*100)) cat("%-10s %-12s %-12s %-15s\n", "lambda(%)", "V_bar", "Funciona?", "Exc. perdido") cat(strrep("-", 52), "\n") lam_vals <- seq(0, 1, by = 0.1) for (l in lam_vals) { Vb <- l * VH + (1 - l) * VL funciona <- Vb >= CH perda <- ifelse(funciona, 0, l * excedente_bom) cat(sprintf("%-10.0f %-12s %-12s %-15s\n", l*100, format(Vb, big.mark="."), ifelse(funciona, "SIM", "NAO"), format(perda, big.mark="."))) } # --- Grafico --- par(mfrow = c(1, 2), mar = c(4.5, 4.5, 3, 1), bg = "#f8f9fa") # Painel 1: V_bar vs lambda lam_seq <- seq(0, 1, length = 200) Vbar_seq <- lam_seq * VH + (1 - lam_seq) * VL plot(lam_seq * 100, Vbar_seq / 1000, type = "l", lwd = 3, col = "#0d6efd", xlab = expression(lambda ~ "(% de carros bons)"), ylab = "Valor (R$ mil)", main = "Selecao adversa: V_bar vs. lambda", ylim = c(0, VH / 1000 * 1.1)) abline(h = CH / 1000, col = "#dc3545", lwd = 2, lty = 2) text(15, CH/1000 + 0.8, expression(C[H] ~ "(custo vendedor bom)"), col = "#dc3545", cex = 0.65, font = 2) abline(v = lambda_crit * 100, col = "#6f42c1", lwd = 2, lty = 3) text(lambda_crit*100 + 3, VL/1000, paste0("lambda* = ", round(lambda_crit*100,1), "%"), col = "#6f42c1", cex = 0.65, font = 2) # Zona de colapso polygon(c(0, lambda_crit*100, lambda_crit*100, 0), c(0, 0, VH/1000*1.1, VH/1000*1.1), col = rgb(0.85, 0.2, 0.2, 0.08), border = NA) text(lambda_crit*100/2, VH/1000*0.85, "COLAPSO\ndos bons", col = "#dc3545", cex = 0.7, font = 2) polygon(c(lambda_crit*100, 100, 100, lambda_crit*100), c(0, 0, VH/1000*1.1, VH/1000*1.1), col = rgb(0.1, 0.6, 0.3, 0.08), border = NA) text((lambda_crit*100+100)/2, VH/1000*0.85, "Mercado\nfunciona", col = "#198754", cex = 0.7, font = 2) points(lambda*100, V_bar/1000, pch = 19, col = "#fd7e14", cex = 2) text(lambda*100 + 5, V_bar/1000, paste0("lambda=", lambda*100, "%"), col = "#fd7e14", cex = 0.65, font = 2) # Painel 2: Excedente perdido vs lambda perda_seq <- ifelse(Vbar_seq < CH, lam_seq * excedente_bom, 0) plot(lam_seq * 100, perda_seq / 1000, type = "l", lwd = 3, col = "#dc3545", xlab = expression(lambda ~ "(% de carros bons)"), ylab = "Excedente perdido (R$ mil)", main = "Custo da selecao adversa") abline(v = lambda_crit * 100, col = "#6f42c1", lwd = 2, lty = 3) points(lambda*100, excedente_perdido/1000, pch = 19, col = "#fd7e14", cex = 2) text(lambda*100 + 5, excedente_perdido/1000 + 0.1, paste0("R$ ", format(excedente_perdido, big.mark=".")), col = "#fd7e14", cex = 0.65, font = 2)
▶ Executar
↻ Resetar
(Aguardando WebR...)