Measuring Inequality and Poverty

measurement
indicators
statistics
R
visualization
tutorial
BA
MA
How the Lorenz curve, the Gini coefficient, top shares, and the Palma ratio describe a distribution, how absolute poverty lines and the Multidimensional Poverty Index identify deprivation, and why these measures disagree.
Author

Claudius Gräbner-Radkowitsch

Published

September 16, 2026

Modified

September 16, 2026

1 Introduction

Average measures such as GDP or GNI per capita say nothing about how a total is divided. Consider two economies of ten people each. In the first, everyone earns 100 EUR. In the second, one person earns 991 EUR and the other nine earn 1 EUR apiece. Both have a GDP of 1,000 EUR. Any indicator that cannot tell them apart is missing something most people would consider central to development.

This page covers the two families of indicators that address this: inequality measures, which describe the whole distribution, and poverty measures, which focus on its bottom. They are related but not interchangeable — a country can reduce poverty while inequality rises, and vice versa.

Both families are unusually normative. Choosing a poverty line is a statement about what counts as a minimally acceptable life; choosing an inequality measure is a statement about which part of the distribution matters. The general argument for why such choices cannot be avoided is developed in The Theory-Ladenness of Observation.

Packages and the caching helper
library(WDI)
library(dplyr)
library(tidyr)
library(readr)
library(readxl)
library(purrr)
library(stringr)
library(ggplot2)
library(ggpubr)
library(kableExtra)

wdi_cached <- function(indicators, file, ...) {
  path <- file.path("data", file)
  if (!file.exists(path)) {
    message("Cache miss - downloading from the World Bank API ...")
    write_csv(WDI(indicator = indicators, ...), path)
  }
  out <- read_csv(path, show_col_types = FALSE)
  # Guard against a retired indicator code (which returns silently without its
  # column) and against a cache file written by a different query
  stopifnot(all(names(indicators) %in% names(out)))
  out
}
ImportantIncome and wealth are different things

Income is a flow (what you receive per period); wealth is a stock (what you own). Wealth is far more concentrated than income in every country where both have been measured, and the two behave differently: very rich households often draw income from profits, dividends, and capital gains rather than wages, so their taxable income can look modest while their wealth is enormous.

Income inequality is much easier to measure, because tax and survey systems record income as a matter of course. Many countries — Germany among them — have no comprehensive official statistics on the distribution of wealth at all, so wealth figures are estimates built from partial sources. Always state which of the two you are measuring.

2 Inequality Measures

2.1 The Lorenz curve and the Gini coefficient

The Lorenz curve plots the cumulative share of total income (vertical axis) against the cumulative share of the population, ranked from poorest to richest (horizontal axis). Under perfect equality the poorest 30% receive exactly 30% of income, so the “curve” is the 45-degree line. Any inequality bows the curve below that line.

The Gini coefficient summarises the bow in a single number: the area between the Lorenz curve and the line of equality, divided by the total area beneath the line of equality. It runs from 0 (perfect equality) to 1 (one person has everything), and is often reported as a percentage.

Computing a Lorenz curve and Gini coefficient from scratch
#' Lorenz curve coordinates and the Gini coefficient for a vector of incomes
lorenz_gini <- function(income) {
  sorted <- sort(income)
  n      <- length(sorted)

  # Cumulative shares, with the origin (0, 0) prepended
  pop_share    <- c(0, seq_len(n) / n)
  income_share <- c(0, cumsum(sorted) / sum(sorted))

  # Area under the Lorenz curve by the trapezoidal rule.
  # Under perfect equality that area is 1/2, so Gini = 1 - 2 * area.
  area <- sum(diff(pop_share) *
                (head(income_share, -1) + tail(income_share, -1)) / 2)

  list(pop_share = pop_share, income_share = income_share, gini = 1 - 2 * area)
}

