A cotinuación se deriva una curva de Laffer para un impuesto al trabajo. Partimos de un mercado de trabajo clásico muy básico.
Del lado de la demanda empleamos una función Cobb-Douglas estándar
\(Y=AK^{\frac{1}{3}}N^{\frac{2}{3}}\)
obteniendo una demanda de trabajo convencional
\(DN=\bigg(\frac{2}{3}\frac{A}{w}\bigg)^3K\)
Del lado de la oferta usamos una función de utilidad simple
\(U=\frac{c^\gamma}{\gamma}-N\)
sujeta a la restricción de presupuesto
\(C=(1-\tau_l)wN\)
a partir de la cual se obtiene la siguiente función de oferta de trabajo
\(ON=[(1-\tau_l)w]^{(\frac{\gamma}{1-\gamma})}\)
Un incremento en el impuesto al trabajo \(\tau_l\) reduce la oferta de trabajo y por ende, la producción de la economía.
Para determinar el salario y empelo de equilibrio igualamos oferta y demanda
\(\bigg(\frac{2}{3}\frac{A}{w}\bigg)^3K=[(1-\tau_l)w]^{\frac{\gamma}{1-\gamma}}\)
Asumiendo que \(\gamma=0,5\) el salario de equilibrio viene dado por
\(w=\bigg[ \bigg(\frac{2}{3}A\bigg)^3\frac{K}{1-\tau_l} \bigg]^{\frac{1}{4}}\)
Al aumentar el impuesto al trabajo \(\tau_l\) cae la oferta de trabajo y sube el salario de equilibrio a la vez que disminuye el nivel de empleo.
La recaudación viene dada por el tipo impositivo \(\tau_l\) multiplicado por el total de rentas salariales \(W\times N\)
\(\tau_l \times W \times N\)
Asignamos valores a \(A=1\) y \(K=400\) en la expresión , y calculamos la recaudación para cada tipo \(\tau\)
Cargamos los paquetes necesarios
PAQUETES <- c("pacman")
inst <- match(PAQUETES, .packages(all=TRUE))
need <- which(is.na(inst))
if (length(need) > 0) install.packages(PAQUETES[need])
pacman::p_load(ggplot2, reshape2, shiny)
Primero definimos una serie de funciones necesarias para el cálculo
Función que define el exceso de demanda en el mercado de trabajo. Posteriormente pasamos esta función a un solver no lineal para encontrar el salario de equilibrio
f1 <- function(w, tl, alfa = 1/3, K = 400, A = 1, gamma.l = 0.5){
# Calcula el exceso de demanda del mercado de trabajo
# necesario para encontrar el salrio de equilibrio
#
# Args:
# w: salario
# tl: impuesto al trabajo
# alfa: participacion del capital en la funcion de produccion (default=1/3)
# K: stock de capital (default=400)
# A: productividad total de los factores TFP (default=1)
# gamma.l: elasticidad de sustitucion del consumo (default=0.5)
#
# Returns:
# ed: El exceso de demanda en el mercado de trabajo definido como
# la diferencia entre demanda y oferta de trabajo
# Consideramos solo funciones de produccion con rendimientos
# constantes a escala
if (alfa > 1 | alfa < 0) {
stop(" 'alfa' debe ser un numero entre cero y uno", call. = FALSE)
}
#Exceso de demanda
ed <- (demanda_trabajo(w, alfa, K, A)-oferta_trabajo(w, tl, gamma.l))
}
Función de demanda
demanda_trabajo <- function(w, alfa = 1/3, K = 400, A = 1){
# Calcula la demanda de trabajo
#
# Args:
# w: salario
# alfa: participacion del capital en la funcion de produccion (default=1/3)
# K: stock de capital (default=400)
# A: productividad total de los factores TFP (default=1)
#
# Returns:
# dl: Demanda de trabajo obtenida a partir de una funcion de
# produccion Cobb-Douglas
# Consideramos solo funciones de produccion con rendimientos
# constantes a escala
if (alfa > 1 | alfa < 0) {
stop(" 'alfa' debe ser un numero entre cero y uno", call. = FALSE)
}
dl <- (((1-alfa)*(A/w))^3)*K
}
Función de oferta
oferta_trabajo <- function(w, tl, gamma.l = 0.5){
# Calcula la oferta de trabajo
#
# Args:
# w: salario
# tl: impuesto al trabajo
# gamma.l: elasticidad de sustitucion del consumo (default=0.5)
#
# Returns:
# ol: Oferta de trabajo obtenidad a partir de una funcion de
# utilidad U=c^gamma/gamma-N sujeta a una restricción de
# presupuesto igual a C=(1-t_l)wN
ol <- ((1-tl)*w)^(gamma.l/(1-gamma.l))
}
Función de producción
produccion <- function(N, alfa = 1/3, K = 400, A = 1){
# Calcula la produccion
#
# Args:
# N: empleo que vacia el mercado de trabajo
# alfa: participacion del capital en la funcion de produccion (default=1/3)
# K: stock de capital (default=400)
# A: productividad total de los factores TFP (default=1)
#
# Returns:
# y: nivel de produccion obtenida a partir de una funcion de
# produccion Cobb-Douglas
# Consideramos solo funciones con rendimientos constantes a escala
if (alfa > 1 | alfa < 0) {
stop(" 'alfa' debe ser un numero entre cero y uno", call. = FALSE)
}
y <- A*K^alfa*N^(1-alfa)
}
Definimos una matriz inicial a ser rellenada
tabla <- matrix(ncol = 5, nrow = length(seq(0,0.99,0.01)))
Hacemos un bucle que genera los datos de recaudación, empleo, salario y producción para cada tipo t
contador <- 1
for(i in seq(0,0.99,0.01)){
tabla[contador,1] <- i
w <- uniroot(f1,c(0.1,20),tl=i)$root
tabla[contador,2] <- w
N <- demanda_trabajo(w)
tabla[contador,3] <- N
R <- i*w*N
tabla[contador,4] <- R
Y <- produccion(N)
tabla[contador,5] <- Y
contador <- contador + 1
}
Convertimos la matriz a data frame y nombramos las columnas
tabla.1 <- data.frame(tabla)
colnames(tabla.1) <- c('Impuesto','Salario','Empleo','Recaudacion','Produccion')
Realizamos un grupo de gráficos. Primero el gráfico de la Curva de Laffer
l1 <- ggplot(data = tabla.1, aes(x=Impuesto,y=Recaudacion)) +
geom_line(col="red") +
ggtitle("Curva de Laffer - Impuesto al Trabajo") +
theme(plot.title = element_text(hjust = 0.5)) #Esto es para centrar el título
l1
Se aprecia la relación no monótona que caracteriza a dicha relación, la recaudación incrementa con el tipo hasta cierto punto a partir del cual desciende.
A nivel general la recaudación \(T\) se define como el tipo \(\tau\) multiplicado por la base impositiva \(B(\tau)\) la cual depende del tipo.
\(T = \tau \times B(\tau)\)
Al subir el tipo disminuye la base, por lo que tenemos dos efectos en direcciones contrarias
Según nuestra definición de recaudación \((\tau_l \times W \times N)\), tenemos tres fuerzas operando, sabemos que cuando sube el tipo disminuye la oferta de trabajo, manteniendo todo lo demás constante sube el salario y disminuye el nivel de empleo. Veamos el comportamiento de cada concepto
l2 <- ggplot(data = tabla.1, aes(x=Impuesto,y=Empleo)) +
geom_line(col="blue") +
ggtitle("Empleo e Impuesto al Trabajo") +
theme(plot.title = element_text(hjust = 0.5)) #Esto es para centrar el título
l2
En el gráfico anterior se observa como el empleo se reduce ante un impuesto al trabajo. Veamos a continuación como se comporta el salario
l3 <- ggplot(data = tabla.1, aes(x=Impuesto,y=Salario)) +
geom_line(col="green") +
ggtitle("Salario e Impuesto al Trabajo") +
theme(plot.title = element_text(hjust = 0.5)) #Esto es para centrar el título
l3
Como era de esperar aumenta el salario, se observa como para valores muy altos del impuesto la tasa a la que aumenta el salario se acelera notablemente.
Dada la caída del empleo manteniendo el capital constante, la producción desciende como se observa en el siguiente gráfico
l4 <- ggplot(data = tabla.1, aes(x=Impuesto,y=Produccion)) +
geom_line() +
ggtitle("Curva de Laffer - Impuesto al Trabajo") +
theme(plot.title = element_text(hjust = 0.5)) #Esto es para centrar el título
l4
Mostramos todos los gráficos juntos, para eso hay que manipular algo el data frame de manera que la libreria ggplot2 lo lea de manera correcta
Colocamos la tabla en formaro flat para poder hacer el facet
tabla.flat <- melt(tabla.1, id.vars = c('Impuesto'))
Creamos un factor para que en el gráfico aparezca el facet en el orden que yo quiero, el cual viene dado por la jerarquía del factor
tabla.flat$facet <- factor(tabla.flat$variable, levels = c('Recaudacion','Empleo','Produccion','Salario'))
Y ya estamos preparados para realizar el gráfico
lf <- ggplot(data = tabla.flat, aes(x=Impuesto, y=value)) +
geom_line() +
facet_wrap(~facet, scales = "free_y") +
ggtitle("Curva de Laffer - Impuesto al Trabajo") +
theme(plot.title = element_text(hjust = 0.5)) #Esto es para centrar el título
lf