Ask

What is the magnitude of the CEO–worker pay gap among selected large low-wage employers, and what does this imply for fairness, worker well-being, and organizational ethics?

We focus on:

Data source

This dataset is manually created from public reporting on CEO pay, median worker pay, and CEO-to-worker pay ratios for selected large low-wage employers.

library(tidyverse)

df <- read_csv("data/ips_low_wage_100.csv")

df
## # A tibble: 5 × 4
##   company               ceo_pay worker_pay pay_ratio
##   <chr>                   <dbl>      <dbl>     <dbl>
## 1 Average Low-Wage 100 17200000      35570       632
## 2 Starbucks            95800000      15000      6666
## 3 Walmart              25600000      27000       948
## 4 McDonalds            20000000      14000      1428
## 5 Target               19000000      25000       760

Process

The dataset is prepared by converting pay values and ratios into numeric format so they can be analyzed and visualized without errors.

df <- df %>%
  mutate(
  ceo_pay = as.numeric(ceo_pay), worker_pay = as.numeric(worker_pay), pay_ratio = as.numeric(pay_ratio)
)

df
## # A tibble: 5 × 4
##   company               ceo_pay worker_pay pay_ratio
##   <chr>                   <dbl>      <dbl>     <dbl>
## 1 Average Low-Wage 100 17200000      35570       632
## 2 Starbucks            95800000      15000      6666
## 3 Walmart              25600000      27000       948
## 4 McDonalds            20000000      14000      1428
## 5 Target               19000000      25000       760

Analyze

We analyze the CEO-to-worker pay gap by summarizing key statistics, identifying extreme values, and comparing CEO pay to worker pay across the sample.

summary(df)
##    company             ceo_pay           worker_pay      pay_ratio   
##  Length:5           Min.   :17200000   Min.   :14000   Min.   : 632  
##  Class :character   1st Qu.:19000000   1st Qu.:15000   1st Qu.: 760  
##  Mode  :character   Median :20000000   Median :25000   Median : 948  
##                     Mean   :35520000   Mean   :23314   Mean   :2087  
##                     3rd Qu.:25600000   3rd Qu.:27000   3rd Qu.:1428  
##                     Max.   :95800000   Max.   :35570   Max.   :6666
df %>%
  arrange(desc(pay_ratio)) %>%
  slice(1)
## # A tibble: 1 × 4
##   company    ceo_pay worker_pay pay_ratio
##   <chr>        <dbl>      <dbl>     <dbl>
## 1 Starbucks 95800000      15000      6666
df %>%
  arrange(pay_ratio) %>%
  slice(1)
## # A tibble: 1 × 4
##   company               ceo_pay worker_pay pay_ratio
##   <chr>                   <dbl>      <dbl>     <dbl>
## 1 Average Low-Wage 100 17200000      35570       632
df %>%
  summarise(
    avg_ceo_pay = mean(ceo_pay),
    avg_worker_pay = mean(worker_pay),
    avg_ratio = mean(pay_ratio)
  )
## # A tibble: 1 × 3
##   avg_ceo_pay avg_worker_pay avg_ratio
##         <dbl>          <dbl>     <dbl>
## 1    35520000          23314     2087.
df %>%
  mutate(multiplier = ceo_pay / worker_pay) %>%
  summarise(avg_multiplier = mean(multiplier))
## # A tibble: 1 × 1
##   avg_multiplier
##            <dbl>
## 1          2001.
df %>%
  summarise(
    ratio_range = max(pay_ratio) - min(pay_ratio),
    ceo_pay_range = max(ceo_pay) - min(ceo_pay),
    worker_pay_range = max(worker_pay) - min(worker_pay)
  )
## # A tibble: 1 × 3
##   ratio_range ceo_pay_range worker_pay_range
##         <dbl>         <dbl>            <dbl>
## 1        6034      78600000            21570

Share

We communicate the results of the analysis using visualizations and simple summaries that highlight the scale of the CEO‑to‑worker pay gap and identify the most extreme cases.

ggplot(df, aes(pay_ratio)) +
  geom_histogram(bins = 10, fill = "steelblue", color = "white") +
  labs(
    title = "Distribution of CEO-to-Worker Pay Ratios",
    x = "CEO-to-Worker Pay Ratio",
    y = "Number of Companies"
  )

df %>%
  arrange(desc(pay_ratio)) %>%
  head(5)
## # A tibble: 5 × 4
##   company               ceo_pay worker_pay pay_ratio
##   <chr>                   <dbl>      <dbl>     <dbl>
## 1 Starbucks            95800000      15000      6666
## 2 McDonalds            20000000      14000      1428
## 3 Walmart              25600000      27000       948
## 4 Target               19000000      25000       760
## 5 Average Low-Wage 100 17200000      35570       632
ggplot(df, aes(x = reorder(company, pay_ratio), y = pay_ratio)) +
  geom_col(fill = "firebrick") +
  coord_flip() +
  labs(
    title = "Highest CEO-to-Worker Pay Ratios (Sample)",
    x = "Company",
    y = "Pay Ratio"
  )

The visualizations highlight how uneven the CEO‑to‑worker pay ratios are across this sample. The histogram shows a distribution that is heavily skewed to the right, with most companies clustered in the lower hundreds while one company sits far beyond the rest. The ranked table and bar chart make this pattern even clearer: Starbucks stands out as a major outlier with a ratio above 6,600:1, while the remaining companies fall between roughly 600:1 and 1,400:1. These visuals help illustrate not only the magnitude of the gap but also how a single extreme value can shape the overall picture. Together, they provide a straightforward way to compare companies and understand where the most significant disparities occur.

Act

We interpret the results and outline the implications of the CEO‑to‑worker pay gap based on the analysis and visualizations.

The analysis and visualizations show a substantial imbalance between CEO compensation and median worker pay, even within this small dataset. The extreme outlier at the top of the distribution raises questions about how executive compensation is determined and whether it aligns with organizational values and stakeholder expectations. Large gaps like these can influence employee morale, retention, and perceptions of fairness, especially in industries that rely heavily on frontline labor. They also create reputational and regulatory risks as pay transparency becomes more common. Organizations facing these disparities may need to reassess how executive pay is structured, consider raising wage floors for workers, and strengthen transparency around compensation decisions. Addressing these gaps can support a more equitable and sustainable approach to compensation.