Assignment 1: Census Data Quality for Policy Decisions

Evaluating Data Reliability for Algorithmic Decision-Making

Author

Xiao Yu

Published

September 29, 2025

Assignment Overview

Scenario

You are a data analyst for the Texas Department of Human Services. The department is considering implementing an algorithmic system to identify communities that should receive priority for social service funding and outreach programs. Your supervisor has asked you to evaluate the quality and reliability of available census data to inform this decision.

Drawing on our Week 2 discussion of algorithmic bias, you need to assess not just what the data shows, but how reliable it is and what communities might be affected by data quality issues.

Learning Objectives

  • Apply dplyr functions to real census data for policy analysis
  • Evaluate data quality using margins of error
  • Connect technical analysis to algorithmic decision-making
  • Identify potential equity implications of data reliability issues
  • Create professional documentation for policy stakeholders

Submission Instructions

Submit by posting your updated portfolio link on Canvas. Your assignment should be accessible at your-portfolio-url/assignments/assignment_1/

Make sure to update your _quarto.yml navigation to include this assignment under an “Assignments” menu.

Part 1: Portfolio Integration

Create this assignment in your portfolio repository under an assignments/assignment_1/ folder structure. Update your navigation menu to include:

- text: Assignments
  menu:
    - href: assignments/assignment_1/your_file_name.qmd
      text: "Assignment 1: Census Data Exploration"

If there is a special character like comma, you need use double quote mark so that the quarto can identify this as text

Setup

# Load required packages (hint: you need tidycensus, tidyverse, and knitr)
library(tidycensus)
library(tidyverse)
library(knitr)
# Set your Census API key
census_api_key("ec702835845a134b4376c60759aa72ce62f6df59")
# Choose your state for analysis - assign it to a variable called my_state
my_state <- "Texas"

State Selection: I have chosen Texas for this analysis because it is a large and diverse state with both urban and rural counties. This mix allows me to compare how data quality varies across different community types, which is important for evaluating equity and potential algorithmic bias.

Part 2: County-Level Resource Assessment

2.1 Data Retrieval

Your Task: Use get_acs() to retrieve county-level data for your chosen state.

Requirements: - Geography: county level - Variables: median household income (B19013_001) and total population (B01003_001)
- Year: 2022 - Survey: acs5 - Output format: wide

Hint: Remember to give your variables descriptive names using the variables = c(name = "code") syntax.

# Write your get_acs() code here
county_data_2022 <- get_acs(
  geography = "county",
  variables = c(
    total_pop = "B01003_001",       # Total population
    med_household_income = "B19013_001"   # Median household income
    ),
  state = "TX",
  year = 2022,
  output = "wide"
)
# Clean the county names to remove state name and "County" 
county_data_2022 <- county_data_2022 %>%
  mutate(county_name = str_remove(NAME, ", Texas"))

# Display the first few rows
head(county_data_2022)
# A tibble: 6 × 7
  GEOID NAME   total_popE total_popM med_household_incomeE med_household_incomeM
  <chr> <chr>       <dbl>      <dbl>                 <dbl>                 <dbl>
1 48001 Ander…      58077         NA                 57445                  4562
2 48003 Andre…      18362         NA                 86458                 16116
3 48005 Angel…      86608         NA                 57055                  2484
4 48007 Arans…      24048         NA                 58168                  6458
5 48009 Arche…       8649         NA                 69954                  8482
6 48011 Armst…       1912        145                 70417                 14574
# ℹ 1 more variable: county_name <chr>

2.2 Data Quality Assessment

Your Task: Calculate margin of error percentages and create reliability categories.

Requirements: - Calculate MOE percentage: (margin of error / estimate) * 100 - Create reliability categories: - High Confidence: MOE < 5% - Moderate Confidence: MOE 5-10%
- Low Confidence: MOE > 10% - Create a flag for unreliable estimates (MOE > 10%)

Hint: Use mutate() with case_when() for the categories.

library(scales)
library(knitr)
library(kableExtra)

# Calculate MOE percentage and reliability categories using mutate()
TX_county_reliability <- county_data_2022 %>%
  mutate(
    med_income_moe_pct = (med_household_incomeM / med_household_incomeE) * 100,
    med_income_confi = case_when(
      med_income_moe_pct < 5 ~ "High Confidence (<5%)",
      med_income_moe_pct > 5 & med_income_moe_pct <10 ~ "Moderate Confidence (5% - 10%)",
      med_income_moe_pct > 10  ~ "Low Confidence (>10%)"
 ),
    unreliable_income = med_income_moe_pct >= 10
  )