set.seed(123)
distributions <- list(
  "Equal society"   = rep(100, 100) + rnorm(100, 0, 5),
  "Unequal society" = c(rep(10, 70), rep(50, 20), rep(200, 8), rep(1000, 2))
)

lorenz_df <- imap_dfr(distributions, function(income, label) {
  res <- lorenz_gini(pmax(income, 0))
  tibble(
    type         = paste0(label, "\nGini = ", round(res$gini, 3)),
    pop_share    = res$pop_share,
    income_share = res$income_share
  )
})

ggplot(lorenz_df, aes(x = pop_share, y = income_share)) +
  geom_ribbon(aes(ymin = income_share, ymax = pop_share),
              alpha = 0.3, fill = "grey40") +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed",
              colour = "#ff7f0e", linewidth = 0.9) +
  geom_line(colour = "#1f77b4", linewidth = 1.1) +
  facet_wrap(~type) +
  coord_equal() +
  scale_x_continuous(labels = scales::percent_format(), limits = c(0, 1)) +
  scale_y_continuous(labels = scales::percent_format(), limits = c(0, 1)) +
  labs(x = "Cumulative population share", y = "Cumulative income share") +
  theme_minimal() +
  theme(panel.grid.minor = element_blank())
Figure 1: Lorenz curves for two hypothetical distributions. The shaded area between the curve and the line of equality, as a share of the whole triangle beneath that line, is the Gini coefficient.

Sources: World Bank SI.POV.GINI; WID.world; the Luxembourg Income Study (harmonised microdata); the World Income Inequality Database.

Captures: the entire distribution in one number; widely available, long time series, internationally recognised; reasonably intuitive.

Misses: very different distributions can produce the same Gini, because the measure is insensitive to where in the distribution inequality sits. It is most sensitive around the middle and relatively insensitive at the extremes — which is awkward, since the extremes are usually what the political debate is about. It also depends heavily on survey design and coverage.

WarningGini coefficients are frequently not comparable

A World Bank Gini may be computed from income for one country and from consumption for another. Consumption is distributed much more equally than income, because rich households save a large share of what they receive. India’s World Bank Gini is around 25 — lower than Norway’s — almost entirely because it is consumption-based. Before comparing two Gini coefficients, check that they refer to the same variable, the same unit (household vs. individual), and the same point in the tax-and-transfer chain (pre- vs. post-redistribution).

2.2 Top and bottom shares

Share measures sidestep the aggregation problem by reporting parts of the distribution directly: the share of total income or wealth held by the top 10%, the top 1%, or the bottom 40%.

These are the natural measures for wealth, where survey data break down in the upper tail and tax-based estimation is required. The methodology is actively debated, because much wealth is unrecorded or deliberately hidden.1

Captures: what happens at the extremes, which aggregate measures average away; changes in top-end concentration invisible to the Gini; a natural fit for wealth data.

Misses: everything outside the reported segment; and they say nothing about inequality within the top 10% or the bottom 40%.

2.3 The Palma ratio

The Palma ratio is the income share of the top 10% divided by that of the bottom 40%. Its motivation is an empirical regularity: across countries and over time, the middle of the distribution (the 50th to 90th percentiles) captures roughly half of total income, and almost all cross-country variation is in how the remaining half is split between the top 10% and the bottom 40%. The Palma ratio measures exactly that contested part, and some argue it is preferable to the Gini for precisely this reason (Cobham and Sumner 2014).

Captures: the part of the distribution that actually varies; robust to measurement error in the middle; simple to interpret (“the top tenth receives X times what the bottom four tenths receive”).

Misses: inequality within the top and bottom groups; and it relies on the stability of the middle share, which may not hold everywhere.

2.4 Application: income and wealth concentration compared

The World Inequality Database publishes top shares for both income and wealth on a common basis, which lets us compare the two directly. The export below was taken from the WID portal.

Reading and tidying the WID export
# The WID export puts a two-line label in the `variable` column; the second
# line holds the human-readable variable name.
second_line <- function(x) map_chr(str_split(x, "\\n"), \(parts) parts[2])

