Over the past few weeks, an analysis of the U.S. Census Bureau’s most
recent American Community Survey has been conducted to study the
fastest-growing counties in Tennessee’s midstate area, along with the
counties in this area that have the highest density of residents per
square mile. A report on the fastest-growing counties in the midstate is
available here, while
a report on the counties ranked by density is available here.
For this report, the same data was used — but at a statewide level — to
analyze the estimate of children living in poverty in all Tennessee
counties, ranked from highest to lowest.
The table below ranks the percentage of children living in poverty
for all 95 Tennessee counties, using the most recent results of the U.S.
Census Bureau’s American Community Survey. The results show the county
with the highest rate of child poverty is Lake County, which is located
in the extreme northwest corner of Tennessee bordered by Kentucky to the
north and the Mississippi River to the west. Lake County’s estimated
child poverty rate is 49.7%.
On the other end of the spectrum is Williamson County in Middle
Tennessee, which is an affluent suburb of Davidson County. It is one of
the “doughnut counties,” those which share a border with Davidson
County, home of Nashville, in the midstate. The estimate of children
living in poverty in Williamson County is 4.8%. It’s worth noting that
Williamson County is ranked as the
fastest-growing county in the midstate area of Tennessee.
| County | Child Poverty Rate (%) | Margin of Error (+/- percentage points) |
|---|---|---|
| Lake County | 49.7 | 11.9 |
| Pickett County | 44.9 | 17.2 |
| Hancock County | 42.3 | 11.9 |
| Johnson County | 39.9 | 12.3 |
| Cocke County | 37.8 | 7.2 |
| Haywood County | 32.4 | 8.3 |
| Perry County | 32.1 | 13.5 |
| Bledsoe County | 32.0 | 8.6 |
| Hardeman County | 29.1 | 8.4 |
| Lauderdale County | 28.8 | 6.6 |
| Sequatchie County | 28.6 | 9.1 |
| Henry County | 27.9 | 6.3 |
| Cannon County | 27.8 | 10.1 |
| Madison County | 27.6 | 4.1 |
| DeKalb County | 27.1 | 7.6 |
| Scott County | 26.9 | 6.9 |
| Shelby County | 26.6 | 1.5 |
| Decatur County | 26.1 | 8.9 |
| Hardin County | 26.1 | 5.8 |
| Sullivan County | 26.0 | 3.3 |
| Clay County | 25.6 | 12.6 |
| Jackson County | 25.5 | 9.4 |
| Loudon County | 25.5 | 6.5 |
| Weakley County | 25.1 | 5.6 |
| Fentress County | 24.9 | 8.2 |
| Putnam County | 24.7 | 4.0 |
| Crockett County | 24.6 | 7.0 |
| Hamblen County | 24.5 | 4.8 |
| Grainger County | 24.4 | 6.3 |
| Macon County | 24.0 | 6.9 |
| Stewart County | 23.3 | 9.1 |
| Van Buren County | 23.0 | 13.2 |
| Coffee County | 22.9 | 4.4 |
| Bedford County | 22.8 | 5.0 |
| Cumberland County | 22.7 | 6.8 |
| Carter County | 22.5 | 4.9 |
| Obion County | 22.5 | 4.4 |
| Carroll County | 22.0 | 6.2 |
| Benton County | 21.7 | 6.3 |
| Humphreys County | 21.2 | 7.4 |
| Campbell County | 21.1 | 5.3 |
| Davidson County | 20.9 | 1.6 |
| Grundy County | 20.8 | 7.4 |
| Marion County | 20.8 | 6.6 |
| Wayne County | 20.6 | 6.4 |
| Dyer County | 20.5 | 4.7 |
| Trousdale County | 20.4 | 9.5 |
| Warren County | 20.4 | 5.3 |
| Morgan County | 20.3 | 6.7 |
| Unicoi County | 20.3 | 9.4 |
| Claiborne County | 20.2 | 6.3 |
| Giles County | 20.2 | 6.1 |
| Hamilton County | 20.2 | 1.9 |
| Greene County | 20.1 | 5.3 |
| Overton County | 20.1 | 6.7 |
| Henderson County | 19.9 | 5.9 |
| Tipton County | 19.8 | 3.7 |
| Monroe County | 19.3 | 5.6 |
| Sevier County | 18.9 | 3.6 |
| Franklin County | 18.8 | 5.2 |
| Chester County | 18.7 | 5.0 |
| Rhea County | 18.5 | 5.3 |
| McNairy County | 17.9 | 5.6 |
| Fayette County | 17.8 | 6.2 |
| Hawkins County | 17.7 | 3.6 |
| McMinn County | 17.4 | 4.2 |
| Washington County | 17.4 | 3.8 |
| White County | 16.9 | 6.7 |
| Anderson County | 16.7 | 4.0 |
| Lawrence County | 16.7 | 4.0 |
| Lincoln County | 16.6 | 5.9 |
| Bradley County | 16.3 | 3.0 |
| Gibson County | 16.1 | 4.5 |
| Jefferson County | 15.9 | 4.8 |
| Roane County | 15.9 | 4.4 |
| Union County | 15.6 | 4.2 |
| Robertson County | 14.7 | 3.5 |
| Marshall County | 14.6 | 5.0 |
| Dickson County | 14.5 | 3.9 |
| Montgomery County | 14.4 | 1.9 |
| Knox County | 13.9 | 1.5 |
| Polk County | 13.5 | 3.8 |
| Hickman County | 13.1 | 4.8 |
| Maury County | 12.8 | 3.2 |
| Sumner County | 12.4 | 2.0 |
| Lewis County | 11.0 | 8.2 |
| Meigs County | 10.9 | 5.7 |
| Rutherford County | 10.7 | 1.4 |
| Cheatham County | 9.7 | 3.6 |
| Wilson County | 9.7 | 1.9 |
| Blount County | 9.4 | 2.1 |
| Smith County | 8.7 | 4.0 |
| Houston County | 8.4 | 5.5 |
| Moore County | 8.0 | 5.9 |
| Williamson County | 4.8 | 1.1 |
The American Community Survey uses a random sampling method to produce the data, based on the 2024 five-year estimates. As such, the results include a margin of error, which is shown in the far right column of the table above. In a nutshell, this means margin of error creates an interval around the estimate. For example, the estimate shown for Lake County is 49.7%, but with a margin of error of 11.9. This means the estimate of child poverty in Lake County has an interval of 37.8% to 61.6%. This is calculated by taking the stated estimate (49.7%) and subtracting and adding 11.9 to create the interval.
The bar chart below was created to provide a visual reference for the margin of error. The bar for each county shows the estimate, while the line associated with each bar shows the interval based on the margin of error.
The following R code was used to retrieve, organize, display, and visualize the 2024 American Community Survey data.
############################################################
# STEP 1: Load Packages
############################################################
library(tidycensus)
library(tidyverse)
library(kableExtra)
############################################################
# STEP 2: Verify Census API Key
############################################################
if (!nzchar(Sys.getenv("CENSUS_API_KEY"))) {
stop(
paste(
"\nNo Census API key was found.",
"\n\nTo obtain a free Census API key, visit:",
"\nhttps://api.census.gov/data/key_signup.html",
"\n\nThen run the one-time setup code to store your key.",
"\n"
)
)
}
############################################################
# STEP 3: Select ACS Variable
############################################################
# DP03_0129P =
# Percentage of people under age 18 below the poverty level
my_variable <- "DP03_0129P"
############################################################
# STEP 4: Download Tennessee County Data
############################################################
mydata <- get_acs(
geography = "county",
state = "TN",
year = 2024,
survey = "acs5",
variables = my_variable
)
############################################################
# STEP 5: Prepare Data
############################################################
mydata <- mydata |>
transmute(
County = str_remove(NAME, ", Tennessee$"),
Poverty_Rate = estimate,
Margin_of_Error = moe
) |>
arrange(desc(Poverty_Rate))
############################################################
# STEP 6: Display Results as a Table
############################################################
ResultsTable <- mydata |>
kbl(
format = "html",
caption = "Percentage of Children Living Below the Poverty Level by Tennessee County",
col.names = c(
"County",
"Child Poverty Rate (%)",
"Margin of Error (+/- percentage points)"
),
digits = c(0, 1, 1),
align = c("l", "r", "r")
) |>
kable_styling(
bootstrap_options = c(
"striped",
"hover",
"condensed"
),
full_width = FALSE,
position = "center"
)
ResultsTable
############################################################
# STEP 7: Create Bar Chart with Margin of Error
############################################################
ggplot(
mydata,
aes(
x = Poverty_Rate,
y = reorder(County, Poverty_Rate)
)
) +
geom_col() +
geom_errorbar(
aes(
xmin = Poverty_Rate - Margin_of_Error,
xmax = Poverty_Rate + Margin_of_Error
),
width = 0.3
) +
labs(
title = "Child Poverty Rates in Tennessee Counties",
subtitle = "2024 American Community Survey 5-Year Estimates",
x = "Children Below Poverty Level (%)",
y = "County",
caption = "Source: U.S. Census Bureau, American Community Survey"
) +
theme_minimal() +
theme(
axis.text.y = element_text(size = 7),
plot.title = element_text(face = "bold")
)