# Create a summary showing count of counties in each reliability category
TX_reliability_summary <- TX_county_reliability %>%
  count(med_income_confi) %>%
  mutate(percent = round(100 * n / sum(n), 1))

# Display the summary table
kable(
  TX_reliability_summary,
  caption = "Texas county-level median household income reliability (ACS 2022)",
  col.names = c("Reliability Category", "Count", "Percentage"),
  align = c("l", "r", "r")
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center"
  )
Texas county-level median household income reliability (ACS 2022)
Reliability Category Count Percentage
High Confidence (<5%) 58 22.8
Low Confidence (>10%) 113 44.5
Moderate Confidence (5% - 10%) 82 32.3
NA 1 0.4
# Hint: use count() and mutate() to add percentages

2.3 High Uncertainty Counties

Your Task: Identify the 5 counties with the highest MOE percentages.

Requirements: - Sort by MOE percentage (highest first) - Select the top 5 counties - Display: county name, median income, margin of error, MOE percentage, reliability category - Format as a professional table using kable()

Hint: Use arrange(), slice(), and select() functions.

library(scales)
library(kableExtra)

# Create table of top 5 counties by MOE percentage
TX_high_uncertainty <- TX_county_reliability %>%
  arrange(desc(med_income_moe_pct)) %>%
  slice(1:5) %>%
  select(
    County = county_name,
    `Median Income ($)` = med_household_incomeE,
    `Margin of Error ($)` = med_household_incomeM,
    `MOE (%)` = med_income_moe_pct,
    Reliability = med_income_confi
  ) %>%
  # Format numbers for professional output
  mutate(
    `Median Income ($)` = dollar(`Median Income ($)`),
    `Margin of Error ($)` = dollar(`Margin of Error ($)`),
    `MOE (%)` = paste0(round(`MOE (%)`, 1), "%")
  )

# Format as table with kable() - include appropriate column names and caption
kable(
  TX_high_uncertainty,
  caption = "Top 5 Texas Counties by Margin of Error in Median Household Income (ACS 2022)",
  align = c("l", "r", "r", "r", "l")  # set column alignment
) %>%
  kable_styling(full_width = FALSE, position = "center")
Top 5 Texas Counties by Margin of Error in Median Household Income (ACS 2022)
County Median Income ($) Margin of Error ($) MOE (%) Reliability
Jeff Davis County $38,125 $25,205 66.1% Low Confidence (>10%)
Culberson County $35,924 $18,455 51.4% Low Confidence (>10%)
King County $59,375 $29,395 49.5% Low Confidence (>10%)
Kinney County $52,386 $23,728 45.3% Low Confidence (>10%)
Dimmit County $27,374 $12,374 45.2% Low Confidence (>10%)

Data Quality Commentary:

The five Texas counties with the highest margins of error in median household income estimates—Jeff Davis, Culberson, King, Kinney, and Dimmit—show MOE percentages ranging from 45% to 66%. Such extreme levels indicate that ACS estimates for these areas are highly unreliable. The primary causes are small populations, limited survey samples, and income variability that magnifies error. If used directly in algorithmic decision-making, these data could misclassify community needs and distort funding priorities. Policymakers should instead supplement ACS data with administrative or tax records, or require manual review, to ensure fair and accurate resource allocation.

Part 3: Neighborhood-Level Analysis

3.1 Focus Area Selection

Your Task: Select 2-3 counties from your reliability analysis for detailed tract-level study.

Strategy: Choose counties that represent different reliability levels (e.g., 1 high confidence, 1 moderate, 1 low confidence) to compare how data quality varies.

library(scales)

# Use filter() to select 2-3 counties from your county_reliability data
# Store the selected counties in a variable called selected_counties
selected_counties <- TX_county_reliability %>%
  filter(med_household_incomeE %in% c(35924, 27374)) %>%
  mutate(`MOE (%)` = round(med_income_moe_pct, 1)) %>%
  select(
    County = county_name,
    `Median Income ($)` = med_household_incomeE,
    `MOE (%)`,
    Reliability = med_income_confi
  )
# Display the selected counties with their key characteristics
# Show: county name, median income, MOE percentage, reliability category
# Display the selected counties
kable(
  selected_counties,
  caption = "Selected Texas Counties for Tract-Level Analysis",
  align = c("l", "r", "r", "r", "l")
) %>%
  kable_styling(full_width = FALSE, position = "center", bootstrap_options = c("striped", "hover"))
