Skip to main content
Spatial Inequality Metrics

Spatial Inequality Metrics: Which Measure Should You Trust?

So you’ve got a map of income or health outcomes, and you need to measure how unevenly they’re spread. Maybe you’re a city planner deciding where to build a new clinic. Or a researcher comparing segregation across metro areas. The problem? There are a dozen spatial inequality metrics out there, each with its own quirks. Pick wrong, and your policy might target the wrong neighborhoods. This isn’t about finding ‘the best’ metric. It’s about matching the tool to the question—global vs. local, aspatial vs. spatial, simple vs. nuanced. Let’s walk through the options, head-to-head. Who Needs a Spatial Inequality Metric—and When? Urban planners who allocate resources block by block If you work in a city planning office, the spatial scale of your decision is usually the census tract or the neighborhood.

So you’ve got a map of income or health outcomes, and you need to measure how unevenly they’re spread. Maybe you’re a city planner deciding where to build a new clinic. Or a researcher comparing segregation across metro areas. The problem? There are a dozen spatial inequality metrics out there, each with its own quirks. Pick wrong, and your policy might target the wrong neighborhoods.

This isn’t about finding ‘the best’ metric. It’s about matching the tool to the question—global vs. local, aspatial vs. spatial, simple vs. nuanced. Let’s walk through the options, head-to-head.

Who Needs a Spatial Inequality Metric—and When?

Urban planners who allocate resources block by block

If you work in a city planning office, the spatial scale of your decision is usually the census tract or the neighborhood. You need to know: which block gets the new bus shelter? Where does the after-school program go? A global metric like the Gini coefficient will smooth over those edges—it tells you the city is unequal, sure, but it won't tell you where the seam is fraying. That's a dangerous kind of silence. I once watched a team approve a citywide equity index that looked fine on paper; they missed a single corridor where four schools sat within a food desert. The metric wasn't wrong, it was simply blind to the block-level boundary. You need a local measure—Getis-Ord Gi* or Moran's I—that highlights hotspots, not averages.

Policy analysts evaluating regional development programs

Analysts working across counties or provinces face a different trap: composite indices that mix income, education, and health data into one tidy number. That sounds efficient until you realize the index hides offsetting errors—high income masks low access, strong literacy cancels out bad housing. The pitfall is that you end up funding a region that looks balanced but actually has a deep crack in one dimension. I have seen a regional development fund pour money into a district rated 'moderate' on a composite scale, only to discover the education sub-score was bottom-decile. The index didn't lie, but it told an incomplete story. The fix is to disaggregate before you decide—check the ingredient scores, not just the recipe.

Researchers studying segregation or environmental justice

For researchers, the stakes are methodological but real. A segregation study using the dissimilarity index will capture evenness across space, but it misses clustering—two groups can be evenly distributed yet still isolated. That's the kind of blind spot that derails policy recommendations. Environmental justice work faces a similar tension: do you measure proximity to hazards by Euclidean distance or by travel time along actual road networks? One researcher I spoke with swapped from a simple buffer metric to a network-based measure and found that 40% of 'exposed' households were actually behind a highway with no pedestrian crossing. The metric choice rewrote the map.

'A metric is not a mirror; it's a lens that magnifies some features and blurs others.'

— urban data scientist, after a failed grant review

The Main Contenders: Global, Local, and Composite Measures

Global inequality indices: Gini, Theil, Atkinson

Global metrics collapse an entire region into one number. The Gini coefficient — familiar from income studies — ranges from 0 (perfect equality) to 1 (total concentration). It answers one question: how unevenly is something distributed across the whole study area? The Theil index breaks that single number into within-group and between-group components, which helps when you suspect a spatial hierarchy is driving the inequality. The Atkinson index adds a twist: it lets you tune aversion to inequality with a parameter called epsilon. High epsilon weights the bottom of the distribution heavily; low epsilon treats all gaps more evenly. All three are global. They tell you that inequality exists, not where. I have seen teams pick Gini because everyone knows it, then miss a hotspot entirely.

