Enviroment

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\).

Theoretical Analysis

A competitive equilibrium for this economy is an allocation \((c^*, g^*, h^*)\), a price \(w^*\), and a government tax \(\tau^*\), such that:

Question 2

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.

Question 2 Solution
Question 2 Solution

Question 3

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.

Question 3 Solution
Question 3 Solution

Question 4

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) \]

Question 4 Solution
Question 4 Solution

Question 5

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.

Numerical Analysis

Question 6

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

Question 7

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")

Question 8

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)

Question 9

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)

Question 10

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)

Question 11

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")

Question 12

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 and Equivalent Consumption Functions

# 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
}

Utility for Both Scenarios

# 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

# 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

Plots

#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()

Interpretation of the Density Plot

Comparison of Distributions

  • The plot shows two overlapping density curves: one for the decentralized scenario and another for the social planner.
  • The Social Planner’s curve has a slightly higher mean: \[ c_\text{sp}^\text{equiv} = 0.2871642 \] compared to the decentralized case: \[ c_\text{dec}^\text{equiv} = 0.2788512. \]

Welfare Gap

  • The gap between the peaks of the two curves visually represents the welfare difference: \[ \Delta c^\text{equiv} = 0.008313. \]
  • The small overlap between the curves suggests that the decentralized scenario achieves welfare close to the planner’s solution.

Policy Implications

  • If the curves look almost the same, it means the decentralized economy is doing a good job under the current conditions, so government intervention might not be necessary.
  • However, if we change key factors like \(\rho\) (how much people value public goods), \(\kappa\) (the importance of public goods), or \(\theta\) (preferences for work vs. leisure), the decentralized economy might not perform as well, showing that it could become less efficient.

Hopefully this gets me an A+ in this course, finished @ 2:37 am, Nov 26th, 2024