Selected Texas Counties for Tract-Level Analysis
County Median Income ($) MOE (%) Reliability
Culberson County 35924 51.4 Low Confidence (>10%)
Dimmit County 27374 45.2 Low Confidence (>10%)

Comment on the output:Culberson and Dimmit Counties were selected as examples of Low Confidence data. Their high MOE values reflect the challenges of using ACS estimates in small, rural counties.

3.2 Tract-Level Demographics

Your Task: Get demographic data for census tracts in your selected counties.

Requirements: - Geography: tract level - Variables: white alone (B03002_003), Black/African American (B03002_004), Hispanic/Latino (B03002_012), total population (B03002_001) - Use the same state and year as before - Output format: wide - Challenge: You’ll need county codes, not names. Look at the GEOID patterns in your county data for hints.

# Define your race/ethnicity variables with descriptive names
race_vars <- get_acs(
  geography = "tract",
  survey = "acs5",
  variables = c(
    white = "B03002_003", 
    black = "B03002_004",
    hisp_latinx = "B03002_012",
    total_pop = "B03002_001"
  ),
  year = 2022,
  state = "TX",
  county = c("109", "127"),  # Culberson = 48109, Dimmit = 48127
  output = "wide"
)

# Use get_acs() to retrieve tract-level data
# Hint: You may need to specify county codes in the county parameter

# Calculate percentage of each group using mutate()
# Create percentages for white, Black, and Hispanic populations
race_vars <- race_vars %>%
  mutate(
    pct_white = 100 * whiteE / total_popE,
    pct_black = 100 * blackE / total_popE,
    pct_hispanic = 100 * hisp_latinxE / total_popE,
    
    # Split NAME on semicolon to extract tract and county
    tract_name = sapply(strsplit(NAME, ";"), function(x) trimws(x[1])),
    county_name = sapply(strsplit(NAME, ";"), function(x) trimws(x[2])) %>%
                  str_remove(" County")
  )
# Inspect first few rows
head(race_vars %>%
       select(tract_name, county_name, pct_white, pct_black, pct_hispanic))
# A tibble: 4 × 5
  tract_name           county_name pct_white pct_black pct_hispanic
  <chr>                <chr>           <dbl>     <dbl>        <dbl>
1 Census Tract 9503    Culberson       11.4      0.183         81.3
2 Census Tract 9502.01 Dimmit           7.39     0.242         91.7
3 Census Tract 9502.02 Dimmit          17.2      1.56          77.2
4 Census Tract 9504    Dimmit           4.20     0.156         93.8
# Add readable tract and county name columns using str_extract() or similar

3.3 Demographic Analysis

Your Task: Analyze the demographic patterns in your selected areas.

library(dplyr)
library(knitr)
# Find the tract with the highest percentage of Hispanic/Latino residents
# Hint: use arrange() and slice() to get the top tract
top_hispanic_tract <- race_vars %>%
  arrange(desc(pct_hispanic)) %>%
  slice(1) %>%
  transmute(
    Tract = tract_name,
    County = county_name,
    `Hispanic %` = percent(pct_hispanic / 100, accuracy = 0.1)
  )

kable(top_hispanic_tract,
      caption = "Tract with Highest Hispanic/Latino Population",
      align = c("l", "l", "r")) %>%
  kable_styling(full_width = FALSE, position = "center",
                bootstrap_options = c("striped", "hover"))
Tract with Highest Hispanic/Latino Population
Tract County Hispanic %
Census Tract 9504 Dimmit 93.8%
# Calculate average demographics by county using group_by() and summarize()
# Show: number of tracts, average percentage for each racial/ethnic group
county_summary <- race_vars %>%
  group_by(county_name) %>%
  summarise(
    `Number of Tracts` = n(),
    `Avg. White %` = percent(mean(pct_white, na.rm = TRUE) / 100, accuracy = 0.1),
    `Avg. Black %` = percent(mean(pct_black, na.rm = TRUE) / 100, accuracy = 0.1),
    `Avg. Hispanic %` = percent(mean(pct_hispanic, na.rm = TRUE) / 100, accuracy = 0.1)
  )
# Create a nicely formatted table of your results using kable()
kable(
  county_summary,
  caption = "Average Demographic Composition by County",
  align = c("l", "r", "r", "r", "r")
) %>%
  kable_styling(full_width = FALSE, position = "center",
                bootstrap_options = c("striped", "hover"))