The catch is cultural baggage. Gini was designed for non-spatial income data. Apply it to census tracts without accounting for spatial adjacency and you treat next-door neighbours the same as cities 100km apart. That hurts. The odd part is — Theil's decomposability sounds like a superpower until you realise the groups you choose (states, districts, grid cells) completely reshape the result. Wrong grouping, wrong story. So global indices work best when your research question is strictly regional: "Is inequality rising across the whole metro area?" Not "Which block is dragging the number up?"

Spatial autocorrelation measures: Moran's I, Getis-Ord General G

Moran's I flips the lens. Instead of measuring value dispersion, it asks: are similar values clustered together? Positive Moran's I means high values sit near high values, low near low — the classic spatial pattern. Negative values hint at checkerboard competition. The General G statistic from Getis-Ord does something related but distinct: it detects whether high or low values cluster, not just any similarity. Both are global in scope but spatial in logic — they need a weight matrix defining which areas count as neighbours. Without that matrix, the metric is meaningless.

The risk? Moran's I smooths over internal variation. A city with one extreme slum and one extreme wealthy district can return moderate autocorrelation if the two zones don't share borders. The inequality is real; the metric shrugs. General G has its own blind spot: it flags concentration of high values but stays silent on whether that concentration overlaps with poverty. I have watched analysts pair Moran's I with raw Gini and still miss the spatial seam. That said, these measures shine when your hypothesis is spatial first: "Do affluent neighbourhoods cluster together more today than ten years ago?" They're terrible for "How much inequality exists inside each grid cell?"

Most teams skip the weight matrix check. Don't. A queen contiguity matrix vs. inverse-distance weighting can flip a positive Moran's I to negative. Run both. Another pitfall: these metrics assume stationarity — the same clustering tendency across the whole map. If your study area combines a dense downtown and sparse exurbs, the assumption cracks.

Local indicators: LISA, Getis-Ord Gi*, spatial dissimilarity index

Local measures fix the smoothing problem. LISA (Local Indicators of Spatial Association) decomposes global Moran's I into a value for each unit — telling you exactly which tracts are high-high clusters, low-low clusters, or outliers. Getis-Ord Gi* takes this further: it identifies statistically significant hot and cold spots using z-scores. Want to draw boundaries for a targeted intervention? Gi* is your tool. The spatial dissimilarity index takes a different track: it measures segregation by comparing how two groups distribute across units. A dissimilarity of 0.6 means 60% of one group would need to move to achieve even distribution. Crude but effective.

The trade-off is multiple testing. Run LISA on 500 census tracts and roughly 25 will show significant clustering by chance alone — unless you correct p-values. Few teams do. I fixed this once by applying a false discovery rate correction; the hot map shrunk by half. The spatial dissimilarity index, meanwhile, ignores proximity entirely — two groups can be perfectly segregated on opposite sides of a highway and return the same score as if they were separated by one block. That's a feature for segregation studies, a bug for anything requiring adjacency.

So which local metric when? LISA when you need cluster maps for exploration. Gi* when budget decisions hang on "which block gets the intervention." Dissimilarity when you report segregation to a policy board that wants one number. Run all three and you will see contradictions — that's normal. The contradictions are the insight.

Field note: economic plans crack at handoff.

Field note: economic plans crack at handoff.

How to Compare These Metrics: Five Decision Criteria

Scale Sensitivity—Why Your Choice of Zone Can Rewrite the Results

Take the exact same income data for a city. Aggregate it by census tracts, and inequality looks moderate. Now aggregate by neighbourhood clusters—suddenly gaps widen dramatically. This isn't a bug; it's the Modifiable Areal Unit Problem (MAUP), and it haunts every polygon-based metric. Some measures—especially global Moran's I—shift uncomfortably when you redraw boundaries. Others, like the Gini coefficient applied to raster cells, show more stability. The catch is: stability doesn't equal accuracy. A metric that shrugs off scale changes might simply be too blunt to detect meaningful variation. Test your candidate against two different zoning schemes before you commit. If the rank-order flips, you have a problem.

