Equity measures

A central question in transportation research and practice involves assessing how the accessibility benefits of transportation systems and projects are distributed across different socioeconomic and demographic groups. Transportation equity concerns are fundamentally related to two types of issues: (1) accessibility inequality and (2) accessibility poverty. In this section you will learn how to use the {accessibility} package to calculate different indicators of accessibility inequality and poverty. logo

In a recent paper, we discussed the advantages and disadvantages of various inequality and poverty metrics most commonly used in the transport literature (Karner, Pereira, and Farber 2024) - ungated PDF here. The slides below give a very short summary of some ideas discussed in the paper. Just enough to follow this workshop section. Nonetheless, I would strongly recommend reading the whole paper.

In this section, we’ll be using a couple sample data sets for the city of Belo Horizonte (Brazil), which come with the {accessibility} package. In the code chunk below, we read the travel time matrix and land use data, and calculate the average number of jobs accessible in 30 by public transport.

library(accessibility)
library(ggplot2)
library(dplyr)

# path to data
data_dir <- system.file("extdata", package = "accessibility")

# read travel matrix and land use data
ttm <- readRDS(file.path(data_dir, "travel_matrix.rds"))
lud <- readRDS(file.path(data_dir, "land_use_data.rds"))

# calculate threshold-based cumulative access
access_df <- cumulative_cutoff(
  travel_matrix = ttm,
  land_use_data = lud,
  opportunity = "jobs",
  travel_cost = "travel_time",
  cutoff = 30
  )

head(access_df)
                id  jobs
            <char> <int>
1: 89a881a5a2bffff 14561
2: 89a881a5a2fffff 29452
3: 89a881a5a67ffff 16647
4: 89a881a5a6bffff 10700
5: 89a881a5a6fffff  6669
6: 89a881a5b03ffff 37029

🔎 Time for a quick visual inspection! We can merge our accessibility results with the land use/population data, and visualize how employment accessibility is distributed across different income groups.

# merge acces and land use data
df <- access_df |>
      rename(jobs_access = jobs) |>
      left_join(lud, by='id')

# remove spatial units with no population
df <- filter(df, population > 0)

# box plot
ggplot(data = df) +
  geom_boxplot(show.legend = FALSE,
               aes(x = income_decile, 
                   y = jobs_access / 1000, 
                   weight = population, 
                   color = income_decile)) +
  scale_colour_brewer(palette = 'RdBu') + 
  labs(subtitle = 'Number of jobs accessible in 30 minutes by public transport',
       x = 'Income decile', y = 'Jobs (in thousands)') +
  scale_x_discrete(labels = c("D1\npoorest", 
                              paste0("D", 2:9), 
                              "D10\nwealthiest")) +
  theme_minimal()

The box plot shows a very uneven distribution of access to job opportunities. Now let’s check what we can learn about accessibility inequality and poverty in this region with a few examples.

A detailed explanation of all inequality and poverty measures covered in {accessibility} are available in the package documentation.

Inequality measures

Palma ratio

The Palma ratio is calculated as the average access of the richest 10% divided by the average access of the poorest 40%. Palma Ratio values higher than 1 indicate that the wealthiest population has higher accessibility levels than the poorest, whereas values lower than 1 indicate the opposite situation.

In the example here, we see that the wealthiest population can access on average 3.8 times more jobs than the poor population.

palma <- palma_ratio(
  accessibility_data = access_df,
  sociodemographic_data = lud,
  opportunity = "jobs",
  population = "population",
  income = "income_per_capita"
  )

palma
   palma_ratio
         <num>
1:    3.800465

Concentration index

The concentration index (CI) estimates the extent to which accessibility inequalities are systematically associated with individuals’ socioeconomic levels. CI values can theoretically vary between -1 and 1 (when all accessibility is concentrated in the most or in the least disadvantaged person, respectively). Negative values indicate that inequalities favor the poor, while positive values indicate a pro-rich bias.

ci <- accessibility::concentration_index(
  accessibility_data = access_df,
  sociodemographic_data = lud,
  opportunity = "jobs",
  population = "population",
  income = "income_per_capita",
  type = "corrected"
  )

ci
   concentration_index
                 <num>
1:           0.3346494

Gini index

You probably shouldn’t use the Gini index to measure accessibility inequality (see Karner, Pereira, and Farber 2024).

Accessibility poverty

Foster-Greer-Thorbecke (FGT) poverty measures

The fgt_poverty() function calculates the FGT metrics, a family of poverty measures originally proposed by Foster, Greer, and Thorbecke (1984), and which that can be used to capture the extent and severity of poverty within an accessibility distribution. The FGT family is composed of three measures:

  • FGT0: it captures the extent of poverty as a simple headcount - i.e. the proportion of people below the poverty line;
  • FGT1: also know as the “poverty gap index”, it captures the severity of poverty as the average percentage distance between the poverty line and the accessibility of individuals below the poverty line;
  • FGT2: it simultaneously captures the extent and the severity of poverty by calculating the number of people below the poverty line weighted by the size of the accessibility shortfall relative to the poverty line.

This function includes an additional poverty_line parameter, used to define the poverty line below which individuals are considered to be in accessibility poverty. For the sake of this exercise, we’ll consider the lowest 25th percentile of access as our poverty line, which in this example is approximately 23 thousand jobs.

Quick reminder that the definition of an accessibility poverty line is ultimately a moral and political decision and not simply an empirical or technical question (Pereira, Schwanen, and Banister 2017; Lucas et al. 2019).

# get the 25th percentile of access
quant25 <- quantile(access_df$jobs, .25)

poverty <- fgt_poverty(
  accessibility_data =  access_df,
  sociodemographic_data = lud,
  opportunity = "jobs",
  population = "population",
  poverty_line = quant25
  )

poverty
        FGT0       FGT1       FGT2
       <num>      <num>      <num>
1: 0.1478675 0.04948043 0.02862334

Quick interpretation:

  • FGT0: 14.8% of the population are in accessibility poverty
  • FGT1: the accessibility of those living in accessibility poverty is on average 5% lower than the poverty line
  • FGT2: it has no clear interpretation, but one could say that the overall poverty level/intensity is 2.8%.

References

Foster, James, Joel Greer, and Erik Thorbecke. 1984. “A Class of Decomposable Poverty Measures.” Econometrica 52 (3): 761–66. https://doi.org/10.2307/1913475.
Karner, Alex, Rafael H. M. Pereira, and Steven Farber. 2024. “Advances and Pitfalls in Measuring Transportation Equity.” Transportation, January. https://doi.org/10.1007/s11116-023-10460-7.
Lucas, Karen, Karel Martens, Floridea Di Ciommo, and Ariane Dupont-Kieffer. 2019. Measuring Transport Equity. Elsevier.
Pereira, Rafael H. M., Tim Schwanen, and David Banister. 2017. “Distributive Justice and Equity in Transportation.” Transport Reviews 37 (2): 170–91. https://doi.org/10.1080/01441647.2016.1257660.