Project Report

Author

Daniel Fisher, Zain Hoda

Published

December 8, 2024

Introduction:

As Electric Vehicles (EVs) continue to gain popularity and prominence in the automotive market, it is crucial to examine their accessibility and impact across disadvantaged groups. This study aims to investigate the affordability and adoption of EVs in disadvantaged communities, addressing the following key question: What barriers exist that prevent widespread EV accessibility in disadvantaged communities? EVs are projected to make up for over a quarter of total car sales in the next ten years.(Plumber, 2021). Although there is this considerable rise, there are disparities in EV charging station access and availability in general. Public electric vehicle charging stations are disproportionately located in areas associated with higher income groups. (Jaio, 2024). It is essential to find out where these issues lie now as the amount of EVs on the road will only continue to increase.

Our findings suggest that there is low adoption of EVs due to lack of availability of affordable EVs.

Research Question:

What barriers exist that may prevent widespread EV accessibility in disadvantaged communities?

  • What has been the growth in Electric Vehicle dealerships in US?
  • What was the EV inventory growth compared to Conventional vehicles?
  • What is the accessibility of EV’s based on income and availability?

Data Sources:

  1. Climate and Economic Justice Screening Tool Dataset (CEJST) is the official data source used by Federal agencies to identify Disadvantaged communities. This dataset has been downloaded from the official CEJST website. (Link)

  2. Vehicle listing dataset provided by marketcheck.com. This dataset contains information about all Vehicle Dealerships in the US and their inventories. It is available as a Parquet file. Fellow researchers at George Washington University investigating EV usage in the US preprocessed this dataset.

  3. Census Bureau relationship files connecting 2010 census tracts to 2020 census tracts. These can been downloaded as a text file from the US Census Bureau website. (Link)

Context behind geographical region choices:

We have population data at a Census Tract level but for visualization purposes, we are restricting ourselves to a broader geographical level data. The rationale behind this approach is that individuals are not restricted to their census tracts while purchasing cars and it is known that individuals are generally willing to drive a couple of hours to get the best deal and they shop around in multiple dealerships before making a purchase. We are using a driving time duration of 2 hours from the geographical center of each census tract to calculate the accessible dealerships for individual census tracts. The choice of driving duration instead of physical distance eliminates the disparities between heavily populated urban clusters and sparsely populated rural ones. The choice of ZEV States vs Non-ZEV states turned out to be the most logical one as these states require car manufacturers to sell a certain number of zero emission cars. California was futher seperated out from the ZEV group because it is an outlier and that will be apparent from the data.

1) Growth of EV Dealerships across US over the years:

getting_all_counts %>% 
  filter(!listing_year == '2022-01-01') %>% 
  filter(class == 'all') %>% 
  filter(DAC == 'all') %>% 
  #filter(Region %in% c('ZEV','Non-ZEV')) %>% 
  ggplot(aes(x = listing_year , y = perc, group= Region, color = Region)) +
  geom_line()+
  geom_point()+
  geom_text_repel(
    data = . %>% group_by(Region)
      %>% filter(listing_year == sort(unique(listing_year))[length(unique(listing_year))-1]),
    #aes(label = Region),
      aes(label = Region,
        hjust = case_when(
          Region == "CA" ~ 3.5,
          Region == "ZEV" ~ 2.5,
          TRUE ~ 1.1
        ),
        vjust = case_when(
          Region == "CA" ~ 2.5,
          Region == "ZEV" ~ -1.5,
          TRUE ~ 2.5
        ),
      ),
    direction = "y",
    #hjust = 2.0,
    segment.color = "grey", # This makes the connecting lines grey
    #segment.alpha = 0.9,     # This makes them slightly transparent
    segment.linetype = "dotted"  # This makes the connecting lines dotted
  ) +
  theme_minimal()+
  theme(legend.position = "none") + # Remove the legend since we're using direct labels
  #facet_wrap(~ Region)+
  labs(x = "Listing Year",
       y = "Percantage of EV Dealers  ", 
       subtitle = "Percentage of total dealers selling EV's per year for all US ZEV regions and California "
  )+
  #scale_color_manual(values = c(color_cv, color_tesla)) +
  scale_color_manual(values = plotColors) +
  scale_y_continuous(limits = c(0, max(getting_all_counts$perc)))+
  scale_x_date(date_breaks = "1 year", date_labels = "%Y")

Insights:

  • The above graph shows us that there has been clear growth in the number of dealerships selling EV vehicles. (Note - For a dealership to be considered as EV dealership, our condition was that it should have at least one BEV vehicle listed during that year )

Looking at variations based on Urban vs Rural and DAC vs Non-DAC

