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