wid <- read_xlsx(
  "data/wid-income-wealth-shares.xlsx",
  col_names = c("country", "variable", "percentile", "year", "value")
) |>
  mutate(
    variable = second_line(variable),
    iso3c    = countrycode::countrycode(country, "country.name", "iso3c",
                                        warn = FALSE)
  ) |>
  filter(!is.na(iso3c)) |>
  # Countries where WID reports only one of the two series
  filter(!iso3c %in% c("CHN", "GEO", "IND", "JEY", "MEX", "RUS", "ZAF")) |>
  select(-percentile) |>
  # `year` is still needed here: it is part of the key that makes each
  # country-year row unique before the two variables are spread into columns
  pivot_wider(names_from = "variable", values_from = "value") |>
  rename(wealth_top10 = `Net personal wealth`,
         income_top10 = `Pre-tax national income `) |>
  # One observation per year from 2010 to 2023; average over them
  summarise(across(c(wealth_top10, income_top10), \(x) mean(x, na.rm = TRUE)),
            .by = c("country", "iso3c"))

nrow(wid)
[1] 207
Code
ggplot(wid, aes(x = wealth_top10, y = income_top10)) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed",
              colour = "#ff7f0e", linewidth = 0.8) +
  geom_point(size = 2, alpha = 0.7, colour = "#1f77b4") +
  scale_x_continuous(limits = c(0.25, 0.85),
                     labels = scales::percent_format(accuracy = 1)) +
  scale_y_continuous(limits = c(0.25, 0.85),
                     labels = scales::percent_format(accuracy = 1)) +
  labs(x = "Top 10% share of net personal wealth",
       y = "Top 10% share of pre-tax national income") +
  theme_minimal() +
  theme(panel.grid.minor = element_blank())
Figure 2: Top 10% shares of income and of wealth, averaged over 2010–2023. The dashed line marks equal concentration of the two. Source: WID.world.

Two patterns stand out. First, the two are positively related: countries with concentrated income tend to have concentrated wealth. Second, and more strikingly, every point lies below the diagonal — wealth is more concentrated than income in every country in the sample, without exception.

The methodological implication is direct. An analysis that reports only income inequality systematically understates economic inequality, and does so in the same direction everywhere. The choice between the two measures is not a matter of convenience.

3 Poverty Measures

3.1 Absolute poverty lines

An absolute poverty line fixes a consumption threshold and counts the people below it. The World Bank currently maintains three international lines, all in 2021 PPP dollars:

Line Purpose WDI code
$3.00 / day Extreme poverty SI.POV.DDAY
$4.20 / day Lower-middle-income standard SI.POV.LMIC
$8.30 / day Upper-middle-income standard SI.POV.UMIC

The resulting headcount ratio is the share of the population below the line. These thresholds are revised periodically as PPP conversion factors are rebased — which means that poverty series are not directly comparable across revisions, a detail often lost when the numbers are quoted.

Captures: an intuitive, policy-actionable threshold; long time series; international comparability via PPP.

Misses: the level of the line is a value judgement, not a finding; the binary count ignores how far below the line people are; PPP conversion factors are built from national consumption baskets that may not resemble what poor households actually buy; and World Bank estimates frequently diverge substantially from national poverty statistics (e.g. Reddy and Pogge 2010).

3.2 The Multidimensional Poverty Index

The MPI treats poverty as deprivation across several dimensions rather than a shortfall of income. It uses ten indicators in three dimensions:

  • Health: nutrition, child mortality
  • Education: years of schooling, school attendance
  • Living standards: cooking fuel, sanitation, drinking water, electricity, housing, assets

A person counts as multidimensionally poor when deprived in at least one third of the weighted indicators. The index then combines the incidence of poverty (how many are poor) with its intensity (how deprived the poor are on average) — information a headcount discards.