Code
getting_all_counts %>% 
  filter(!listing_year == '2022-01-01') %>% 
  filter(!class == 'all') %>% 
  filter(DAC == 'all') %>% 
  ggplot(aes(x = listing_year , y = perc, group= class, color = class)) +  #group= class, color = class
  geom_line()+
  geom_point()+
  theme_minimal()+
  theme(legend.position = "bottom") +
  facet_wrap(~Region, ncol = 3) +
  scale_color_discrete(name = "Class") +
  labs(x = "Listing Year",
       y = "Percantage of EV Dealers  ", 
       subtitle = "Percentage of total dealers selling EV's per year for ZEV, Non-ZEV states and
California divided by class  "
  )+
  scale_y_continuous(limits = c(0, max(getting_all_counts$perc)))

Code
getting_all_counts %>% 
  filter(!listing_year == '2022-01-01') %>% 
  filter(class == 'all') %>% 
  filter(!DAC == 'all') %>% 
  ggplot(aes(x = listing_year , y = perc, group= DAC, color = DAC)) +  #group= class, color = class
  geom_line()+
  geom_point()+
  theme_minimal()+
  theme(legend.position = "bottom") + 
  facet_wrap(~Region, ncol = 3) +
  scale_color_discrete(name = "Status") +
  labs(x = "Listing Year",
       y = "Percantage of EV Dealers  ", 
       subtitle = "Percentage of total dealers selling EV's per year for ZEV, Non-ZEV states and
California divided by DAC  "
  )+
  scale_y_continuous(limits = c(0, max(getting_all_counts$perc)))

getting_all_counts %>% 
  filter(!listing_year == '2022-01-01') %>% 
  filter(!class == 'all') %>% 
  filter(!DAC == 'all') %>% 
  #filter(Region %in% c('CA')) %>%  #
  ggplot(aes(x = listing_year , y = perc,group= DAC, color = DAC )) +  #group= class, color = class
  geom_line()+
  geom_point()+
  theme_minimal()+
  theme(legend.position = "bottom") +
  #facet_wrap(~class, ncol = 3) +
  scale_color_discrete(name = "Status") +
  facet_grid(class ~ Region)+
  labs(x = "Listing Year",
       y = "Percantage of EV Dealers  ", 
       subtitle = "Percentage of total dealers selling EV's per year"
  )+
  scale_y_continuous(limits = c(0, max(getting_all_counts$perc)))

Insights:

  • The first graph (Variations w.r.t Class) shows that there is negligible difference between the Urban, Sub-urban and Rural communities as far as access to EV dealerships are concerned for both ZEV and Non-ZEV states.
  • The second graph (Variations w.r.t DAC) shows that there is negligible difference between DAC and Non-DAC communities as far as access to EV dealerships are concerned for both ZEV and Non-ZEV states.
  • The third graph (Variation w.r.t both DAC & Class) shows us that in general there are slightly lower percentages of EV Dealerships are rural area compared to Sub-Urban and Urban areas. Another interesting observation is that there is a slightly higher percentage of EV Dealerships in Non-DAC regions compared to DAC in Rural and Sub-Urban areas.

2) Availability of EV vehicles compared to Conventional Vehicles:

Code
cars_per_year %>% 
  filter(powertrain == 'conventional') %>% 
  #filter(price_band1 %in% c(1,2)) %>% 
  mutate(
    price_band = fct_reorder(price_band, price_band1),
    cars_per_capita = cars_per_capita*100, 
    date = ymd(paste0(listing_year, '01-01'))
  ) %>% 
  fix_powertrain_labels() %>% 
  ggplot(aes(x = date , y = cars_per_capita,
             color= powertrain , linetype = DAC))+  #, shape = DAC
  geom_point()+
  geom_line()+
  labs(x = "Car listing year",
       y = "Cars per 100,000 people", 
       title = "Availability of CV cars in U.S. across DAC vs Non-DAC regions",
       linetype = "Status"
  ) +
  facet_wrap(~price_band, nrow= 1) +
  theme_bw(base_family = 'Roboto Condensed') +
  theme(panel.grid.minor = element_blank()) +
  theme(legend.position = "bottom") + 
  guides(color = "none") +
  scale_x_date(date_labels = "'%y", date_breaks = '2 year') +
  scale_color_manual(values = color_cv)

Code
cars_per_year %>% 
  filter(!powertrain == 'conventional') %>% 
  #filter(price_band1 %in% c(1,2)) %>% 
  mutate(
    price_band = fct_reorder(price_band, price_band1),
    cars_per_capita = cars_per_capita*100, 
    date = ymd(paste0(listing_year, '01-01'))
  ) %>% 
  fix_powertrain_labels() %>% 
  ggplot(aes(x = date , y = cars_per_capita,
             color= powertrain , linetype = DAC))+  #, shape = DAC
  geom_point()+
  geom_line()+
  labs(x = "Car listing year",
       y = "Cars per 100,000 people", 
       title = "Availability of EV cars in U.S. across DAC vs Non-DAC regions",
       linetype = "Status"
  ) +
  facet_wrap(~price_band, nrow= 1) +
  #facet_grid(powertrain~price_band) +
  theme_bw(base_family = 'Roboto Condensed') +
  theme(panel.grid.minor = element_blank()) +
  theme(legend.position = "bottom") + 
  guides(color = "none") +
  scale_x_date(date_labels = "'%y", date_breaks = '2 year') +
  scale_color_manual(values = color_ev)

