Real interest rate (%)

Source: worldbank.org, 01.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Angola Angola -4.66 +707% 73
Albania Albania 3.66 +1,258% 49
Argentina Argentina -47.5 +183% 75
Armenia Armenia 11.9 +25.3% 6
Antigua & Barbuda Antigua & Barbuda 0.194 -88.7% 69
Azerbaijan Azerbaijan 16.3 -36.5% 3
Bangladesh Bangladesh 2.78 +341% 58
Bulgaria Bulgaria -1.79 -45.4% 71
Bahamas Bahamas 3.95 -276% 47
Bosnia & Herzegovina Bosnia & Herzegovina 4.3 -245% 46
Belarus Belarus 1.13 -36.5% 65
Belize Belize 2.28 +26.1% 60
Brazil Brazil 35.1 -4% 1
Brunei Brunei 7.88 -62.6% 18
Bhutan Bhutan 6.85 -9.48% 25
Botswana Botswana 3.39 -31% 50
Switzerland Switzerland 1.67 -14.6% 64
China China 5.09 +4.36% 44
Colombia Colombia 10 -23.9% 12
Cape Verde Cape Verde 5.97 +80.9% 35
Costa Rica Costa Rica 7.28 -20.8% 23
Czechia Czechia 0.704 -122% 66
Dominica Dominica 3.37 -10.6% 51
Dominican Republic Dominican Republic 10.5 +28.8% 10
Algeria Algeria 6.19 -12.6% 33
Egypt Egypt -7.03 +24.6% 74
Fiji Fiji 0.397 -52.6% 67
Georgia Georgia 7.91 -22.9% 16
Grenada Grenada 5.46 +32.1% 39
Guatemala Guatemala 8.43 +65.6% 15
Guyana Guyana 5.85 -77.6% 37
Hong Kong SAR China Hong Kong SAR China 1.83 -34.3% 62
Honduras Honduras 10.4 +31.7% 11
Hungary Hungary 1.69 +2,016% 63
Indonesia Indonesia 7.83 +7.54% 19
Iceland Iceland 6.24 +14.8% 32
Italy Italy 3.08 -419% 55
Jamaica Jamaica 6.78 +1,761% 26
Jordan Jordan 6.46 -7.71% 30
Kyrgyzstan Kyrgyzstan 14.4 -2,385% 5
St. Kitts & Nevis St. Kitts & Nevis 6.7 +108% 27
Kuwait Kuwait 5.95 -57.9% 36
St. Lucia St. Lucia 5.27 +8.92% 43
Lesotho Lesotho 7.26 -36.8% 24
Macao SAR China Macao SAR China 5.64 +329% 38
Moldova Moldova 2.2 -21.4% 61
Maldives Maldives 10.8 +12.3% 8
Mexico Mexico 5.99 -11.9% 34
North Macedonia North Macedonia 2.9 -234% 57
Montenegro Montenegro 2.54 -167% 59
Mozambique Mozambique 15.9 -9.25% 4
Mauritius Mauritius 5.32 +94.8% 42
Malawi Malawi 7.64 -12.6% 20
Malaysia Malaysia 4.47 -39.1% 45
Namibia Namibia 7.46 +83.8% 22
Nicaragua Nicaragua 3.66 -412% 48
Norway Norway 6.37 -65.5% 31
Qatar Qatar 6.63 -65.5% 28
Romania Romania -0.0439 -98.6% 70
Rwanda Rwanda 11.8 +222% 7
Sierra Leone Sierra Leone 0.364 -105% 68
South Sudan South Sudan -58.6 +187% 76
Suriname Suriname -4.1 -70% 72
Eswatini Eswatini 7.9 +68.8% 17
Seychelles Seychelles 10.6 +103% 9
Thailand Thailand 3.21 +8.04% 54
Timor-Leste Timor-Leste 19.6 -50.8% 2
Tonga Tonga 2.94 -62.2% 56
Trinidad & Tobago Trinidad & Tobago 5.41 -75.5% 40
Ukraine Ukraine 6.51 +249% 29
Uruguay Uruguay 5.4 -34.2% 41
Uzbekistan Uzbekistan 8.59 +17.4% 14
St. Vincent & Grenadines St. Vincent & Grenadines 3.26 -21% 52
Vanuatu Vanuatu 9.5 -316% 13
Samoa Samoa 3.26 +1,427% 53
South Africa South Africa 7.49 +17.3% 21