Sources: UNDP Human Development Reports; the Oxford Poverty and Human Development Initiative (OPHI); DHS and MICS household surveys.

Captures: deprivations invisible to income measures; which specific deprivations bind, which is directly useful for policy; robustness to error in any one indicator.

Misses: the weighting across dimensions and the deprivation cut-offs are judgement calls; it needs detailed household survey data, so coverage is patchier and less frequent; and it is less comparable across very different contexts than a monetary line.

3.3 Application: global poverty over time

The figure below uses World Bank Poverty and Inequality Platform data as processed and documented by Our World in Data.

Reading and reshaping the OWID poverty data
poverty <- read_csv("data/owid-poverty-thresholds.csv",
                    show_col_types = FALSE) |>
  select(-ends_with("annotations")) |>
  pivot_longer(cols = starts_with("Number of")) |>
  mutate(name = str_remove(name, " - Income or consumption consolidated")) |>
  summarise(Total = sum(value, na.rm = TRUE), .by = c("Year", "name")) |>
  mutate(TotalPop = sum(Total), Share = Total / TotalPop, .by = "Year") |>
  filter(Year >= 1991) |>
  mutate(Category = factor(
    case_when(
      str_detect(name, "not in poverty")             ~ "Not in poverty (>$10)",
      str_detect(name, "between \\$8.30 and \\$10")  ~ "Moderate ($8.30–$10)",
      str_detect(name, "between \\$4.20 and \\$8.30")~ "Poverty ($4.20–$8.30)",
      str_detect(name, "between \\$3 and \\$4.20")   ~ "Severe ($3–$4.20)",
      str_detect(name, "\\$3 a day")                 ~ "Extreme (<$3)",
      .default = name
    ),
    levels = c("Not in poverty (>$10)", "Moderate ($8.30–$10)",
               "Poverty ($4.20–$8.30)", "Severe ($3–$4.20)", "Extreme (<$3)")
  ))
Code
poverty_colours <- c(
  "Extreme (<$3)"         = "#8B0000",
  "Severe ($3–$4.20)"     = "#CD5C5C",
  "Poverty ($4.20–$8.30)" = "#F4A460",
  "Moderate ($8.30–$10)"  = "#FFD700",
  "Not in poverty (>$10)" = "#228B22"
)

poverty_plot <- function(data, yvar, title, ylab, ylabels) {
  ggplot(data, aes(x = Year, y = {{ yvar }}, fill = Category)) +
    geom_area(alpha = 0.85) +
    scale_fill_manual(values = poverty_colours) +
    scale_x_continuous(breaks = seq(1991, max(data$Year), by = 6)) +
    scale_y_continuous(labels = ylabels) +
    labs(title = title, x = NULL, y = ylab, fill = NULL) +
    theme_minimal() +
    theme(plot.title = element_text(size = 12, face = "bold"),
          panel.grid.minor = element_blank(),
          legend.position = "bottom")
}

ggarrange(
  poverty_plot(poverty, Total / 1e9, "Absolute numbers",
               "Billions of people", scales::comma_format(suffix = "B")),
  poverty_plot(poverty, Share, "Relative shares",
               "Share of covered population", scales::percent_format()),
  ncol = 2, common.legend = TRUE, legend = "bottom"
)
Figure 3: People living below successive poverty thresholds, in absolute numbers and as shares of the covered population. All thresholds are contested; see the discussion below.

The headline reading — that the share in extreme poverty has fallen sharply — is one of the most cited findings in development economics, and also one of the most contested. The critiques bear directly on everything above: that the $3 line is set far below any plausible subsistence requirement, that PPP conversions misrepresent what the poor actually face, and that measuring progress against an extremely low threshold flatters the record of the economic order that produced it. For accessible statements of the critique see Hickel (2019) and Smith (2021); for the academic exchange, Sullivan and Hickel (2023) and the reply by Rutar (2024).

TipAn exercise worth doing

