Net Replacement Rates in unemployment - NRR

Data - OECD

Info

source dataset Title Updated
oecd NRR Net Replacement Rates in unemployment - NRR 2026-08-02

Data on wages

Code
load_data("employment.RData")
employment |>
  source_dataset_file_updates()
source dataset Title Updated
bls jt NA NA
bls la NA NA
bls ln NA NA
eurostat nama_10_a10_e Employment by A*10 industry breakdowns 2026-08-13
eurostat nama_10_a64_e National accounts employment data by industry (up to NACE A*64) 2026-08-13
eurostat namq_10_a10_e Employment A*10 industry breakdowns 2026-08-13
eurostat une_rt_m Unemployment by sex and age – monthly data 2026-08-13
oecd ALFS_EMP Employment by activities and status (ALFS) 2026-08-02
oecd EPL_T Strictness of employment protection – temporary contracts 2026-08-02
oecd LFS_SEXAGE_I_R LFS by sex and age - indicators 2026-08-02
oecd STLABOUR Short-Term Labour Market Statistics 2026-08-02

Last

obsTime Nobs
2023 199680

Data Structure

Code
NRR_var |>
  pluck("VAR_DESC") %>%
  {if (is_html_output()) print_table(.) else .}
id description
LOCATION Country
FAMILY Family type
DURATION Unemployment duration (months)
EARNINGS Previous in-work earnings
HBTOPUPS Include housing benefits
TIME Year
OBS_VALUE Observation Value
TIME_FORMAT Time Format
OBS_STATUS Observation Status

FAMILY

Code
NRR_var |>
  pluck("FAMILY") %>%
  {if (is_html_output()) print_table(.) else .}
id label
SINGLE Single person without children
SINGLE2C Single person with 2 children
1EARNERC Couple without children - partner is out of work
1EARNERC2C Couple with 2 children - partner is out of work
2EARNERC_AW Couple without children - partner's earnings: Average Wage (AW)
2EARNERC_67AW Couple without children - partner's earnings: 67% of the AW
2EARNERC2C_AW Couple with 2 children - partner's earnings: AW
2EARNERC2C_67AW Couple with 2 children - partner's earnings: 67% of the AW

DURATION

Code
NRR_var |>
  pluck("DURATION") %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

EARNINGS

Code
NRR_var |>
  pluck("EARNINGS") %>%
  {if (is_html_output()) print_table(.) else .}
id label
MIN Minimum Wage
67AW 67% of the Average Wage
AW Average Wage

Ex 1: Average Wage

Germany

Code
NRR |>
  filter(LOCATION == "DEU", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.45, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

France

Code
NRR |>
  filter(LOCATION == "FRA", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

Italy

Code
NRR |>
  filter(LOCATION == "ITA", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

Spain

Code
NRR |>
  filter(LOCATION == "ESP", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

United Kingdom

Code
NRR |>
  filter(LOCATION == "GBR", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

United States

Code
NRR |>
  filter(LOCATION == "USA", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

Switzerland

Code
NRR |>
  filter(LOCATION == "CHE", 
         FAMILY == "SINGLE", 
         EARNINGS == "AW", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

Ex 2: Minimum Wage

Germany

Code
NRR |>
  filter(LOCATION == "DEU", 
         FAMILY == "SINGLE", 
         EARNINGS == "MIN", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.45, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

France

Code
NRR |>
  filter(LOCATION == "FRA", 
         FAMILY == "SINGLE", 
         EARNINGS == "MIN", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

Italy

Code
NRR |>
  filter(LOCATION == "ITA", 
         FAMILY == "SINGLE", 
         EARNINGS == "MIN", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

Spain

Code
NRR |>
  filter(LOCATION == "ESP", 
         FAMILY == "SINGLE", 
         EARNINGS == "MIN", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

United Kingdom

Code
NRR |>
  filter(LOCATION == "GBR", 
         FAMILY == "SINGLE", 
         EARNINGS == "MIN", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

United States

Code
NRR |>
  filter(LOCATION == "USA", 
         FAMILY == "SINGLE", 
         EARNINGS == "MIN", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))

Switzerland

Code
NRR |>
  filter(LOCATION == "CHE", 
         FAMILY == "SINGLE", 
         EARNINGS == "MIN", 
         HBTOPUPS == 1,
         obsTime %in% c("2001", "2005", "2018")) |>
  mutate(DURATION = DURATION |> as.numeric(),
         obsValue = obsValue / 100) |>
  arrange(obsTime, DURATION) |>
  select(obsTime, DURATION, obsValue) |>
  ggplot() + theme_minimal() +
  geom_line(aes(x = DURATION, y = obsValue, color = obsTime, linetype = obsTime)) + 
  scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.85, 0.9),
        legend.title = element_blank()) +
  xlab("") + ylab("Net Replacement Rate") +
  scale_x_continuous(breaks = seq(0, 60, 6),
                     labels = dollar_format(prefix = "", suffix = " mo")) +
  scale_y_continuous(breaks = seq(0, 1, 0.1),
                     labels = percent_format(accuracy = 1),
                     limits = c(0, 1))