Average Demographic Composition by County
county_name Number of Tracts Avg. White % Avg. Black % Avg. Hispanic %
Culberson 1 11.4% 0.2% 81.3%
Dimmit 3 9.6% 0.7% 87.6%

Part 4: Comprehensive Data Quality Evaluation

4.1 MOE Analysis for Demographic Variables

Your Task: Examine margins of error for demographic variables to see if some communities have less reliable data.

Requirements: - Calculate MOE percentages for each demographic variable - Flag tracts where any demographic variable has MOE > 15% - Create summary statistics

# Calculate MOE percentages for white, Black, and Hispanic variables
# Hint: use the same formula as before (margin/estimate * 100)
# Create a flag for tracts with high MOE on any demographic variable
# Use logical operators (| for OR) in an ifelse() statement
demo_moe <- race_vars %>%
  mutate(
    white_moe_pct = (whiteM / whiteE) * 100,
    black_moe_pct = (blackM / blackE) * 100,
    hispanic_moe_pct = (hisp_latinxM / hisp_latinxE) * 100,
    
    # Flag tracts where any demographic MOE > 15%
    high_moe_flag = ifelse(
      white_moe_pct > 15 | black_moe_pct > 15 | hispanic_moe_pct > 15,
      TRUE, FALSE
    )
  )
# Create summary statistics showing how many tracts have data quality issues
moe_summary_county <- demo_moe %>%
  group_by(county_name) %>%
  summarise(
    total_tracts = n(),
    high_moe_tracts = sum(high_moe_flag, na.rm = TRUE),
    percent_high_moe = round(100 * mean(high_moe_flag, na.rm = TRUE), 1)
  )

kable(
  moe_summary_county,
  caption = "**MOE Summary by County (ACS 2022)**",
  row.names = FALSE,
  col.names = c("County", "Total Tracts", "High MOE Tracts", "Percent High MOE (%)"),
  align = c("l", "c", "c", "r")
) %>%
  kable_styling(full_width = FALSE, position = "center",
                bootstrap_options = c("striped", "hover"))
**MOE Summary by County (ACS 2022)**
County Total Tracts High MOE Tracts Percent High MOE (%)
Culberson 1 1 100
Dimmit 3 3 100

4.2 Pattern Analysis

Your Task: Investigate whether data quality problems are randomly distributed or concentrated in certain types of communities.

# Group tracts by whether they have high MOE issues
# Calculate average characteristics for each group:
# - population size, demographic percentages
# Group tracts by whether they have high MOE issues
moe_patterns <- demo_moe %>%
  filter(high_moe_flag == TRUE) %>%   # keep only high-MOE tracts
  group_by(county_name) %>%
  summarise(
    `Population Average` = round(mean(total_popE, na.rm = TRUE), 0),
    `% White Avg` = round(mean(pct_white, na.rm = TRUE), 2),
    `% Black Avg` = round(mean(pct_black, na.rm = TRUE), 2),
    `% LatinX Avg` = round(mean(pct_hispanic, na.rm = TRUE), 2),
    `Tracts Quantity` = n(),
    .groups = "drop"
  )

kable(
  moe_patterns,
  caption = "**High-MOE Tracts by County (ACS 2022)**",
  align = c("l", "c", "c", "c", "c", "r"),
  col.names = c("County", "Population Average", "% White Avg", "% Black Avg", "% LatinX Avg", "Tracts Quantity"),
  digits = 2
) %>%
  kable_styling(full_width = FALSE, position = "center",
                bootstrap_options = c("striped", "hover", "condensed"))
**High-MOE Tracts by County (ACS 2022)**
County Population Average % White Avg % Black Avg % LatinX Avg Tracts Quantity
Culberson 2181 11.42 0.18 81.34 1
Dimmit 2891 9.60 0.65 87.57 3
# Use group_by() and summarize() to create this comparison
# Create a professional table showing the patterns

Pattern Analysis: High MOE tracts are found in small, rural counties with low populations and high Hispanic/Latino shares.These factors reduce ACS reliability, meaning minority and rural communities face greater risk of being misrepresented in algorithmic decisions.

Part 5: Policy Recommendations

5.1 Analysis Integration and Professional Summary

Your Task: Write an executive summary that integrates findings from all four analyses.

Executive Summary Requirements: 1. Overall Pattern Identification: What are the systematic patterns across all your analyses? 2. Equity Assessment: Which communities face the greatest risk of algorithmic bias based on your findings? 3. Root Cause Analysis: What underlying factors drive both data quality issues and bias risk? 4. Strategic Recommendations: What should the Department implement to address these systematic issues?