The real interest rate is a critical economic indicator that reflects the true cost of borrowing and the real return on savings, adjusted for inflation. This rate is essential for both individuals and businesses as it influences consumption, investment decisions, and overall economic growth. When the real interest rate is positive, it indicates that the purchasing power of deposits is growing, which encourages saving and investment. Conversely, a negative real interest rate signifies that inflation outpaces returns on investments, disincentivizing savings and potentially leading to economic stagnation or decline.

In 2023, the median real interest rate globally stood at 4.24%. This figure highlights various economic conditions across different regions. The real interest rate is influenced by several factors, including the nominal interest rate set by central banks and the rate of inflation, which can vary significantly among countries and affect the overall economic landscape.

The importance of the real interest rate cannot be overstated. It plays a vital role in shaping monetary policy. Central banks, through their control of nominal interest rates, aim to achieve targeted inflation rates. A higher real interest rate often signals a tighter monetary policy, intended to curb inflation by making borrowing more expensive. Conversely, a lower rate facilitates increased borrowing, stimulating economic activity during periods of slow growth.

Examining areas with the highest real interest rates in 2023 reveals fascinating data. Madagascar leads with an astounding 41.3%, while Timor-Leste follows closely with 39.86%. Brazil ranks third at 37.21%, followed by Azerbaijan at 25.52%, and Guyana at 24.38%. These values suggest that these nations are experiencing unique economic dynamics, such as high nominal interest rates or significantly low inflation rates, which may create opportunities for savers amidst heightened risks. Such high rates could also indicate challenges within these economies, potentially discouraging foreign investment due to perceived volatility.

In stark contrast, the lowest real interest rates are observed in countries like Zimbabwe at -73.54%, South Sudan at -20.46%, Argentina at -16.77%, Suriname at -13.68%, and Haiti at -13.15%. These negative rates underscore severe economic distress where inflation is rampant, leading to a massive erosion of consumer purchasing power. Such environments can foster a lack of confidence among investors, further complicating economic recovery efforts.

The relationships between the real interest rate and other economic indicators are progressive. For instance, a robust correlation exists between real interest rates and inflation rates. High inflation typically leads to higher nominal interest rates, and if inflation escalates beyond nominal rates, the result is a negative real interest rate. Additionally, these rates can influence exchange rates, as investors seek better returns in more stable economies, affecting currency valuation.

Several factors affect the real interest rate, including government fiscal policy, international capital flows, and overall economic stability. In nations where governments run deficits and rely on borrowing, higher real interest rates may be necessary to attract foreign capital. Additionally, political instability or economic uncertainty can lead to fluctuations in these rates, as investors seek to protect their assets against volatility.

For both individuals and businesses, understanding real interest rate trends is paramount when making financial decisions. Individuals should consider strategies such as locking in fixed-rate loans during periods of rising rates to mitigate the risk of higher costs in the future. Businesses, too, may adopt similar strategies by steering investments toward projects with a higher return on investment that can outpace real interest rate growth.

However, relying solely on real interest rates has its flaws. They can sometimes offer misleading signals during times of economic upheaval, particularly when central banking policies are unorthodox or if external factors, such as geopolitical tensions, drastically alter inflation expectations. Moreover, high real interest rates may also discourage consumer spending and business investments, leading to potential economic slowdown if not managed properly.

In conclusion, the real interest rate is a pivotal economic indicator that reflects the cost of borrowing and the return on savings after accounting for inflation. With a median value of 4.24% in 2023, the global landscape has considerable disparities, revealing unique economic conditions in various regions. High real interest rates in countries like Madagascar and Brazil may suggest both opportunities and risks, whereas negative rates in places like Zimbabwe and South Sudan highlight severe economic challenges. Ultimately, understanding the real interest rate's dynamics and its relationships with other economic indicators is vital for effective financial planning and policy formulation.

                    
# Install missing packages
import sys
import subprocess

def install(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])

# Required packages
for package in ['wbdata', 'country_converter']:
try:
__import__(package)
except ImportError:
install(package)

# Import libraries
import wbdata
import country_converter as coco
from datetime import datetime

# Define World Bank indicator code
dataset_code = 'FR.INR.RINR'

# Download data from World Bank API
data = wbdata.get_dataframe({dataset_code: 'value'},
date=(datetime(1960, 1, 1), datetime.today()),
parse_dates=True,
keep_levels=True).reset_index()