Reproduce the right-hand panel using only the $8.30 line rather than the $3 line, and describe the trend in words. Then write two sentences: one defensible summary of global poverty trends using the $3 line, and one using the $8.30 line. Both will be true. That is the point — and it is why the choice of threshold has to be argued for rather than inherited.

4 Summary

  • Inequality measures describe the whole distribution; poverty measures describe its bottom. They can move in opposite directions.
  • The Gini summarises the Lorenz curve in one number, but is insensitive to where inequality sits, and is frequently not comparable across countries because of income-vs-consumption and pre-vs-post-redistribution differences.
  • Top shares and the Palma ratio report contested parts of the distribution directly, and are the practical choice for wealth.
  • Wealth is more concentrated than income in every country measured, so income-only analyses understate inequality systematically.
  • Absolute poverty lines are transparent and comparable but encode a contestable threshold; the MPI captures non-monetary deprivation at the cost of comparability and coverage.
  • Every number here rests on a normative choice. Report the choice, and where possible report results under more than one.

References

Cobham, Alex, and Andy Sumner. 2014. “Is Inequality All about the Tails?: The Palma Measure of Income Inequality.” Significance 11 (1): 10–13. https://doi.org/10.1111/j.1740-9713.2014.00718.x.
Hickel, Jason. 2019. “A Letter to Steven Pinker (and Bill Gates, for That Matter) about Global Poverty.” In Jason Hickel Blog. https://www.jasonhickel.org/blog/2019/2/3/pinker-and-global-poverty.
Reddy, Sanjay G., and Thomas Pogge. 2010. “How Not to Count the Poor.” In Debates on the Measurement of Global Poverty, 1st ed., edited by Sudhir Anand, Paul Segal, and Joseph E. Stiglitz. Oxford University PressOxford. https://doi.org/10.1093/acprof:oso/9780199558032.003.0003.
Rutar, Tibor. 2024. “Re-Examining Extreme Poverty Before and After the Transition to Capitalism, 1300s–1900s: The Issue of Definition, Periodization, Measurement, and Causal Responsibility.” International Review of Sociology 34 (2): 300–334. https://doi.org/10.1080/03906701.2024.2380314.
Saez, Emmanuel, and Gabriel Zucman. 2019. The Triumph of Injustice: How the Rich Dodge Taxes and How to Make Them Pay. W.W. Norton & Company.
Smith, Noah. 2021. “Against Hickelism Poverty Is Falling, and It Isn’t Because of Free-Market Capitalism.” In Noahpinion. https://www.noahpinion.blog/p/against-hickelism.
Sullivan, Dylan, and Jason Hickel. 2023. “Capitalism and Extreme Poverty: A Global Analysis of Real Wages, Human Height, and Mortality Since the Long 16th Century.” World Development 161 (January): 106026. https://doi.org/10.1016/j.worlddev.2022.106026.
Zucman, Gabriel, and Thomas Piketty. 2016. The Hidden Wealth of Nations: The Scourge of Tax Havens. Paperback edition. Translated by Teresa Lavender Fagan. The University of Chicago Press.

Footnotes

  1. On this, see Zucman and Piketty (2016) or Saez and Zucman (2019).↩︎

Citation

BibTeX citation:
@inreference{graebner2026-measuring-inequality-and-poverty,
  author = {Gräbner-Radkowitsch, Claudius},
  editor = {Gräbner-Radkowitsch, Claudius},
  title = {Measuring {Inequality} and {Poverty}},
  booktitle = {Method and Inquiry},
  date = {2026-09-16},
  url = {https://euf-methodology-hub.netlify.app/resources/measuring-inequality-and-poverty},
  langid = {en}
}
For attribution, please cite this work as:
Gräbner-Radkowitsch, Claudius. 2026. “Measuring Inequality and Poverty.” In Method and Inquiry, edited by Claudius Gräbner-Radkowitsch. September 16. https://euf-methodology-hub.netlify.app/resources/measuring-inequality-and-poverty.