Effective tax rate on increasing working hours - METR

Data - OECD

Last observation: 2022 (N = 16704)

First observation: 2001 (N = 11904)

Last data update: 02 août 2026, 09:01

Last compile: 02 sept. 2026, 23:37

Structure

EARNINGS - Nobs

Code
METR |>
  left_join(METR_var$EARNINGS |>
              setNames(c("EARNINGS", "Earnings")), by = "EARNINGS") |>
  group_by(EARNINGS, Earnings) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
EARNINGS Earnings Nobs
67AW 67% of the Average Wage 124160
AW Average Wage 124160
MIN Minimum Wage 98560

HBTOPUPS - Nobs

Code
METR |>
  left_join(METR_var$HBTOPUPS |>
              setNames(c("HBTOPUPS", "Hbtopubs")), by = "HBTOPUPS") |>
  group_by(HBTOPUPS, Hbtopubs) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
HBTOPUPS Hbtopubs Nobs
0 No 173440
1 Yes 173440

Effective Tax Rates on Increasing Labor Hours SINGLE-AW

Germany

Code
METR |>
  # HBTOPUPS: Includes Housing Benefits?
  filter(LOCATION == "DEU", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 1) |>
  year_to_date() |>
  left_join(METR_var$TRANSITION |>
              setNames(c("TRANSITION", "Transition")), by = "TRANSITION") |>
  mutate(obsValue = obsValue/100) |>
  ggplot() + ylab("Marginal Effective Tax Rates on Labor (%)") + xlab("") + 
  geom_line(aes(x = date, y = obsValue, color = Transition)) + theme_minimal() +
  scale_color_manual(values = viridis(5)[1:4]) +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                     labels = percent_format(accuracy = 1))

France

Code
METR |>
  # HBTOPUPS: Includes Housing Benefits?
  filter(LOCATION == "FRA", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 1) |>
  year_to_date() |>
  left_join(METR_var$TRANSITION |>
              setNames(c("TRANSITION", "Transition")), by = "TRANSITION") |>
  mutate(obsValue = obsValue/100) |>
  ggplot() + ylab("Marginal Effective Tax Rates on Labor (%)") + xlab("") + 
  geom_line(aes(x = date, y = obsValue, color = Transition)) + theme_minimal() +
  scale_color_manual(values = viridis(5)[1:4]) +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                     labels = percent_format(accuracy = 1))

Effective Tax Rates on Increasing Labor Hours - No Housing

Germany

Code
METR |>
  # HBTOPUPS: Includes Housing Benefits?
  filter(LOCATION == "DEU", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 0) |>
  year_to_date() |>
  left_join(METR_var$TRANSITION |>
              setNames(c("TRANSITION", "Transition")), by = "TRANSITION") |>
  mutate(obsValue = obsValue/100) |>
  ggplot() + ylab("Marginal Effective Tax Rates on Labor (%)") + xlab("") + 
  geom_line(aes(x = date, y = obsValue, color = Transition)) + theme_minimal() +
  scale_color_manual(values = viridis(5)[1:4]) +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                     labels = percent_format(accuracy = 1))

France

Code
METR |>
  # HBTOPUPS: Includes Housing Benefits?
  filter(LOCATION == "FRA", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 0) |>
  year_to_date() |>
  left_join(METR_var$TRANSITION |>
              setNames(c("TRANSITION", "Transition")), by = "TRANSITION") |>
  mutate(obsValue = obsValue/100) |>
  ggplot() + ylab("Marginal Effective Tax Rates on Labor (%)") + xlab("") + 
  geom_line(aes(x = date, y = obsValue, color = Transition)) + theme_minimal() +
  scale_color_manual(values = viridis(5)[1:4]) +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 100, 2),
                     labels = percent_format(accuracy = 1))