This report analyzes a one-period economic model comprising households, firms, and a government.
The model focuses on determining the equilibrium outcomes for private consumption (\(c\)), government goods (\(g\)), hours worked (\(h\)), and total output (\(y\)) under various tax rates (\(\tau\)).
Additionally, we compute the optimal tax rate (\(\tau^*\)) that maximizes utility and evaluate the sensitivity of equilibrium outcomes to key parameters. This analysis was performed using R, and the results are presented through computational outputs and graphical visualizations.
The firm uses a linear production function: \(y = n\), where \(y\) is output, \(n\) is labour hired from the household and wage (\(w\)) is normalized to 1
The government taxes household labour income (\(\tau\)) and uses the revenue to provide government goods: \[ g = \tau \cdot w \cdot h, \] where \(w=1\) is the normalized wage rate, (\(\tau\)) is the tax rate
For varying \(g\):
The household maximizes utility subject to the budget constraint \(c = (1-\tau) w h\). The first-order
condition gives:
\[
(1-\tau) h + (1-\theta) \kappa (\tau h)^\rho - \theta (1-\tau) = 0
\]
For fixed \(g\):
When \(g\) is held constant, the labour
supply simplifies to:
\[
h = \theta - \frac{(1-\theta) \kappa g^\rho}{1-\tau}
\]
we use these parameters in our numerical analysis setup:
Labour supply, private consumption, government goods, and total output are computed for various tax rates (\(\tau\)) by solving for labour supply (\(h\)) numerically. Here;
Results are plotted to show how labour supply varies with the tax rate.
Government goods (\(g\)) are held constant at their equilibrium value from a specific tax rate (\(\tau\)=0.25) and Labour supply is recomputed, ensuring valid values. At fixed tax rate of 0.25, government goods \(g\) will be fixed at the value 0.0929504
labour supply (\(h\)) reduces more steeply at higher values of the tax rate (\(\tau\))
As \(\tau\) increases, \(h\) decreases steadily, eventually reaching near zero at high tax rates
Fixed \(g\) removes the feedback between taxes and government goods, so households face diminishing returns from work as taxes rise.
Fixed \(g\) intensifies the labour supply decline because taxes do not translate into increased public goods that could offset the loss in disposable income.
As taxes increase, the household faces greater disincentives to work, leading to lower \(h\).
Fixing \(g\) highlights the labour disincentive effects of taxation without the offsetting benefits of increasing government goods.
Fixing \(g\) =0.0929504 removes the stabilizing feedback between \(\tau\) and \(g\) causing steeper declines in \(h\) and \(y\) as taxes rise.
Private consumption \(c\) is directly proportional to \(h\) so, it will also be lower due to the reduced labour supply.
\(c\) decreases linearly with \(\tau\), as higher taxes reduce disposable income. With having \(g\) fixed, no additional utility is gained from higher taxes and this reduces private consumption
\(y\) decreases directly with h because output is proportional to labour supply, so any decline in \(h\) will cause a decline in \(y\)
With varying \(g\), labor supply remains higher at moderate tax rates compared to fixed \(g\). At higher tax rates, both scenarios converge as disincentives to work dominate. When \(g\) varies, higher taxes fund more government goods, partially compensating for lost disposable income. Fixed \(g\) removes this feedback, making higher taxes less desirable.
This visualization overlays labor supply curves for scenarios where \(g\) varies with \(\tau\) and where \(g\) is fixed
The sensitivity of labor supply to changes in \(\rho\) and \(\kappa\) is examined here. Sensitivity analysis results are overlaid on single plots to demonstrate parameter impacts. This represents the household’s preference for government goods.
The Optimal Tax Rate is (\(\tau*\): 0.2195)
This report examines the equilibrium behavior of a one-period economic model with a representative household, firm, and government. The analysis evaluates labor supply, private consumption, government goods, and total output under varying and fixed public goods scenarios. From our results, we see how there is a delicate balance required in designs of tax policies. By understanding households respond to changes in tax and government goods we can create policies that optimize economic outcomes while ensuring the distribution of resources equitably.
# Parameters
phi <- 0.5 # theta
rho <- 0.6 # rho
kappa <- 0.8 # kappa
tau_initial <- 0.25 # Initial tax rate
w <- 1 # Wage rate
theta <- phi # Assuming theta is the same as phi
# Define tau values
tau_values <- seq(0, 1, by = 0.05)
# Labour supply function with fixed g
labour_supply_fixed_g <- function(tau, g_constant) {
h <- theta - ((1 - theta) * kappa * g_constant^rho) / (1 - tau)
return(ifelse(h >= 0 & h <= 1, h, NA)) # Ensure h is in [0, 1] valid range
}
# Labour supply function for varying g
labor_supply <- function(h, tau) {
(1 - tau) * h + (1 - theta) * kappa * (tau * h)^rho - theta * (1 - tau)
}
### Part 7: Equilibrium Labor Supply with Varying g
cat("\nPart 7: Equilibrium Labor Supply with Varying g\n")
compute_equilibrium_varying_g <- function(tau, w) {
h <- uniroot(function(h) labor_supply(h, tau), lower = 0, upper = 1)$root
c <- (1 - tau) * w * h # Private consumption
g <- tau * w * h # Government goods
y <- w * h # Total output
return(list(c = c, g = g, y = y, h = h))
}
# Compute equilibrium for varying g
equilibrium_results_varying_g <- data.frame(
tau = tau_values,
c = numeric(length(tau_values)),
g = numeric(length(tau_values)),
y = numeric(length(tau_values)),
h = numeric(length(tau_values))
)
for (i in seq_along(tau_values)) {
eq <- compute_equilibrium_varying_g(tau_values[i], w)
equilibrium_results_varying_g$c[i] <- eq$c
equilibrium_results_varying_g$g[i] <- eq$g
equilibrium_results_varying_g$y[i] <- eq$y
equilibrium_results_varying_g$h[i] <- eq$h
}
# Print results for Part 7 (Varying g)
cat("Results for Part 7 (Varying g):\n")
print(equilibrium_results_varying_g)
# Plot equilibrium labor supply with varying g
plot(
equilibrium_results_varying_g$tau, equilibrium_results_varying_g$h,
type = "l", col = "blue", lwd = 2,
xlab = "Tax Rate (τ)", ylab = "Labour supply",
main = "Equilibrium Labour Supply as a Function of Tax Rate",
panel.first = grid()
)
### Part 8: Labor Supply with Fixed g
cat("\nPart 8: Labor Supply with Fixed g\n")
# Compute g_constant for fixed g
g_constant <- tau_initial * w * equilibrium_results_varying_g$h[which.min(abs(tau_values - tau_initial))]
# Labor supply function for fixed g
labor_supply_fixed_g <- function(tau) {
h <- theta - ((1 - theta) * kappa * g_constant^rho) / (1 - tau)
return(ifelse(h >= 0 & h <= 1, h, NA)) # Ensure h is in [0, 1]
}
# Compute labor supply for varying τ with fixed g
h_fixed_g <- sapply(tau_values, labor_supply_fixed_g)
results_fixed_g <- data.frame(tau = tau_values, h = h_fixed_g)
# Print results for Part 8 (Fixed g)
cat("\nResults for Part 8 (Fixed g):\n")
print(equilibrium_results_fixed_g)
# Plot labor supply with fixed g
plot(
results_fixed_g$tau, results_fixed_g$h,
type = "l", col = "red", lwd = 2,
xlab = "Tax Rate (τ)", ylab = "Labour Supply (h)",
main = "Labour Supply with Fixed g",
panel.first = grid()
)
# Combine results
combined_results <- data.frame(
tau = tau_values,
h_varying_g = equilibrium_results_varying_g$h,
h_fixed_g = equilibrium_results_fixed_g$h,
c_varying_g = equilibrium_results_varying_g$c,
c_fixed_g = equilibrium_results_fixed_g$c,
g_varying_g = equilibrium_results_varying_g$g,
g_fixed_g = equilibrium_results_fixed_g$g,
y_varying_g = equilibrium_results_varying_g$y,
y_fixed_g = equilibrium_results_fixed_g$y
)
### Part 9: Comparison of Labour Supply (Varying vs Fixed g)
cat("\nPart 9: Comparison of Labor Supply (Varying vs Fixed g)\n")
# labour supply function for fixed g to handle high tax rates
labor_supply_fixed_g <- function(tau) {
h <- theta - ((1 - theta) * kappa * g_constant^rho) / (1 - tau)
return(ifelse(is.nan(h) | h < 0 | tau == 1, 0, h)) # Set to 0 if invalid or at τ = 1
}
# Compute labour supply for varying τ with fixed g
h_fixed_g <- sapply(tau_values, labor_supply_fixed_g)
results_fixed_g <- data.frame(tau = tau_values, h = h_fixed_g)
# Overlay the two labour supply curves for comparison
plot(
equilibrium_results_varying_g$tau, equilibrium_results_varying_g$h,
type = "l", col = "blue", lwd = 2,
xlab = "Tax Rate (τ)", ylab = "Labour Supply (h)",
main = "Comparison of Labour Supply (Varying vs Fixed g)",
panel.first = grid()
)
lines(results_fixed_g$tau, results_fixed_g$h, col = "red", lwd = 2)
legend(
"topright", legend = c("Varying g", "Fixed g"),
col = c("blue", "red"), lty = 1, lwd = 2
)
# Interpretation
cat("\nInterpretation:\n")
cat("The graph shows the labor supply (h) for both scenarios:\n")
cat("- 'Varying g' (in blue) represents government spending changing with tax revenue.\n")
cat("- 'Fixed g' (in red) represents government spending held constant.\n")
cat("The comparison highlights how labor supply responds to changes in tax rates under each scenario.\n")
### Part 10: Sensitivity Analysis for ρ and κ
cat("\nPart 10: Sensitivity Analysis for ρ and κ\n")
# Define sequences for rho and kappa
rho_values <- seq(0.4, 0.8, by = 0.2) # Sequence for rho
kappa_values <- seq(0.6, 1.0, by = 0.2) # Sequence for kappa
# Function to compute labor supply for given parameters
compute_labor_supply <- function(tau_values, rho, kappa, w) {
labor_supply <- function(h, tau) {
(1 - tau) * h + (1 - phi) * kappa * (tau * h)^rho - phi * (1 - tau)
}
h_values <- numeric(length(tau_values))
for (i in seq_along(tau_values)) {
h_values[i] <- uniroot(function(h) labor_supply(h, tau_values[i]), lower = 0, upper = 1)$root
}
return(h_values)
}
cat("\nPart 10: Sensitivity Analysis for ρ and κ (All κ on the Same Graph)\n")
# Colors for different κ values
kappa_colors <- c("blue", "red", "green")
# Initialize the plot with the first κ value
plot(
tau_values, compute_labor_supply(tau_values, rho_values[2], kappa_values[1], w),
type = "l", col = kappa_colors[1], lwd = 2,
xlab = "Tax Rate (τ)", ylab = "Labour Supply (h)",
main = "Labour Supply for Different κ (Fixed ρ = 0.6)",
ylim = c(0, 0.6) # Set y-axis limits to accommodate all curves
)
# Add lines for other κ values
for (i in 2:length(kappa_values)) {
h_values <- compute_labor_supply(tau_values, rho_values[2], kappa_values[i], w)
lines(tau_values, h_values, col = kappa_colors[i], lwd = 2)
}
# Add a legend to distinguish κ values
legend(
"topright", legend = paste("κ =", kappa_values),
col = kappa_colors, lty = 1, lwd = 2, title = expression("Values of" ~ kappa)
)
### Part 11: Optimal Tax Rate
cat("\nPart 11: Find Optimal Tax Rate\n")
# Define utility function
utility_function <- function(tau) {
h <- uniroot(function(h) labor_supply(h, tau), lower = 0, upper = 1)$root
c <- (1 - tau) * w * h
g <- tau * w * h
return(phi * log(c + kappa * g^rho) + (1 - phi) * log(1 - h))
}
# Find optimal tau
optimal_tau <- optimize(utility_function, interval = c(0, 1), maximum = TRUE)$maximum
optimal_utility <- utility_function(optimal_tau)
cat(sprintf("\nOptimal Tax Rate (τ*): %.4f\n", optimal_tau))
# Compute utility for a range of tau values
utility_values <- sapply(tau_values, utility_function)
# Plot utility function
plot(
tau_values, utility_values,
type = "l", col = "blue", lwd = 2,
xlab = "Tax Rate (τ)", ylab = "Utility (U)",
main = "Utility as a Function of Tax Rate (τ)",
panel.first = grid()
)
# Mark the optimal tax rate on the graph
points(optimal_tau, optimal_utility, col = "red", pch = 16, cex = 2) # Red dot for optimal point
arrows(optimal_tau - 0.1, optimal_utility - 0.1, optimal_tau, optimal_utility,
col = "red", length = 0.1, angle = 20, lwd = 2) # Arrow pointing to the marker
text(optimal_tau - 0.12, optimal_utility - 0.12,
labels = bquote(tau^"*" == .(round(optimal_tau, 2))),
col = "red", cex = 1.2, font = 2) # Annotate the optimal tax rate