We are faced with a one-period model with three players: a representative household, a representative firm, and the government.
The household is endowed with one unit of time and supplies labor (which is the sole input in the economy) elastically. This means that the quantity of labor supplied by the household is highly responsive to changes in wages and or taxes. If there is an increase in wage, workers will tend to supply more labor, and if there’s a decrease in wage, workers will tend to supply less labor or none at all.
The representative household’s preferences are as follows:
\[ u(c, g, h) = \theta \log \left( (c + k g)^{\rho} \right) + (1 - \theta) \log(1 - h), \quad k, \rho > 0, \quad \theta \in (0,1) \] where \(c\) denotes private consumption, \(g\) denotes government goods and services, and \(h\) denotes hours worked.
The representative firm hires labor \(h\) from the household at wage \(w\) and produces the economy’s sole output \(y\) according to a linear production technology \(y = n\).
We also have a government in this environment that taxes \(\tau \in (0,1)\), a fraction of the household’s income, to provide valued government goods \(g\).
A competitive equilibrium for this economy is an allocation \((c^*, g^*, h^*)\), a price \(w^*\), and a government tax \(\tau^*\), such that:
Given the prices and tax, the household allocation \((c^*, h^*)\) solves the household’s utility maximization problem:
\[ \max_{c, h} \; \theta \log \left( (c + k g)^{\rho} \right) + (1 - \theta) \log(1 - h) \] subject to the budget constraint:
\[ c = (1 - \tau) w h \]
Given the prices, the firm hires labor \(h\) to solve their maximization problem (maximize profit):
\[ \max_{\pi} \pi = y - w n \] subject to
\[ y = n \]
The government’s budget is balanced:
\[ g = \tau w h \]
And the markets clear:
\[ y = c + g \]
\[ n^* = h^* \]
\[ c^* = y^* \]
Given that the household labor supply function is: \[ h = \frac{\theta (1 - \tau) w - (1 - \theta) k g^{\rho}}{(1 - \tau) w} \] a corner solution is possible if \(h = 0\) or \(h = 1\), that is when the household either chooses not to work or spends all their unit of time (in this case, 1) working. Considering the fact that household supplies labor elastically, a corner solution at \(h = 0\) might occur because small changes in wages (reduction) or taxes (increase) can lead the household to not work at all.
The equation that pins down the equilibrium level of hours as a function of the model’s parameter is: \[ h \left[ w (1 - \tau) + h^{\rho} \left( (1 - \theta) k (\tau w)^{\rho} \right) \right] = \theta (1 - \tau) w \] The equation is non-linear, a corner solution is not possible, the \(h\) that solves the equation is always going to be between zero and one. With an elastic supply of labor, the household is very responsive to changes in wages and taxes and still values consumption. When there is an increase in wages, the household works more, but since households also value consumption they won’t spend all their time working, that is \(h \neq 1\). At the same time, if there is a decrease in wages, the households work less, but not to the point that they don’t work at all because they still need income to afford consumption, that is \(h \neq 0\). So, with \(h \neq 1\) and \(h \neq 0\) there isn’t ever a corner solution.
The social planner’s objective is to maximize the household’s utility by choosing labor supply and consumption. The social planner’s objective is to choose \((c^*, g^*, h^*)\) subject to the resource constraints.
\[ \max_{c, g, h} \; \theta \log(c + \kappa g^{\rho}) + (1 - \theta) \log(1 - h) \] subject to \[ c + g = y, \quad c + g = h, \quad c = y - g, \quad y = N = h, \quad c = h - g. \] After substituting we have that the social planner’s problem becomes; \[ \max_{g, h} \; \theta \log(h - g + \kappa g^{\rho}) + (1 - \theta) \log(1 - h) \] Solving the social planner’s problem we get \(g^*\) and \(h^*\)
\[ g^* = \left( \frac{1}{\kappa \rho} \right)^{\frac{1}{\rho - 1}} \]
\[ h^* = \theta + (1 - \theta) \left( \frac{1}{\kappa \rho} \right)^{\frac{1}{\rho - 1}} \left( 1 - \frac{\kappa}{\kappa \rho} \right) \]
First, we have to realize what Pareto efficiency means to fully understand whether this decentralized economy is ever Pareto efficient. A Pareto-efficient allocation means that it is impossible to make one person better off without making someone else worse off. In other words, once an allocation is Pareto-efficient, no further improvements can be made for any individual without negatively impacting another individual.
The decentralized economy is Pareto-efficient if the optimal choices for consumption \(c\), government goods \(g\), and labor supply \(h\) match the optimal values \((c^*, g^*, h^*)\) determined by the social planner and the tax rate \(\tau\) will also have to be set such that it does not introduce any changes in the labor supply decision and ensures that the optimal provision of public goods \(g\). This means that the government would need to fully internalize the externalities and correct any market failures.
Parameterize the model as follows: let \(\theta = 0.5\), \(\rho = 0.6\), and \(\kappa = 0.8\); let \(\tau = 0.25\). We aim to compute the competitive equilibrium by finding the value of \(h^*\) that solves the utility function:
theta <- 0.5
rho <- 0.6
kappa <- 0.8
tau <- 0.25
w <- 1
utility_function <- function(h) {
h * (w * (1 - tau)) + h^rho * ((1 - theta) * kappa * (tau * w)^rho) - theta * (1 - tau) * w
}
result <- uniroot(utility_function, interval = c(0, 1))
cat("The equilibrium level of hours (h*) is:", result$root, "\n")
## The equilibrium level of hours (h*) is: 0.3718016
h_eq2 <- 0.3718016
equilibrium_govt <- tau * w * h_eq2
equilibrium_consumption <- (1- tau) * w * h_eq2
cat("The equilibrium level of govt spending (g*) is:", equilibrium_govt)
## The equilibrium level of govt spending (g*) is: 0.0929504
cat("The equilibrium level of consumption (c*) is:", equilibrium_consumption)
## The equilibrium level of consumption (c*) is: 0.2788512
Now let \(\tau\) vary, and solve for equilibrium labor supply as a function of \(\tau\).
theta <- 0.5
rho <- 0.6
kappa <- 0.8
w <- 1
find_equilibrium_hours <- function(tau) {
utility_function <- function(h){
h * (w * (1 - tau)) + h^rho * ((1 - theta) * kappa * (tau * w)^rho) - theta * (1 - tau) * w
}
result7 <- tryCatch({
uniroot(utility_function, interval = c(0, 1))$root
}, error = function(e) {
NA
})
return(result7)
}
tau_values <- seq(0.00, 0.99, by = 0.01)
h_values <- sapply(tau_values, find_equilibrium_hours)
result_table <- data.frame(tau = tau_values, h_star = h_values)
plot(tau_values, h_values, type = "o", col = "blue",
xlab = "Tax Rate (tau)", ylab = "Equilibrium Hours (h*)",
main = "Equilibrium Labour Supply as a Function of Tax Rate")
Now let τ vary, but hold g constant at the level from part (1).
eq_govt <- 0.0929504 # Fixed government spending
tau_grid <- seq(0.00, 0.99, length.out = 100) # grid of tau values
# hours worked with fixed g
g_fixed <- eq_govt
hours_fixed_g <- function(tau) {
if (tau >= 1) return(0) # Handle corner solutions where tau approaches 1
# hours worked
h <- theta - (1 - theta) * kappa * g_fixed^rho / (1 - tau)
# h between 0 and 1
return(pmax(0, pmin(1, h)))
}
# hours worked for each tau
hours_tau_fixed_g <- sapply(tau_grid, hours_fixed_g)
df_fixed_g <- data.frame(
tau = tau_grid,
hours = hours_tau_fixed_g
)
# ggplot2
library(ggplot2)
p_fixed_g <- ggplot(df_fixed_g, aes(x = tau, y = hours)) +
geom_line(color = "blue", linewidth = 1) +
labs(title = "Labor Supply vs Tax Rate (Fixed G)",
x = "Tax Rate",
y = "Hours Worked") +
theme_minimal()
print(p_fixed_g)
When \(\tau\) varies and \(g\) is allowed to adjust freely and accordingly, there is a smooth change in equilibrium labor supply \(h^*\) as the tax rate \(\tau\) changes.
When \(\tau\) varies and \(g\) is held constant, that is, ignoring the government’s budget constraint for this part. Keeping \(g\) fixed introduces an additional constraint that impacts how the equilibrium labor supply \(h^*\) adjusts. Since \(h^*\) is influenced by changes in \(\tau\) without the typical adjustment of \(g\), this can lead to a different and potentially less smooth response of consumer behavior and labor supply compared to when the government’s budget constraint is allowed to balance through variations in \(g\).
When \(g\) varies, the equilibrium labor supply adjusts on its own based on the changing tax rate and the government’s budget constraint, leading to a response of labor supply. When \(g\) is fixed, the constraint on \(g\) constricts the level to which the equilibrium labor supply can change in response to a varying \(\tau\). When \(g\) is fixed, adjustments in labor supply are more constrained by the existing level of government spending, reflecting a less flexible response to tax rate changes, as opposed to the scenario where \(g\) is allowed to vary freely.
eq_govt <- 0.0929504
g_fixed <- eq_govt
hours_fixed_g <- function(tau) {
if (tau >= 1) return(0)
# hours worked
h <- theta - (1 - theta) * kappa * g_fixed^rho / (1 - tau)
# h between 0 and 1
return(pmax(0, pmin(1, h)))
}
tau_grid <- seq(0.00, 0.99, length.out = 100)
hours_tau_fixed_g <- sapply(tau_grid, hours_fixed_g)
hours_tau <- sapply(tau_grid, function(tau) {
find_equilibrium_hours(tau)
})
library(ggplot2)
df_compare <- data.frame(
tau = rep(tau_grid, 2),
hours = c(hours_tau, hours_tau_fixed_g),
type = rep(c("Variable G", "Fixed G"), each = length(tau_grid))
)
p2 <- ggplot(df_compare, aes(x = tau, y = hours, color = type)) +
geom_line() +
labs(title = "Labor Supply vs Tax Rate: Fixed vs Variable G",
x = "Tax Rate (τ)",
y = "Hours Worked") +
theme_minimal()
print(p2)
Repeat part (2) for different values of \(\rho\) and/or \(\kappa\). Discuss what you find.
When analyzing the equilibrium labor supply while varying the values of \(\rho\) (which influences the marginal utility of labor hours) and \(\kappa\) (a parameter that scales the impact of tax revenues on utility), we observe significant changes in the equilibrium labor supply \(h^*\). As \(\rho\) increases, the equilibrium labor supply generally decreases for a fixed value of \(\kappa\). This behavior suggests that higher values of \(\rho\) introduce diminishing returns to labor hours, reducing the marginal benefit of working additional hours. Similarly, varying \(\kappa\) demonstrates that higher values lead to a reduction in the equilibrium labor supply. This outcome indicates that increasing \(\kappa\) intensifies the influence of tax revenues on utility, effectively creating a stronger disincentive to work. Together, these results highlight the sensitivity of labor supply to changes in these parameters, showcasing the intricate relationship between taxation policies, parameter effects, and individual labor behavior.
rho_values <- c(0.4, 0.6) # rho
kappa_values <- c(0.6, 0.8) #kappa
theta <- 0.5
rho <- 0.6
kappa <- 0.8
tau_grid <- seq(0.00, 0.99, length.out = 100)
solve_hours <- function(tau, theta, rho, kappa) {
utility_function <- function(h) {
h * (1 - tau) + h^rho * ((1 - theta) * kappa * (tau)^rho) - theta * (1 - tau)
}
tryCatch({
uniroot(utility_function, interval = c(0, 1))$root
}, error = function(e) {
NA
})
}
#grid of rho and kappa combinations
param_grid <- expand.grid(rho = rho_values, kappa = kappa_values)
results_list <- list()
for (i in 1:nrow(param_grid)) {
hours <- sapply(tau_grid, solve_hours,
theta = theta,
rho = param_grid$rho[i],
kappa = param_grid$kappa[i])
results_list[[i]] <- data.frame(
tau = tau_grid,
hours = hours,
rho = param_grid$rho[i],
kappa = param_grid$kappa[i]
)
}
results_df <- do.call(rbind, results_list)
p3 <- ggplot(results_df, aes(x = tau, y = hours, color = factor(rho), linetype = factor(kappa))) +
geom_line() +
labs(title = "Labor Supply for Different rho and kappa Values",
x = "Tax Rate",
y = "Hours Worked",
color = "rho",
linetype = "kappa") +
theme_minimal()
# Display the plot
print(p3)
Numerically solve for the optimal tax rate \(\tau^*\).
theta <- 0.5
rho <- 0.6
kappa <- 0.8
w <- 1
objective_function <- function(tau) {
if (tau <= 0 || tau >= 1) return(-Inf)
find_equilibrium_hours <- function(h) {
h * (w * (1 - tau)) + h^rho * ((1 - theta) * kappa * (tau * w)^rho) - theta * (1 - tau) * w
}
h_star <- tryCatch({
uniroot(find_equilibrium_hours, interval = c(0, 1))$root
}, error = function(e) {
return(NA)
})
if (is.na(h_star)) return(-Inf)
c_star <- h_star * (1 - tau)
gstar <- tau * h_star
utility <- theta * log(c_star + kappa * (gstar^rho)) + (1 - theta) * log(1 - h_star)
return(-utility)
}
result <- optim(par = 0.25, fn = objective_function, method = "Brent", lower = 0, upper = 1)
cat("The optimal tax rate (tau*) is:", result$par, "\n")
## The optimal tax rate (tau*) is: 0.2194855
# Parameters
theta <- 0.5
rho <- 0.6
kappa <- 0.8
w <- 1
find_equilibrium_hours <- function(tau) {
utility_function <- function(h) {
h * (w * (1 - tau)) + h^rho * ((1 - theta) * kappa * (tau * w)^rho) - theta * (1 - tau) * w
}
result <- tryCatch({
uniroot(utility_function, interval = c(0, 1))$root
}, error = function(e) {
return(NA)
})
return(result)
}
calculate_utility <- function(tau) {
h_star <- find_equilibrium_hours(tau)
if (is.na(h_star)) return(NA)
c_star <- h_star * (1 - tau)
g_star <- tau * h_star
utility <- theta * log(c_star + kappa * (g_star^rho)) + (1 - theta) * log(1 - h_star)
return(utility)
}
optimal_tau <- 0.2194855
tau_values <- seq(0.01, 0.5, length.out = 100)
utility_values <- sapply(tau_values, calculate_utility)
# Plot utility against tau
plot(tau_values, utility_values, type = "o", col = "blue", xlab = "Tax Rate (tau)", ylab = "Utility",
main = "Utility as a Function of Tax Rate")
abline(v = optimal_tau, col = "red", lty = 2) # Add a vertical line at the optimal tau
legend("topright", legend = paste("Optimal Tau =", round(optimal_tau, 6)), col = "red", lty = 2, bty = "n")
To extend the analysis, we will define and solve two scenarios: the decentralized economy and the social planner’s solution.
In the decentralized economy, we will use the labor supply, consumption, and government spending values computed earlier in the project. For the social planner, we will compute the optimal allocations of labor \((h^*),\) consumption \((c^*),\) and public goods provision \((g^*)\) based on the social planner’s problem.
To compare welfare across both scenarios, keeping in mind that utility is ordinal, so if comparing welfare across scenarios, we have to put things in terms of something real; which is ordinal, into a cardinal metric. This can be achieved using equivalent consumption, which computes the level of consumption required to yield the same utility in each scenario.
Decentralized Utility: \[ U^{\text{decentralized}} = \theta \log(c^{\text{decentralized}} + \kappa (g^{\text{decentralized}})^\rho) + (1 - \theta) \log(1 - h^{\text{decentralized}}). \]
Social Planner Utility:
The social planner’s utility maximization problem is:
\[ \max_{g, h} \; \theta \log(h - g + \kappa g^\rho) + (1 - \theta) \log(1 - h), \]
Equivalent Consumption
Equivalent consumption measures the level of consumption that delivers the same utility in each scenario: \[ c^{\text{equiv}} = \exp\left(\frac{U - (1 - \theta) \log(1 - h)}{\theta}\right) - \kappa g^\rho. \]
Difference in Welfare
The welfare gap is calculated as: \[ \Delta c^{\text{equiv}} = c^{\text{equiv, planner}} - c^{\text{equiv, decentralized}}. \]
We can compare the decentralized and social planner’s solutions quantitatively and visually to see the welfare implications of each approach.
Parameters: \[ \theta = 0.5, \quad \rho = 0.6, \quad \kappa = 0.8. \]
Decentralized equilibrium (from previous results):
\[ c^{\text{dec}} = 0.3718016 \times (1 - 0.25), \quad g^{\text{dec}} = 0.0929504, \quad h^{\text{dec}} = 0.3718016. \]
Social planner’s solution (hypothetical values for now):
\[ c^{\text{sp}} = 0.4, \quad g^{\text{sp}} = 0.1, \quad h^{\text{sp}} = 0.45. \]
# Utility function for the social planner
compute_planner_utility <- function(g, h, theta, kappa, rho) {
if (h - g <= 0 || h > 1 || h <= 0 || g < 0) {
return(-Inf)
}
theta * log(h - g + kappa * g^rho) + (1 - theta) * log(1 - h)
}
# Utility function for the decentralized economy
compute_decentralized_utility <- function(c, g, h, theta, kappa, rho) {
theta * log(c + kappa * g^rho) + (1 - theta) * log(1 - h)
}
# Equivalent consumption
equivalent_consumption <- function(U, h, theta, kappa, g, rho) {
exp((U - (1 - theta) * log(1 - h)) / theta) - kappa * g^rho
}
# Parameters
theta <- 0.5
rho <- 0.6
kappa <- 0.8
# Decentralized values
c_dec <- 0.3718016 * (1 - 0.25)
g_dec <- 0.0929504
h_dec <- 0.3718016
u_dec <- compute_decentralized_utility(c_dec, g_dec, h_dec, theta, kappa, rho)
# Social planner values
optimize_planner <- optim(
par = c(g = 0.1, h = 0.5), # Initial guess
fn = function(x) -compute_planner_utility(x[1], x[2], theta, kappa, rho), #
method = "L-BFGS-B",
lower = c(0, 0),
upper = c(1, 1)
)
g_sp <- optimize_planner$par[1] # Optimal g
h_sp <- optimize_planner$par[2] # Optimal h
u_sp <- -optimize_planner$value # Optimal utility
# equivalent consumption for both scenarios
c_eq_dec <- equivalent_consumption(u_dec, h_dec, theta, kappa, g_dec, rho)
c_eq_sp <- equivalent_consumption(u_sp, h_sp, theta, kappa, g_sp, rho)
# welfare gap
delta_c <- c_eq_sp - c_eq_dec
cat("Decentralized Equivalent Consumption:", c_eq_dec, "\n")
## Decentralized Equivalent Consumption: 0.2788512
cat("Social Planner Equivalent Consumption:", c_eq_sp, "\n")
## Social Planner Equivalent Consumption: 0.2871642
cat("Welfare Difference (Delta C):", delta_c, "\n")
## Welfare Difference (Delta C): 0.008312979
#data for density plot
set.seed(42)
equiv_data <- data.frame(
Scenario = rep(c("Decentralized", "Social Planner"), each = 100),
EquivalentConsumption = c(
rnorm(100, mean = c_eq_dec, sd = 0.005),
rnorm(100, mean = c_eq_sp, sd = 0.005)
)
)
# Density plot
library(ggplot2)
ggplot(equiv_data, aes(x = EquivalentConsumption, fill = Scenario)) +
geom_density(alpha = 0.5) +
labs(
title = "Density of Equivalent Consumption: Decentralized vs. Social Planner",
x = "Equivalent Consumption",
y = "Density",
fill = "Scenario"
) +
theme_minimal()
Hopefully this gets me an A+ in this course, finished @ 2:37 am, Nov 26th, 2024