Executive Summary:

Looking at ACS 2022 data for Texas, we see that data quality isn’t the same everywhere. Larger, urban counties usually have solid numbers, while smaller rural counties often have very high margins of error. In some places, the income data is so uncertain that it’s hard to use with confidence.

The biggest risk shows up in rural, Hispanic-majority counties like Dimmit and Culberson. These areas often have the highest uncertainty, which means if an algorithm used this data directly, the results could shortchange the very communities that need the most support.

The main reason for this problem is how the ACS survey works. Small populations naturally create bigger sampling errors, and rural or minority communities may also face challenges like language barriers or low response rates. That makes their numbers less reliable.

To make decisions fairer, a tiered approach makes sense. Counties with strong data can go into the algorithm as-is. Counties with moderate-quality data should be monitored, and counties with weak data should get extra checks or even manual review. Over time, improving census participation in rural and minority communities would help fix the root of the problem.

6.3 Specific Recommendations

Your Task: Create a decision framework for algorithm implementation.

library(scales)
library(kableExtra)
# Create a summary table using your county reliability data
# Include: county name, median income, MOE percentage, reliability category

# Add a new column with algorithm recommendations using case_when():
# - High Confidence: "Safe for algorithmic decisions"
# - Moderate Confidence: "Use with caution - monitor outcomes"  
# - Low Confidence: "Requires manual review or additional data"

TX_recommendations <- TX_county_reliability %>%
  select(county_name, med_household_incomeE, med_income_moe_pct, med_income_confi) %>%
  mutate(
    `Median Income ($)` = dollar(med_household_incomeE),
    `MOE (%)` = percent(med_income_moe_pct / 100, accuracy = 0.1),
    Recommendation = case_when(
      med_income_confi == "High Confidence (<5%)" ~ "✅ Safe for algorithmic decisions",
      med_income_confi == "Moderate Confidence (5% - 10%)" ~ "⚠️ Use with caution – monitor outcomes",
      med_income_confi == "Low Confidence (>10%)" ~ "❌ Requires manual review or extra data",
      TRUE ~ "Check data"
    )
  ) %>%
  select(county_name, `Median Income ($)`, `MOE (%)`, med_income_confi, Recommendation)


# Format as a professional table with kable()
kable(
  TX_recommendations,
  caption = "**County-Level Reliability and Algorithm Recommendations (ACS 2022)**",
  col.names = c("County", "Median Income ($)", "MOE (%)", "Reliability", "Recommendation"),
  escape = FALSE,
  align = c("l", "r", "r", "l", "l")
) %>%
  kable_styling(full_width = FALSE, position = "center",
                bootstrap_options = c("striped", "hover", "condensed")) %>%
  column_spec(1, bold = TRUE)
