Net international investment position - annual data

Data - Eurostat

Info

Last observation: Annual: 2025 (N = 57)

First observation: Annual: 1995 (N = 11)

Last data update: 11 aoû 2026, 20:48. Last compile: 12 aoû 2026, 03:57

Structure

Creditors vs. Debtors: Germany, Netherlands, Ireland, Portugal, Greece

Code
tipsii10 |>
  filter(geo %in% c("DE", "NL", "IE", "PT", "EL"),
         unit == "PC_GDP") |>
  year_to_date() |>

  left_join(colors, by = c("Geo" = "country")) |>
  mutate(values = values/100) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Net international investment position (% of GDP)") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  geom_hline(yintercept = 0, linetype = "solid")

Latest Year: Cross-Country Snapshot

Code
latest_y_niip <- tipsii10 |>
  filter(unit == "PC_GDP",
         !is.na(values)) |>
  summarise(m = max(time)) |>
  pull(m)

tipsii10 |>
  filter(unit == "PC_GDP",
         time == latest_y_niip,
         !geo %in% c("EA20", "EA21", "EU27_2020")) |>
  select(Geo, values) |>
  rename(`NIIP (% of GDP)` = values) |>
  arrange(-`NIIP (% of GDP)`) |>
  print_table_conditional()
Geo NIIP (% of GDP)
Denmark 103.3
Germany 82.3
Malta 78.9
Sweden 58.8
Belgium 52.1
Netherlands 47.4
Austria 26.2
Luxembourg 25.5
Finland 18.0
Italy 15.4
Slovenia 12.6
Lithuania -1.9
Estonia -3.4
Bulgaria -5.5
Czechia -9.8
Latvia -18.4
Croatia -28.3
Poland -29.5
France -29.6
Hungary -32.1
Spain -44.7
Romania -45.1
Ireland -47.5
Portugal -50.2
Slovakia -52.4
Cyprus -77.2
Greece -136.4

Table

Code
tipsii10 |>
  filter(unit == "PC_GDP",
         time == "2020") %>%
  select_if(~ n_distinct(.) > 1) |>
  
  select(geo, Geo, values) |>
  arrange(-values) |>
  mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) |>
  mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
         Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) |>
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

France, Germany, Italy, Belgium, Netherlands

Code
tipsii10 |>
  filter(geo %in% c("DE", "BE", "FR", "IT", "NL", "ES"),
         unit == "PC_GDP") |>
  year_to_date() |>
  
  left_join(colors, by = c("Geo" = "country")) |>
  mutate(values = values/100) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Net international investment position - annual data") +
  scale_y_continuous(breaks = 0.01*seq(-300, 200, 10),
                     labels = scales::percent_format(accuracy = 1)) +
  geom_hline(yintercept = -0.35, linetype = "dashed") +
  geom_hline(yintercept = 0, linetype = "solid")

France, Germany, Italy, Spain, Netherlands

Code
tipsii10 |>
  filter(geo %in% c("DE", "ES", "FR", "IT", "NL"),
         unit == "PC_GDP") |>
  year_to_date() |>
  
  left_join(colors, by = c("Geo" = "country")) |>
  mutate(values = values/100) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
  scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Net international investment position - annual data") +
  scale_y_continuous(breaks = 0.01*seq(-300, 200, 20),
                     labels = scales::percent_format(accuracy = 1)) +
  geom_hline(yintercept = -0.35, linetype = "dashed") +
  geom_hline(yintercept = 0, linetype = "solid")