Insights:

  • The first and the most important observation from the two graphs is the difference is the availability of Conventional and EV vehicles. The scale of difference of availability between each price band is such that for roughly every 1000 conventional vehicles, you will come across one 1 electric vehicle.
  • For both conventional and electric vehicles, the availability of cars is also changing over the years. The counts of lower priced cars (<20K) have decreased from 2019 to 2021 while the counts of higher priced cars (>30k) show a significant increase in the same time frame.

3) Accessibility of EV’s based on income and availability

Starting January 1, 2023, you could qualify for a used clean vehicle tax credit when purchasing a qualified used electric or fuel cell vehicle for $25,000 or less from a licensed dealer. At first this might seem like a great program but the fine print makes it nearly impossible for anyone below the top 10% of earners to claim it. Dr. Lujin Zhao provided us with list of dealers within a 2 hour range for each census tract in the country. With this we were able to match up our relevant dealer information to see how many qualified cars a person in a tract could purchase. By testing cumulative combinations of peoples income (relative to their census tract) and car prices, we are able to gather if a person can purchase a singular used 2 year old EV.

heatmap_table %>% 
  mutate(
    car_price = car_price / 10^3, 
    income = income / 10^3
  ) %>% 
  ggplot(aes(x = car_price, y = income, fill = p)) +
  geom_tile() +
  geom_tile(
    data = . %>% filter(car_price == 25 & income == 75),
    color = "black",
    size = 1,
    linewidth = 0.5
  ) +
  scale_fill_gradient2(
    low = "orange",
    high = "red",
    labels = scales::percent
  ) +
  scale_x_continuous(
    name = "Car Price Threshold ($1,000)",
    limits = c(20, 60),
    breaks = seq(20, 60, by = 5),
    labels = scales::dollar
  ) +
  scale_y_continuous(
    name = "Income Threshold ($1,000)",
    limits = c(20, 120),
    breaks = seq(20, 120, by = 20),
    labels = scales::dollar
  ) +
  theme_minimal(base_size = 12) +
  labs(
    title = "Percentage of Americans Qualifying for Used EV Subsidy",
    subtitle = paste(
      "Only", scales::percent(p_current, accuracy = 0.1), 
      "qualify under current policy (outlined box)"
    ),
    fill = "Percent Qualifying"
  ) +
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    plot.title = element_text(size = 16, face = "bold"),
    plot.subtitle = element_text(size = 12),
    axis.title = element_text(size = 12),
    axis.text = element_text(size = 10),
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 10)
  )

Conclusion:

The findings of this study highlight significant barriers to the adoption of electric vehicles (EVs) in disadvantaged communities, primarily due to the lack of affordable options and inequitable access to charging infrastructure. While the growth of EV dealerships shows promise, disparities in vehicle availability, particularly among lower-priced models, underscore the challenges faced by low-income households. Additionally, policies like tax credits for used EVs, while well-intentioned, are often inaccessible to the majority of earners, further exacerbating the issue. Addressing these gaps requires a combination of policy reform, increased investment in charging infrastructure in underserved areas, and initiatives to make EVs more affordable and accessible to all. Without these measures, the transition to a sustainable transportation system risks leaving marginalized communities behind.

Attribution:

All members contributed evenly.

Appendix :

Data Dictionaries:

Vehicle Listing Data:

Variable Description
Dealer ID Identifier of Vehicle Dealership
Inventory Type Vehicle Status (New / Used)
Price Sale price of the Vehicle
Powertrain Type of vehicle (Conventional, Hybrid, Plug-in Hybrid or Battery Electric Vehicle)
Vehicle Type Car, SUV, Pickup
Listing_Year Listing Year of Vehicle

Travel Distance Data:

Variable Description
GEOID US 2010 Census Tract Identifier
dealer_Id Identifier of Vehicle Dealership
travel_time Travel time from the cenroid of a Census Tract to a dealership
Distance Distance (in miles) from the cenroid of a Census Tract to a dealership

Census Data:

Variable Description
GEOID US 2010 Census Tract Identifier
State State Abbreviation
pop_over25 Population of Census Tract over the age of 25
med_inc_hh Median household income of Census Tract
pop Population of Census Tract
ZEV Zero emission mandate identifer
Class Urban, Sub-Urban or Rural

CEJST Data:

Variable Description
Census Tract ID US 2010 Census Tract Identifier
DAC Disadvantaged Community identifier
Total Population Population of Census Tract
County Name County Name
State State Abbreviation