What is the Area Deprivation Index (ADI)?

“The Area Deprivation Index (ADI) is based on a measure created by the Health Resources & Services Administration (HRSA) over two decades ago for primarily county-level use, but refined, adapted, and validated to the Census block group/neighborhood level by Amy Kind, MD, PhD and her research team at the University of Wisconsin-Madison. It allows for rankings of neighborhoods by socioeconomic status disadvantage in a region of interest (e.g. at the state or national level).” https://www.neighborhoodatlas.medicine.wisc.edu

“The ADI, which is a composite measure of 17 census variables designed to describe socioeconomic disadvantage based on income, education, household characteristics, and housing.” https://www.cdc.gov/pcd/issues/2016/16_0221.htm

The ADI scores shown here identify areas where deprivation and affluence exist within communities in Connecticut.

Organizations implementing Overdose, HIV and Hep C prevention interventions can use this information to identify high deprivation areas in Connecticut.

It is recommended for organizations in Connecticut to focus their Overdose, HIV and Hep C prevention efforts in high level deprivation areas.

How to to interpret ADI scores?
ADI interpretation:
A low ADI score indicates affluence or prosperity.
A high ADI score is indicative of high levels of deprivation.

Here are the steps for identifying areas of deprivation and affluence in Connecticut using the {sociome} R package. The {sociome} package aims to help the user to operationalize social determinants of health data in their research.

  1. If you have not installed the {sociome} package, remove the # to install package.
# install.packages("sociome")
  1. Upload {tidyverse} and {sociome} packages.
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(sociome)
  1. Let’s view the ADIs scores for Connecticut’s counties using 5-year ACS estimates census data.
# Get ADI scores for counties
ct_counties<-get_adi(geography = "county", 
                     state = "CT", 
                     year = 2019, 
                     dataset = "acs5", 
                     geometry = TRUE)
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2015-2019 5-year ACS
## Warning in calculate_adi(raw_data, keep_indicators = keep_indicators, seed = seed): 
## Calculating ADI and ADI-3 values from fewer than 30 locations.
## It is recommended to add more in order to obtain trustworthy results.
## Warning in cor.smooth(r): Matrix was not positive definite, smoothing was done
## Warning in psych::principal(indicators_hh_only[names(expected_signs)]): The
## matrix is not positive semi-definite, scores found from Structure loadings
# Plot ADI score map for counties
ct_counties %>% 
  ggplot() + 
  geom_sf(aes(fill = ADI)) +
  ggtitle("ADIs scores for Connecticut's counties") +
  theme(axis.title=element_text(size=18,face="bold"))

4) To view the 5-year ACS census data estimates in a tibble format use the following code:

# Get 5-year ACS estimates using census data for counties
get_adi(geography = "county", state = "CT", year = 2019, dataset = "acs5")
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2015-2019 5-year ACS
## Warning in calculate_adi(raw_data, keep_indicators = keep_indicators, seed = seed): 
## Calculating ADI and ADI-3 values from fewer than 30 locations.
## It is recommended to add more in order to obtain trustworthy results.
## Warning in cor.smooth(r): Matrix was not positive definite, smoothing was done
## Warning in psych::principal(indicators_hh_only[names(expected_signs)]): The
## matrix is not positive semi-definite, scores found from Structure loadings
## # A tibble: 8 × 6
##   GEOID NAME                       ADI Financial_Strength Economic_Hardship_an…¹
##   <chr> <chr>                    <dbl>              <dbl>                  <dbl>
## 1 09001 Fairfield County, Conne… 133.               141.                   102. 
## 2 09003 Hartford County, Connec… 239.                95.3                  118. 
## 3 09005 Litchfield County, Conn… -65.2               94.1                   75.1
## 4 09007 Middlesex County, Conne… -82.5              109.                    79.5
## 5 09009 New Haven County, Conne… 301.                94.9                  128. 
## 6 09011 New London County, Conn… 131.                90.5                  106. 
## 7 09013 Tolland County, Connect… -90.8              105.                    79.0
## 8 09015 Windham County, Connect… 234.                70.6                  112. 
## # ℹ abbreviated name: ¹​Economic_Hardship_and_Inequality
## # ℹ 1 more variable: Educational_Attainment <dbl>