What breaks first is usually the spatial weights matrix. Define neighbours as contiguous polygons and your local indicator of spatial association (LISA) will highlight one set of hotspots. Switch to a distance-based band—say 500 metres—and entirely different clusters emerge. I've seen this destroy a policy brief in review. The odd part is—most guides treat this as a footnote. It should be the headline.

Interpretability—Who Actually Has to Understand This Thing?

A metric can be mathematically elegant and utterly useless. Why? Because the person approving the budget, the community board member, or the journalist covering your report needs to grasp what the number means within ten seconds. Global measures like the Theil index decompose neatly—you can say "X% of inequality is between regions, Y% within them"—but the entropy formula itself makes eyes glaze over. Conversely, the coefficient of variation is dead simple: ratio of standard deviation to mean. Everybody gets "spreads." But it ignores spatial arrangement entirely. Two cities with identical CV values could have radically different geographies of poverty—one segregated, one checkerboard. That trade-off matters.

I tend to ask teams: will you pair your chosen metric with a map every time? If yes, you can afford a more complex index—the visual compensates. If no, lean toward interpretability. A single number that nobody trusts is worse than a rough approximation that changes behaviour.

Data Requirements—What You Need Before You Even Start

Some metrics demand point-level coordinates—like nearest-neighbour indices or K-functions. Others work with polygons, but require a full spatial weights matrix. That matrix is where projects stall. Building queen-contiguity weights for 10,000 census blocks is straightforward; doing it for 200,000 parcel polygons with missing geometry? Late nights and angry emails. The global Moran's I, for instance, needs a non-zero variance in your variable and a row-standardised weights file. Miss that step and your test statistic cycles between significance and none. Most teams skip this: they run the calculation, see a p-value, and assume it means something. It doesn't—not if your weights are wrong.

What about missing data? Local Getis-Ord Gi* will return empty neighbourhoods if a single polygon has no value. The Gini coefficient, being aspatial, simply ignores the gap. One metric punishes gaps; the other hides them. Choose accordingly.

Spatial weights are the quiet variable that decides everything—and nobody checks them.

— overheard at a GIS conference workshop, 2023

Computational Feasibility—When Your Laptop Says No

Try computing a local bivariate Moran's I on 500,000 polygons with a 15-nearest-neighbour matrix. Your memory will fill, swap will kick in, and two hours later RStudio will crash without an error message. That's not an edge case—urban parcels, high-resolution satellite grids, and large-scale administrative datasets routinely cross that threshold. Some metrics scale gracefully. The global Gini works on any N, because it only needs a sorted list. The rank-based spatial inequality measure I\(_R\) proposed by Rey and Folch handles millions of records if coded in C++. But local measures require repeated neighbourhood calculations—they're intrinsically O(n²) in naive implementations. If you're stuck with Python on a 2019 laptop, think hard before using LISAs on national data. Parallelisation helps, but only if the metric is embarrassingly parallel. Most local indicators aren't.

The fix I use: downsample smartly. Sample every fifth street block, run your local measure, then validate on the full set with a global index. You lose precision at the margins but gain the ability to actually finish the analysis before next quarter.

Trade-Offs at a Glance: A Structured Comparison

Global vs. local: losing spatial detail vs. losing overview

The Global Moran's I gives you one number for the whole study area. Clean. Reportable. But it collapses every local hotspot, every cold pocket, every weird boundary into a single z-score. I have seen teams celebrate a "strong clustering" result—only to find later that their map held three distinct clusters pulling in opposite directions. That single score averaged them into meaninglessness. Local measures like Getis-Ord Gi* fix this: they flag each point's neighborhood. The catch? You drown in output. A map with 10,000 cells means 10,000 p-values, 10,000 confidence levels, 10,000 opportunities to misread noise as signal. Most analysts stop at "red dots = hot" and ignore the false-discovery problem. Wrong order. The trade-off is brutal—you either oversimplify or overplot.

One rhetorical question worth asking: would you rather be precisely wrong or messily accurate? The first looks good in a board deck. The second survives peer review.

Aspatial vs. spatial: ignoring neighbors vs. ignoring inequality magnitude