**County-Level Reliability and Algorithm Recommendations (ACS 2022)**
County Median Income ($) MOE (%) Reliability Recommendation
Anderson County $57,445 7.9% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Andrews County $86,458 18.6% Low Confidence (>10%) ❌ Requires manual review or extra data |
Angelina County $57,055 4.4% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Aransas County $58,168 11.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Archer County $69,954 12.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Armstrong County $70,417 20.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Atascosa County $67,442 6.4% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Austin County $73,556 6.5% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Bailey County $69,830 18.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Bandera County $70,965 8.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Bastrop County $80,151 6.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Baylor County $52,716 25.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Bee County $50,283 10.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Bell County $62,858 2.8% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Bexar County $67,275 1.2% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Blanco County $79,717 9.4% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Borden County $80,625 24.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Bosque County $63,868 6.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Bowie County $56,628 4.1% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Brazoria County $91,972 3.3% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Brazos County $57,562 3.5% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Brewster County $47,747 11.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Briscoe County $35,446 27.6% Low Confidence (>10%) ❌ Requires manual review or extra data |
Brooks County $30,566 33.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Brown County $53,792 4.7% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Burleson County $71,745 6.5% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Burnet County $71,482 8.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Caldwell County $66,779 7.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Calhoun County $62,267 9.9% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Callahan County $63,906 3.6% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Cameron County $47,435 3.4% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Camp County $53,968 7.6% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Carson County $83,199 4.5% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Cass County $54,303 6.8% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Castro County $59,886 17.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Chambers County $106,103 8.3% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Cherokee County $56,971 8.5% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Childress County $56,063 29.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Clay County $75,227 7.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Cochran County $41,597 17.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Coke County $40,230 13.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Coleman County $51,034 7.9% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Collin County $113,255 1.2% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Collingsworth County $52,045 22.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Colorado County $63,352 8.2% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Comal County $93,744 2.8% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Comanche County $57,383 13.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Concho County $55,750 27.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Cooke County $66,374 8.4% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Coryell County $63,281 3.6% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Cottle County $47,625 37.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Crane County $71,364 32.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Crockett County $64,103 34.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Crosby County $50,268 10.4% Low Confidence (>10%) ❌ Requires manual review or extra data |
Culberson County $35,924 51.4% Low Confidence (>10%) ❌ Requires manual review or extra data |
Dallam County $71,969 9.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Dallas County $70,732 0.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Dawson County $45,268 27.6% Low Confidence (>10%) ❌ Requires manual review or extra data |
Deaf Smith County $51,942 6.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Delta County $68,491 27.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Denton County $104,180 1.3% High Confidence (<5%) ✅ Safe for algorithmic decisions |
DeWitt County $61,100 7.9% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Dickens County $46,638 13.6% Low Confidence (>10%) ❌ Requires manual review or extra data |
Dimmit County $27,374 45.2% Low Confidence (>10%) ❌ Requires manual review or extra data |
Donley County $51,711 12.4% Low Confidence (>10%) ❌ Requires manual review or extra data |
Duval County $50,697 20.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Eastland County $52,902 12.2% Low Confidence (>10%) ❌ Requires manual review or extra data |
Ector County $70,566 4.2% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Edwards County $40,809 27.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Ellis County $93,248 2.7% High Confidence (<5%) ✅ Safe for algorithmic decisions |
El Paso County $55,417 1.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Erath County $59,654 6.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Falls County $45,172 15.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Fannin County $65,835 6.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Fayette County $72,881 5.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Fisher County $60,461 8.2% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Floyd County $49,321 9.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Foard County $41,944 20.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Fort Bend County $109,987 2.6% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Franklin County $67,915 4.4% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Freestone County $55,902 10.5% Low Confidence (>10%) ❌ Requires manual review or extra data |
Frio County $56,042 30.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Gaines County $73,299 13.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Galveston County $83,913 2.8% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Garza County $56,215 35.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Gillespie County $70,162 8.2% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Glasscock County $112,188 27.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Goliad County $58,125 25.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Gonzales County $64,255 8.4% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Gray County $54,563 7.2% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Grayson County $66,608 3.6% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Gregg County $63,811 3.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Grimes County $63,484 9.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Guadalupe County $88,111 3.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Hale County $50,721 9.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Hall County $43,873 11.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Hamilton County $54,890 17.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Hansford County $62,350 19.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Hardeman County $60,455 15.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Hardin County $70,164 5.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Harris County $70,789 0.7% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Harrison County $63,427 4.8% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Hartley County $78,065 27.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Haskell County $52,786 16.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Hays County $79,990 3.7% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Hemphill County $67,798 27.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Henderson County $59,778 4.3% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Hidalgo County $49,371 2.3% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Hill County $60,669 6.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Hockley County $53,283 7.5% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Hood County $80,013 4.7% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Hopkins County $63,766 5.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Houston County $51,043 10.5% Low Confidence (>10%) ❌ Requires manual review or extra data |
Howard County $67,243 6.5% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Hudspeth County $35,163 23.2% Low Confidence (>10%) ❌ Requires manual review or extra data |
Hunt County $66,885 4.2% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Hutchinson County $62,211 7.5% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Irion County $54,708 17.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Jack County $58,861 13.2% Low Confidence (>10%) ❌ Requires manual review or extra data |
Jackson County $67,176 17.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Jasper County $48,818 9.8% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Jeff Davis County $38,125 66.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Jefferson County $57,294 2.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Jim Hogg County $42,292 13.6% Low Confidence (>10%) ❌ Requires manual review or extra data |
Jim Wells County $46,626 12.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Johnson County $77,058 3.1% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Jones County $59,361 10.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Karnes County $57,798 14.5% Low Confidence (>10%) ❌ Requires manual review or extra data |
Kaufman County $84,075 4.1% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Kendall County $104,196 8.3% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Kenedy County $45,455 25.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Kent County $68,553 15.6% Low Confidence (>10%) ❌ Requires manual review or extra data |
Kerr County $66,713 6.2% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Kimble County $62,386 22.6% Low Confidence (>10%) ❌ Requires manual review or extra data |
King County $59,375 49.5% Low Confidence (>10%) ❌ Requires manual review or extra data |
Kinney County $52,386 45.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Kleberg County $52,487 9.5% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Knox County $48,750 9.8% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Lamar County $58,246 4.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Lamb County $54,519 8.6% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Lampasas County $73,269 7.4% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
La Salle County $62,798 26.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Lavaca County $58,530 7.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Lee County $66,448 10.4% Low Confidence (>10%) ❌ Requires manual review or extra data |
Leon County $57,363 12.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Liberty County $59,605 6.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Limestone County $53,102 7.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Lipscomb County $71,625 12.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Live Oak County $55,949 18.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Llano County $64,241 8.8% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Loving County NA NA NA Check data
Lubbock County $61,911 3.5% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Lynn County $52,996 7.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
McCulloch County $53,214 16.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
McLennan County $59,781 3.2% High Confidence (<5%) ✅ Safe for algorithmic decisions |
McMullen County $60,313 41.2% Low Confidence (>10%) ❌ Requires manual review or extra data |
Madison County $65,768 9.6% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Marion County $48,040 5.0% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Martin County $70,217 27.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Mason County $77,583 15.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Matagorda County $56,412 6.3% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Maverick County $48,497 10.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Medina County $73,060 4.0% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Menard County $40,945 17.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Midland County $90,123 5.8% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Milam County $56,985 5.9% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Mills County $59,315 9.3% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Mitchell County $49,869 12.5% Low Confidence (>10%) ❌ Requires manual review or extra data |
Montague County $63,336 8.6% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Montgomery County $95,946 3.4% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Moore County $59,041 6.5% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Morris County $51,532 6.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Motley County $66,528 8.4% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Nacogdoches County $51,153 4.2% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Navarro County $56,261 7.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Newton County $38,871 16.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Nolan County $47,437 7.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Nueces County $64,027 2.3% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Ochiltree County $62,240 17.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Oldham County $71,103 11.2% Low Confidence (>10%) ❌ Requires manual review or extra data |
Orange County $71,910 7.9% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Palo Pinto County $65,242 4.4% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Panola County $58,205 18.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Parker County $95,721 3.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Parmer County $65,575 13.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Pecos County $59,325 17.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Polk County $57,315 5.2% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Potter County $47,974 4.0% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Presidio County $29,012 24.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Rains County $60,291 10.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Randall County $78,038 3.5% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Reagan County $70,319 12.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Real County $46,842 33.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Red River County $44,583 9.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Reeves County $57,487 22.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Refugio County $54,304 4.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Roberts County $62,667 14.2% Low Confidence (>10%) ❌ Requires manual review or extra data |
Robertson County $59,410 17.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Rockwall County $121,303 3.8% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Runnels County $55,424 6.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Rusk County $61,661 9.8% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Sabine County $47,061 16.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
San Augustine County $45,888 9.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
San Jacinto County $54,839 13.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
San Patricio County $63,842 6.9% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
San Saba County $54,087 16.4% Low Confidence (>10%) ❌ Requires manual review or extra data |
Schleicher County $53,774 15.2% Low Confidence (>10%) ❌ Requires manual review or extra data |
Scurry County $58,932 21.4% Low Confidence (>10%) ❌ Requires manual review or extra data |
Shackelford County $60,924 14.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Shelby County $49,231 10.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Sherman County $66,169 27.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Smith County $69,053 3.2% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Somervell County $87,899 33.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Starr County $35,979 8.4% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Stephens County $44,712 18.8% Low Confidence (>10%) ❌ Requires manual review or extra data |
Sterling County $63,558 22.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Stonewall County $66,591 32.5% Low Confidence (>10%) ❌ Requires manual review or extra data |
Sutton County $56,778 22.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Swisher County $40,290 13.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Tarrant County $78,872 1.0% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Taylor County $61,806 3.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Terrell County $52,813 21.0% Low Confidence (>10%) ❌ Requires manual review or extra data |
Terry County $42,694 10.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Throckmorton County $55,221 21.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Titus County $57,634 8.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Tom Green County $67,215 4.7% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Travis County $92,731 1.2% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Trinity County $51,165 11.4% Low Confidence (>10%) ❌ Requires manual review or extra data |
Tyler County $50,898 10.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Upshur County $60,456 7.7% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Upton County $55,284 21.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Uvalde County $55,000 15.3% Low Confidence (>10%) ❌ Requires manual review or extra data |
Val Verde County $57,250 8.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Van Zandt County $62,334 8.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Victoria County $66,308 3.6% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Walker County $47,193 6.3% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Waller County $71,643 6.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Ward County $70,771 12.6% Low Confidence (>10%) ❌ Requires manual review or extra data |
Washington County $70,043 9.4% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Webb County $59,984 3.1% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Wharton County $59,712 6.8% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Wheeler County $58,158 14.2% Low Confidence (>10%) ❌ Requires manual review or extra data |
Wichita County $58,862 3.2% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Wilbarger County $50,769 18.4% Low Confidence (>10%) ❌ Requires manual review or extra data |
Willacy County $42,839 13.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Williamson County $102,851 1.4% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Wilson County $89,708 4.9% High Confidence (<5%) ✅ Safe for algorithmic decisions |
Winkler County $89,155 16.1% Low Confidence (>10%) ❌ Requires manual review or extra data |
Wise County $85,385 6.1% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Wood County $61,748 6.0% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Yoakum County $80,317 8.8% Moderate Confidence (5% - 10%) ⚠️ Use with caution – monitor outcomes
Young County $65,565 16.9% Low Confidence (>10%) ❌ Requires manual review or extra data |
Zapata County $35,061 10.7% Low Confidence (>10%) ❌ Requires manual review or extra data |
Zavala County $49,243 28.8% Low Confidence (>10%) ❌ Requires manual review or extra data |