ADI scores for each county in Connecticut

  1. Hartford county census tract-level ADI scores.
# Get ADI scores for Hartford county
Hartford_county <- 
  get_adi(
    "tract",
    state = "Connecticut",
    county = "Hartford",
    year = 2019,
    dataset = "acs5",
    geometry = TRUE,
    keep_indicators = TRUE
  )
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2015-2019 5-year ACS
## 
## Single imputation performed
# Plot ADI scores map for Hartford county
Hartford_county %>% 
  ggplot() +
  geom_sf(aes(fill = ADI)) + 
  scale_fill_viridis_c(direction = -1, na.value = "gray") +
  ggtitle("Hartford county census tract-level ADI scores") +
  theme(axis.title=element_text(size=18,face="bold"))

  1. New Haven county census tract-level ADI scores.
# Get ADI scores for New Haven county
NewHaven_county <- 
  get_adi(
    "tract",
    state = "Connecticut",
    county = "New Haven",
    year = 2019,
    dataset = "acs5",
    geometry = TRUE,
    keep_indicators = TRUE
  )
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2015-2019 5-year ACS
## 
## Single imputation performed
# Plot ADI scores map for New Haven county
NewHaven_county %>% 
  ggplot() +
  geom_sf(aes(fill = ADI)) + 
  scale_fill_viridis_c(direction = -1, na.value = "gray") +
  ggtitle("New Haven county census tract-level ADI scores") +
  theme(axis.title=element_text(size=18,face="bold"))

  1. Fairfield county census tract-level ADI scores.
# Get ADI scores for Fairfield county
Fairfield_county <- 
  get_adi(
    "tract",
    state = "Connecticut",
    county = "Fairfield",
    year = 2015,
    dataset = "acs5",
    geometry = TRUE,
    keep_indicators = TRUE
  )
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2011-2015 5-year ACS
## Warning: Number of logged events: 50
## 
## Single imputation performed
# Plot ADI scores map for Fairfield county
Fairfield_county %>% 
  ggplot() +
  geom_sf(aes(fill = ADI)) + 
  scale_fill_viridis_c(direction = -1, na.value = "gray") +
  ggtitle("Fairfield county census tract-level ADI scores") +
  theme(axis.title=element_text(size=18,face="bold"))

  1. Litchfield county census tract-level ADI scores.
# Get ADI scores for Litchfield county
Litchfield_county <- 
  get_adi(
    "tract",
    state = "Connecticut",
    county = "Litchfield",
    year = 2019,
    dataset = "acs5",
    geometry = TRUE,
    keep_indicators = TRUE
  )
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2015-2019 5-year ACS
## 
## Single imputation performed
# Plot ADI scores map for Litchfield county
Litchfield_county %>% 
  ggplot() +
  geom_sf(aes(fill = ADI)) + 
  scale_fill_viridis_c(direction = -1, na.value = "gray") +
  ggtitle("Litchfield county census tract-level ADI scores") +
  theme(axis.title=element_text(size=18,face="bold"))

  1. Middlesex county census tract-level ADI scores.
# Get ADI scores for Middlesex county
Middlesex_county <- 
  get_adi(
    "tract",
    state = "Connecticut",
    county = "Middlesex",
    year = 2019,
    dataset = "acs5",
    geometry = TRUE,
    keep_indicators = TRUE
  )
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2015-2019 5-year ACS
## 
## Single imputation performed
# Plot ADI scores map for Middlesex county
Middlesex_county %>% 
  ggplot() +
  geom_sf(aes(fill = ADI)) + 
  scale_fill_viridis_c(direction = -1, na.value = "gray") +
  ggtitle("Middlesex county census tract-level ADI scores") +
  theme(axis.title=element_text(size=18,face="bold"))

  1. New London county census tract-level ADI scores.