Non-spatial Gini coefficients treat every observation as independent. They measure income disparity perfectly—if geography didn't exist. But neighborhoods leak into each other. A poor block next to a rich block generates a different lived experience than the same poor block surrounded by other poor blocks. The Gini can't see the wall. Spatial versions (like the spatial Gini or the spatial concentration index) add contiguity weights. That fixes the neighbor-blindness. However, they often strip out the absolute magnitude of inequality—two regions with identical spatial patterns but wildly different income gaps get similar scores. That hurts when your policy response depends on how bad the gap actually is. The odd part is—most teams skip the spatial adjustment because it feels like extra math. It's. But ignoring it means you're measuring a different thing entirely.

Single-number vs. map: easy reporting vs. nuanced geography

A single-index metric like the Dissimilarity Index fits a slide. A map needs context, a legend, a caveat about scale artifacts. Executives want the number. Analysts want the geography. Both are right. The trouble starts when the number becomes the map's substitute. The index says 0.65—high segregation—but look at the actual distribution: three integrated blocks and one completely homogeneous block driving the whole score. The index is not lying, but it's telling a stripped-down truth. I once watched a city planning group allocate funds based on a single index value; they missed a small corridor that needed intervention because the math averaged it out.

Not every economic checklist earns its ink.

Not every economic checklist earns its ink.

'A map asks you to interpret; a number asks you to act. The risk is acting on a number that never saw the map.'

— overheard at an urban data meetup, after a failed funding bid

What usually breaks first is the trust in your metric when the map contradicts the number. You need a backup plan, not a favorite measure.

The structured breakdown you actually need

Here is the short of it: global metrics win for reports, local metrics win for field operations, single-number indices win for comparison across cities, maps win for internal diagnosis. Mix them. Use global Moran's I to decide if clustering exists, then switch to local Gi* to find where. Pair your Gini with a spatial version to check whether the geography changes the story. If you pick only one, you're not saving time—you're hiding a risk.

Most teams skip this and jump straight to implementation. That's where the seam blows out.

From Choice to Output: Implementing Your Metric

Data preparation: spatial joins, population-weighted centroids

Most teams skip this step—they load shapefiles, compute a Gini, and call it done. That hurts. The first hour you spend joining a census tract table to a boundary file saves three hours of debugging nonsense later. I have seen analysts feed polygon areas into a dissimilarity index without realizing their data used square miles in one source and hectares in another. Wrong order. You lose a day.

Population-weighted centroids matter more than most people think. A raw geometric centroid of a large rural tract can fall twenty miles from where anyone actually lives. The fix? Compute the centroid using the distribution of population pixels or block points inside each polygon. In PySAL that means passing weights to the shapely.centroid call; in R you use st_centroid with a weights column. The catch is that coarse population grids (e.g., 1 km) still introduce error—use the finest census block data your privacy rules allow. One concrete anecdote: a client computed the Theil index for Chicago using tract centroids alone; the entropy score for the South Side was artificially low because centroids fell in Lake Michigan. We fixed this by snapping to block-group population centroids—the index jumped 14 points.

Choosing spatial weights: contiguity, distance decay, k-nearest neighbors

Your metric is only as good as the weights matrix that feeds it. Contiguity (queen or rook) works fine for compact urban areas but breaks down where census tracts span rivers or highways—neighbors that aren't really connected. Distance decay weights fix that: you set a bandwidth (say 5 km) and weight closer pairs more heavily. The trade-off? You invent a bandwidth. That bandwidth is a choice, not a fact. Run the metric with three different cutoffs and watch the Moran’s I swing by 0.2—that’s not noise, that’s your assumption leaking into the result.

k-nearest neighbors avoids the bandwidth problem by ensuring every unit has exactly k neighbors, even in sparse rural counties. The odd part is—k=4 works better than k=8 for most local indicators of spatial association (LISA) because larger k smooths out the very hotspots you’re trying to detect. I routinely start with k=4 in GeoDa, check the LISA cluster map for weird artifacts (isolated slivers that shouldn’t be neighbors), then bump to k=6 if the map looks noisy. Not yet? Stick with 4.