# Extract year
data['year'] = data['date'].dt.year

# Convert country names to ISO codes using country_converter
cc = coco.CountryConverter()
data['iso2c'] = cc.convert(names=data['country'], to='ISO2', not_found=None)
data['iso3c'] = cc.convert(names=data['country'], to='ISO3', not_found=None)

# Filter out rows where ISO codes could not be matched — likely not real countries
data = data[data['iso2c'].notna() & data['iso3c'].notna()]

# Sort for calculation
data = data.sort_values(['iso3c', 'year'])

# Calculate YoY absolute and percent change
data['value_change'] = data.groupby('iso3c')['value'].diff()
data['value_change_percent'] = data.groupby('iso3c')['value'].pct_change() * 100

# Calculate ranks (higher GDP per capita = better rank)
data['rank'] = data.groupby('year')['value'].rank(ascending=False, method='dense')

# Calculate rank change from previous year
data['rank_change'] = data.groupby('iso3c')['rank'].diff()

# Select desired columns
final_df = data[['country', 'iso2c', 'iso3c', 'year', 'value',
'value_change', 'value_change_percent', 'rank', 'rank_change']].copy()

# Optional: Add labels as metadata (could be useful for export or UI)
column_labels = {
'country': 'Country name',
'iso2c': 'ISO 2-letter country code',
'iso3c': 'ISO 3-letter country code',
'year': 'Year',
'value': 'GDP per capita (current US$)',
'value_change': 'Year-over-Year change in value',
'value_change_percent': 'Year-over-Year percent change in value',
'rank': 'Country rank by GDP per capita (higher = richer)',
'rank_change': 'Change in rank from previous year'
}

# Display first few rows
print(final_df.head(10))

# Optional: Save to CSV
#final_df.to_csv("gdp_per_capita_cleaned.csv", index=False)
                    
                
                    
# Check and install required packages
required_packages <- c("WDI", "countrycode", "dplyr")

for (pkg in required_packages) {
  if (!requireNamespace(pkg, quietly = TRUE)) {
    install.packages(pkg)
  }
}

# Load the necessary libraries
library(WDI)
library(dplyr)
library(countrycode)

# Define the dataset code (World Bank indicator code)
dataset_code <- 'FR.INR.RINR'

# Download data using WDI package
dat <- WDI(indicator = dataset_code)

# Filter only countries using 'is_country' from countrycode
# This uses iso2c to identify whether the entry is a recognized country
dat <- dat %>%
  filter(countrycode(iso2c, origin = 'iso2c', destination = 'country.name', warn = FALSE) %in%
           countrycode::codelist$country.name.en)

# Ensure dataset is ordered by country and year
dat <- dat %>%
  arrange(iso3c, year)

# Rename the dataset_code column to "value" for easier manipulation
dat <- dat %>%
  rename(value = !!dataset_code)

# Calculate year-over-year (YoY) change and percentage change
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(
    value_change = value - lag(value),                              # Absolute change from previous year
    value_change_percent = 100 * (value - lag(value)) / lag(value) # Percent change from previous year
  ) %>%
  ungroup()

# Calculate rank by year (higher value => higher rank)
dat <- dat %>%
  group_by(year) %>%
  mutate(rank = dense_rank(desc(value))) %>% # Rank countries by descending value
  ungroup()

# Calculate rank change (positive = moved up, negative = moved down)
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(rank_change = rank - lag(rank)) %>% # Change in rank compared to previous year
  ungroup()

# Select and reorder final columns
final_data <- dat %>%
  select(
    country,
    iso2c,
    iso3c,
    year,
    value,
    value_change,
    value_change_percent,
    rank,
    rank_change
  )

# Add labels (variable descriptions)
attr(final_data$country, "label") <- "Country name"
attr(final_data$iso2c, "label") <- "ISO 2-letter country code"
attr(final_data$iso3c, "label") <- "ISO 3-letter country code"
attr(final_data$year, "label") <- "Year"
attr(final_data$value, "label") <- "GDP per capita (current US$)"
attr(final_data$value_change, "label") <- "Year-over-Year change in value"
attr(final_data$value_change_percent, "label") <- "Year-over-Year percent change in value"
attr(final_data$rank, "label") <- "Country rank by GDP per capita (higher = richer)"
attr(final_data$rank_change, "label") <- "Change in rank from previous year"

# Print the first few rows of the final dataset
print(head(final_data, 10))