# Get ADI scores for New London county
NewLondon_county <- 
  get_adi(
    "tract",
    state = "Connecticut",
    county = "New London",
    year = 2019,
    dataset = "acs5",
    geometry = TRUE,
    keep_indicators = TRUE
  )
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2015-2019 5-year ACS
## 
## Single imputation performed
# Plot ADI scores map for New London county
NewLondon_county %>% 
  ggplot() +
  geom_sf(aes(fill = ADI)) + 
  scale_fill_viridis_c(direction = -1, na.value = "gray") +
  ggtitle("New London county census tract-level ADI scores") +
  theme(axis.title=element_text(size=18,face="bold"))

  1. Tolland county census tract-level ADI scores.
# Get ADI scores for Tolland county
Tolland_county <- 
  get_adi(
    "tract",
    state = "Connecticut",
    county = "Tolland",
    year = 2012,
    dataset = "acs5",
    geometry = TRUE,
    keep_indicators = TRUE
  )
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2008-2012 5-year ACS
## Warning in calculate_adi(raw_data, keep_indicators = keep_indicators, seed = seed): 
## Calculating ADI and ADI-3 values from fewer than 30 locations.
## It is recommended to add more in order to obtain trustworthy results.
## Warning: Number of logged events: 100
## 
## Single imputation performed
# Plot ADI scores map for Tolland county
Tolland_county %>% 
  ggplot() +
  geom_sf(aes(fill = ADI)) + 
  scale_fill_viridis_c(direction = -1, na.value = "gray") +
  ggtitle("Tolland county census tract-level ADI scores") +
  theme(axis.title=element_text(size=18,face="bold"))

  1. Windham county census tract-level ADI scores.
# Get ADI scores for Windham county
Windham_county <- 
  get_adi(
    "tract",
    state = "Connecticut",
    county = "Windham",
    year = 2015,
    dataset = "acs5",
    geometry = TRUE,
    keep_indicators = TRUE
  )
## 
## 1 call(s) to tidycensus beginning.
## Getting data from the 2011-2015 5-year ACS
## Warning in calculate_adi(raw_data, keep_indicators = keep_indicators, seed = seed): 
## Calculating ADI and ADI-3 values from fewer than 30 locations.
## It is recommended to add more in order to obtain trustworthy results.
## 
## Single imputation performed
# Plot ADI scores map for Windham county
Windham_county %>% 
  ggplot() +
  geom_sf(aes(fill = ADI)) + 
  scale_fill_viridis_c(direction = -1, na.value = "gray") +
  ggtitle("Windham county census tract-level ADI scores") +
  theme(axis.title=element_text(size=18, face="bold"))

Now, let’s view the entire State of Connecticut by census tract-level ADI scores.

# Get ADI scores for Connecticut's census tracts
ct_census_tract <- get_adi("tract", 
                           state = "CT", 
                           year = 2019, 
                           dataset = "acs5", 
                           geometry = TRUE, 
                           keep_indicators = TRUE)
## 
## Preliminary tidycensus call beginning...
## Getting data from the 2015-2019 5-year ACS
## 
## 8 call(s) to tidycensus beginning.
## Getting data from the 2015-2019 5-year ACS
## Getting data from the 2015-2019 5-year ACS
## Getting data from the 2015-2019 5-year ACS
## Getting data from the 2015-2019 5-year ACS
## Getting data from the 2015-2019 5-year ACS
## Getting data from the 2015-2019 5-year ACS
## Getting data from the 2015-2019 5-year ACS
## Getting data from the 2015-2019 5-year ACS
## 
## Single imputation performed
# Plot ADI scores map for Connecticut's census tracts
ct_census_tract %>% 
  ggplot() +
  geom_sf(aes(fill = ADI)) + 
  scale_fill_viridis_c(direction = -1, na.value = "gray") +
  ggtitle("Connecticut's census tract-level ADI scores") +
  theme(axis.title=element_text(size=18, face="bold"))

In conclusion, if you need assistance interpreting this information, please contact the author of this presentation.

Special thanks to the authors/developers of the {sociome} package: https://cran.r-project.org/web/packages/sociome/index.html

Disclaimer. All presentation contents are the responsibility of the author and do not represent the official views of any organization.