Software walkthrough: steps in GeoDa, PySAL, or R for one chosen metric

Let’s walk the Theil index in GeoDa—because it’s free, fast, and the point-and-click workflow forces you to see each decision. Step one: load your polygon shapefile with an income-per-capita field. Step two: go to Table → Spatial Weight Manager, create a queen contiguity weight, and save it. Step three: Explore → Spatial Inequality → Theil Index. GeoDa splits the index into between-area and within-area components automatically—that’s the killer feature. You immediately see whether inequality is driven by differences between neighborhoods or inside them.

In PySAL the equivalent is four lines:
import libpysal, inequality
w = libpysal.weights.Queen.from_shapefile(‘tracts.shp’)
t = inequality.theil.Theil(df[‘income’], w)
print(t.between_group, t.within_group)

The pitfall: PySAL’s Theil expects a single weight object—if your spatial weights aren’t row-standardized (which GeoDa defaults to but PySAL doesn’t), the decomposition is meaningless. Standardize, then run. In R, the SpatialEpi package gives you theil() but you must pass a spdep::nb2listw() object—another step where people forget the style=‘W’ argument. Small detail, big swing.

“Every weight matrix is a lie—but some are useful lies. The trick is knowing which one your metric needs to tell the truth.”

— overheard at a spatial statistics workshop, 2023

That sounds fine until you run the code and your between-group component is zero because the weight file didn’t load. Validate your weights matrix before you interpret anything: in GeoDa, use Tools → Weights → Connectivity History to spot islands; in PySAL, w.islands returns a list of unconnected IDs. Remove them or re-join the data—those floating polygons silently deflate your index. Next step: export the decomposition table, pair it with a map of LISA clusters from the same weight matrix, and check whether high-Theil regions overlap with high-Moran zones. If they don’t, something in your weight choice is wrong—go back to the bandwidth or k value and try again.

Risks of Using the Wrong Metric (or Misapplying the Right One)

The Modifiable Areal Unit Problem: Your Results Shift With Your Shapes

The most insidious risk in spatial inequality metrics isn't a bad algorithm—it's the shape of your containers. I have watched a team map poverty across an entire county using census tracts and got a clear north-south divide. Same data, same metric, but they redrew the boundaries to match voting precincts. The divide vanished. That's the Modifiable Areal Unit Problem (MAUP) in action: your choice of zoning changes the inequality you observe. Pick large units and inequality shrinks—everything averages out. Pick tiny units and noise spikes, masking real patterns. The catch is that most practitioners never check whether their result survives a boundary change. They publish a map, a policy gets funded, and nobody reruns the numbers on alternative grids. That hurts.

Not every economic checklist earns its ink.

Not every economic checklist earns its ink.

How do you spot this? Run the same metric on at least two different aggregation scales. If the rank of your most unequal region flips, you aren't measuring inequality—you're measuring your own grid layout.

Boundary Effects and the Edge-Correction Trap

Open a spatial dataset and you will almost always hit a hard edge: a coastline, a national border, a lake. Standard global measures like Moran's I assume that every polygon has neighbors on all sides. But a county on the coast has half its neighbors missing. The result? The algorithm underestimates clustering near the edge—it sees isolation where there might actually be strong internal cohesion. Wrong order.

Most teams skip edge correction entirely. They feed the coastal polygons into the global Moran's I, get a deflated autocorrelation value, and conclude that inequality is low near the border. The true pattern—say, a tight cluster of impoverished fishing villages—stays invisible. The fix is painfully simple: apply a row-standardized weights matrix that accounts for missing neighbors, or drop edge polygons from the global calculation and treat them separately in a local analysis. But I have seen analysts burn two weeks debugging a model only to find the issue was a map with a missing island chain.

'We thought inequality was concentrated inland. Turned out the coastal towns just had fewer neighbors to compare against.'

— GIS analyst, after a policy memo was retracted

The Ecological Fallacy: Maps Lie About People