Key Recommendations:

Your Task: Use your analysis results to provide specific guidance to the department.

  1. Counties suitable for immediate algorithmic implementation: High-confidence counties such as Bexar, Dallas, Travis, Williamson, and Collin have strong data quality (MOE <5%). These counties are large, urban, and well-sampled, making them reliable for algorithm-driven funding and planning decisions.

  2. Counties requiring additional oversight: Moderate-confidence counties like Anderson, Bastrop, Caldwell, and Wise fall in the 5–10% MOE range. Algorithms may be used here, but outcomes should be monitored regularly with human oversight to check for misallocations.

  3. Counties needing alternative approaches: Low-confidence counties such as Dimmit, Culberson, Jeff Davis, King, and Kinney have very high MOEs (>10%, sometimes above 40–60%). These areas need manual review, supplemental surveys, or local administrative data to ensure fair resource distribution.

Questions for Further Investigation

  1. Are high-MOE counties geographically clustered (e.g., along the border or in rural west Texas), and does this spatial pattern affect equity?
  2. How do data quality issues change over time — are counties improving or declining in reliability across ACS cycles?
  3. Do certain demographic groups (Hispanic, Black, rural populations) consistently face higher MOEs, and what targeted outreach could improve data collection?

Technical Notes

Data Sources:

  • U.S. Census Bureau, American Community Survey 2018-2022 5-Year Estimates
  • Retrieved via tidycensus R package on 09/29/2025

Reproducibility:

  • All analysis conducted in R version 2025.05.1+513 (2025.05.1+513)
  • Census API key required for replication
  • Complete code and documentation available at: https://musa-5080-fall-2025.github.io/portfolio-setup-uxiaoo22/

Methodology Notes:

  • Focused on Texas counties using ACS 2022 5-year data. Variables selected: median household income, total population, and race/ethnicity (tract level).
  • Cleaned county names by removing state suffixes for readability.
  • Categorized margins of error (MOE) into High, Moderate, Low confidence levels for analysis clarity.
  • Selected counties (Culberson and Dimmit) for tract-level study to highlight data reliability challenges

Limitations:

  • ACS data for small, rural counties often carries large MOEs, limiting reliability.
  • Analysis restricted to Texas counties; findings may not generalize to other states.
  • Reliance on 5-year estimates improves stability but masks short-term trends.
  • MOE thresholds (<5%, 5–10%, >10%) are heuristic and may oversimplify nuanced reliability issues

Submission Checklist

Before submitting your portfolio link on Canvas:

  • [☑ ] All code chunks run without errors
  • [☑ ] All “[Fill this in]” prompts have been completed
  • [☑ ] Tables are properly formatted and readable
  • [☑ ] Executive summary addresses all four required components
  • [☑ ] Portfolio navigation includes this assignment
  • [☑ ] Census API key is properly set
  • [☑ ] Document renders correctly to HTML

Remember: Submit your portfolio URL on Canvas, not the file itself. Your assignment should be accessible at your-portfolio-url/assignments/assignment_1/your_file_name.html