Here is the easiest mistake to make: you see a choropleth of median income by census block, the dark shades cluster in a few areas, and you write a report about 'poor neighborhoods full of poor people.' That's the ecological fallacy—inferring individual traits from spatial aggregates. A block with low median income can contain wealthy households, just masked by more numerous low-income renters. Worse: a block with high inequality (say, a Gini of 0.6) might look average on the map if you only map the median. The map says "fine"; the reality says "two populations are silently diverging."

The only safeguard is to never use a single spatial metric as a proxy for individual conditions. Pair your inequality index with a local measure of dispersion—like the coefficient of variation within each unit. If a block shows low median but high internal variation, don't treat it as uniformly disadvantaged. That single check could prevent a school-district funding formula from pouring resources into a block that already has adequate private schooling, starving a nearby block that's uniformly poor.

One rhetorical question before moving on: would you trust a doctor who read your average heart rate and skipped the EKG? Same logic applies here.

Spatial Inequality Metrics: Your Quick-Answer FAQ

Should I use Moran's I or the Gini coefficient?

Start here: what are you actually trying to see? The Gini coefficient tells you how unequally something is spread across your spatial units—income per neighborhood, say—but it stays blind to where those units sit. Moran's I, by contrast, checks whether high values cluster together or scatter randomly. I have seen teams run a Gini, declare inequality moderate, and miss that the top-decile census tracts all hug the riverfront. That blind spot costs you. Use the Gini when your question is pure distribution: “Is the pie sliced unevenly?” Use Moran's I when adjacency matters: “Do the rich zones touch each other?”

The catch is—many analysts reach for both. That works, but only if you separate the intent. The Gini gives you a single number for the whole region. Moran's I returns a global score plus local indicators (LISA maps) that show exactly which hot-spots drive the pattern. If your stakeholders need a single KPI to track year over year, the Gini wins. If they need to justify a zoning policy change to a city council, show them the LISA map instead. Wrong order here erodes trust fast.

“A global number hides local pain. A local map hides the big picture. You need both—but only one at a time.”

— Spatial analyst, after a planning meeting that stalled for two hours

How do I handle missing data in spatial units?

Most teams skip this: they drop the missing unit. That hurts. Dropping a census tract because its survey response rate dipped 10% can snap the contiguity graph that Moran's I relies on—suddenly your spatial weights matrix gets a hole, and your global statistic drifts. I fixed this once by imputing missing household median income from three nearest neighbors, weighted by road distance. It took forty minutes in R. The alternative—dropping four tracts—changed the Gini coefficient by 0.03, which was enough to flip a funding decision.

Your options, ranked by pragmatism: (1) mean-impute from adjacent units if the missing rate is under 5% and the variable is stable (like elevation, not crime counts); (2) use spatial interpolation (kriging or inverse-distance weighting) for continuous variables—overkill for a single missing polygon, necessary for a patchy grid; (3) flag the missing units as structurally zero only if you have evidence they truly produce nothing (uninhabited industrial zones). Never use global mean imputation across the full study area—that flattens local variation and biases any spatial autocorrelation test. The worst pitfall: assuming missingness is random when it correlates with low income. That biases your metric downward, and you won't see it.

Can I compare inequality metrics across regions with different scales?

Not without adjustments—and the adjustment isn't obvious. A Gini coefficient computed on 50 counties behaves differently than one computed on 5,000 census blocks. Smaller units almost always produce higher inequality scores because variance expands as granularity increases. I have seen a national report compare state-level Ginis to city-level Ginis and conclude the city is more unequal. It wasn't. The city just used finer polygons.

The fix: normalize by the number of spatial units or use a scale-adjusted version like the spatial Gini (which accounts for unit area). For Moran's I, the comparison problem flips—different scales produce different expected values under randomness, so a score of 0.3 in a large-county study is not equivalent to 0.3 in a block-group study. Best practice is to report the z-score and pseudo-p-value from a permutation test instead of the raw Moran's I value. That strips out scale effects. Or, more brutally, restrict your comparison to regions with similar unit counts and area distributions. Not elegant. But honest.

Share this article:

Comments (0)

No comments yet. Be the first to comment!