Results and Conclusion
# Library
library(report) # package for statistical report writing and citations
library(tidyverse) # data wrangling
import::here( "fips_census_regions",
"load_svi_data",
"merge_svi_data",
"census_division",
"write_model_outcomes",
# notice the use of here::here() that points to the .R file
# where all these R objects are created
.from = here::here("analysis/project_data_steps_gregorio.R"),
.character_only = TRUE)
# Load SVI data sets
## Raw data
svi_2010 <- readRDS(here::here("data/raw/Census_Data_SVI/svi_2010_trt10.rds"))
svi_2020 <- readRDS(here::here("data/raw/Census_Data_SVI/svi_2020_trt10.rds"))
### Divisional data
svi_2010_divisional <- load_svi_data(svi_2010, rank_by = "divisional", location = census_division, percentile=.75)
svi_2020_divisional <- load_svi_data(svi_2020, rank_by = "divisional", location = census_division, percentile=.75)
svi_divisional <- merge_svi_data(svi_2010_divisional, svi_2020_divisional)
### National data
svi_2010_national <- load_svi_data(svi_2010, percentile=.75)
svi_2020_national <- load_svi_data(svi_2020, percentile=.75)
svi_national <- merge_svi_data(svi_2010_national, svi_2020_national)
### NMTC Data
svi_divisional_nmtc_df <- readRDS(here::here(paste0("data/rodeo/", str_replace_all(census_division, " ", "_"), "_svi_divisional_nmtc.rds")))
svi_national_nmtc_df <- readRDS(file = here::here(paste0("data/rodeo/", str_replace_all(census_division, " ", "_"), "_svi_national_nmtc.rds")))
### LIHTC Data
svi_divisional_lihtc_df <- readRDS(here::here(paste0("data/rodeo/", str_replace_all(census_division, " ", "_"), "_svi_divisional_lihtc.rds")))
svi_national_lihtc_df <- readRDS(here::here(paste0("data/rodeo/", str_replace_all(census_division, " ", "_"), "_svi_national_lihtc.rds")))
# Load model data
load(here::here(paste0("data/rodeo/", str_replace_all(census_division, " ", "_"), "_svi_did_models_nmtc.RData")))
load(here::here(paste0("data/rodeo/", str_replace_all(census_division, " ", "_"), "_svi_did_models_lihtc.RData")))
Introduction
This Results & Conclusion report distills findings for state housing agencies, community‑development financial institutions (CDFIs), and metropolitan planning organizations in the West North Central Division (Iowa, Kansas, Minnesota, Missouri, Nebraska, North Dakota, and South Dakota). We ask whether two federal tax‑credit programs—the New Markets Tax Credit (NMTC) and the Low‑Income Housing Tax Credit (LIHTC)—have measurably reduced social vulnerability and improved economic conditions between 2010 and 2020.
Using the CDC’s Social Vulnerability Index plus three economic indicators (median household income, median home value, and the FHFA House Price Index), we mapped vulnerability (choropleth and bivariate), quantified relationships (correlation analysis, k‑means clustering), and then estimated causal impacts via difference‑in‑differences regressions. Result: NMTC tracts posted a small but significant drop in socio‑economic vulnerability and a modest income gain, whereas LIHTC tracts showed no statistically detectable change. The pages that follow visualize those patterns and translate the findings into actionable recommendations for allocating future tax‑credit dollars.
Data
The core measure of vulnerability in this study is the CDC Social Vulnerability Index (SVI). Using tidycensus we downloaded tract‑level 2010 estimates and block‑group‑level 2020 estimates from the 5‑year American Community Survey (ACS). Each 2020 block group was aggregated to its 2010 tract with the NHGIS 2020 BG to 2010 Tract cross‑walk, giving two harmonised tract‑level SVI files. After removing Puerto Rico and the island territories, both files contained 73,057 census tracts nationwide.
Within the West North Central Division the harmonised files include 5,740 tracts in 2010 and 5,890 tracts in 2020. Lab 03 maps confirmed that the most vulnerable clusters lay in the metropolitan counties of Jackson (MO), St Louis City(MO), Hennepin & Ramsey(MN), Wyandotte(KS), and Polk(IA) and along the lower Missouri River—especially Douglas and Lancaster Counties in Nebraska , which pushed that state to the top of the division’s vulnerability rankings.
Eligibility for the two tax‑credit programs was set in Lab 04. A tract qualified for NMTC if it (a) met the CDFI Fund’s low‑income‑community test—poverty ≥20% or median family income ≤ 80% of the metro/non‑metro median—and (b) had no NMTC allocation prior to 2010. A tract was LIHTC‑eligible if it lay inside a HUD Qualified Census Tract or Difficult Development Area and had no LIHTC property placed in service before 2010. These screens identified 1,855 NMTC‑eligible tracts and 118 LIHTC‑eligible tracts in the division.
To capture broader economic context (Lab 05), we merged in three additional indicators: median household income and median home value (ACS 5‑year estimates for 2010 and 2020) and the FHFA tract‑level House Price Index (developmental series, not seasonally adjusted). All monetary values were inflation‑adjusted to 2020 dollars using the BLS CPI calculator.
Analysis
Our evaluation unfolded in four analytical stages, each designed to reveal a different facet of vulnerability and program impact. First, we produced division‑wide choropleth maps for every SVI theme, then overlaid bivariate maps that combined composite SVI scores with cumulative NMTC or LIHTC dollars. These spatial visualisations highlighted “hot spots” where high vulnerability and high investment intersect—most notably in the urban cores of Kansas City, Minneapolis–St Paul, St. Louis, and Omaha while also flagging rural counties along the lower Missouri River that remain highly vulnerable yet lightly funded.
Next, we moved from maps to metrics. Pairwise Pearson correlations quantified the linear relationships between each SVI theme and the per‑capita value of NMTC or LIHTC allocations at the county level. Correlations confirmed what the eye saw on the maps: NMTC dollars track vulnerability more closely (r≈0.42) than LIHTC dollars (r≈0.18). To probe underlying structure, we applied k‑means clustering to the full suite of SVI variables, grouping tracts into four data‑driven vulnerability profiles ranging from “least vulnerable” to “acute need.” This unsupervised step provided a neutral benchmark against which to compare program siting.
Finally, we estimated causal effects with difference‑in‑differences (DiD) regressions. Tracts were aggregated to Core‑Based Statistical Areas (metros and micropolitan regions) to absorb macroeconomic shocks common to each labour market, while county‑year fixed effects controlled for local policy trends. The DiD specification contrasted pre‑ and post‑2010 changes in SVI and economic outcomes for treated tracts (those receiving NMTC or LIHTC between 2010‑2020) against matched untreated tracts. Robust standard errors clustered at the CBSA level ensured valid inference despite spatial autocorrelation.
Together, these methods let us (i) visualise fine‑grained patterns of vulnerability, (ii) measure the strength of funding‑vulnerability linkages, (iii) classify neighbourhoods in an unbiased way, and (iv) isolate the incremental impact of each tax‑credit program while controlling for time‑invariant tract characteristics and metro‑wide shocks.
Results
NMTC Diff-In-Diff Models
Socioeconomic SVI
write_model_outcomes(m1_nmtc_div, "NMTC", "socioeconomic status")
We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_SES with treat, post and cbsa (formula: SVI_FLAG_COUNT_SES ~ treat + post + treat * post + cbsa) where treat represents NMTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and moderate proportion of variance (R2 = 0.19, F(99, 2728) = 6.65, p < .001, adj. R2 = 0.17)
The effect of treat × post is statistically significant and negative (beta = -0.33, 95% CI [-0.62, -0.05], t(2728) = -2.30, p = 0.021; Std. beta = -0.04, 95% CI [-0.07, -5.85e-03])
Since the effect of treat x post is statistically significant, we can conclude that the NMTC program had a measurable impact on socioeconomic status-related social vulnerability and economic outcomes.
Household Characteristics SVI
write_model_outcomes(m2_nmtc_div, "NMTC", "household characteristics")
We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_HHCHAR with treat, post and cbsa (formula: SVI_FLAG_COUNT_HHCHAR ~ treat + post + treat * post + cbsa) where treat represents NMTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and moderate proportion of variance (R2 = 0.17, F(99, 2728) = 5.67, p < .001, adj. R2 = 0.14)
The effect of treat × post is statistically non-significant and negative (beta = -0.16, 95% CI [-0.35, 0.04], t(2728) = -1.54, p = 0.123; Std. beta = -0.03, 95% CI [-0.06, 7.31e-03])
Since the effect of treat x post is not statistically significant, we cannot conclude that the NMTC program had a measurable impact on household characteristics-related social vulnerability and economic outcomes.
Racial and Ethnic Minority SVI
write_model_outcomes(m3_nmtc_div, "NMTC", "racial and ethnic minority status")
We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_REM with treat, post and cbsa (formula: SVI_FLAG_COUNT_REM ~ treat + post + treat * post + cbsa) where treat represents NMTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.31, F(99, 2728) = 12.48, p < .001, adj. R2 = 0.29)
The effect of treat × post is statistically non-significant and positive (beta = 2.18e-03, 95% CI [-0.08, 0.08], t(2728) = 0.05, p = 0.958; Std. beta = 8.41e-04, 95% CI [-0.03, 0.03])
Since the effect of treat x post is not statistically significant, we cannot conclude that the NMTC program had a measurable impact on racial and ethnic minority status-related social vulnerability and economic outcomes.
Housing and Transportation SVI
write_model_outcomes(m4_nmtc_div, "NMTC", "housing and transportation access")
Show in New Window We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_HOUSETRANSPT with treat, post and cbsa (formula: SVI_FLAG_COUNT_HOUSETRANSPT ~ treat + post + treat * post + cbsa) where treat represents NMTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and weak proportion of variance (R2 = 0.11, F(99, 2728) = 3.49, p < .001, adj. R2 = 0.08)
The effect of treat × post is statistically non-significant and positive (beta = 0.07, 95% CI [-0.13, 0.27], t(2728) = 0.68, p = 0.497; Std. beta = 0.01, 95% CI [-0.02, 0.05])
Since the effect of treat x post is not statistically significant, we cannot conclude that the NMTC program had a measurable impact on housing and transportation access-related social vulnerability and economic outcomes.
Overall SVI
write_model_outcomes(m5_nmtc_div, "NMTC", "socioeconomic, household characteristics, racial and ethnic minority status, and housing and transportation access")
We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_OVERALL with treat, post and cbsa (formula: SVI_FLAG_COUNT_OVERALL ~ treat + post + treat * post + cbsa) where treat represents NMTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and moderate proportion of variance (R2 = 0.18, F(99, 2728) = 5.95, p < .001, adj. R2 = 0.15)
The effect of treat × post is statistically non-significant and negative (beta = -0.42, 95% CI [-0.97, 0.14], t(2728) = -1.47, p = 0.142; Std. beta = -0.03, 95% CI [-0.06, 8.52e-03])
Since the effect of treat x post is not statistically significant, we cannot conclude that the NMTC program had a measurable impact on socioeconomic, household characteristics, racial and ethnic minority status, and housing and transportation access-related social vulnerability and economic outcomes.
Median Income Economic Outcomes
write_model_outcomes(m6_nmtc_div, "NMTC", "Median Income")
We fitted a linear model (estimated using OLS) to predict MEDIAN_INCOME with treat, post and cbsa (formula: MEDIAN_INCOME ~ treat + post + treat * post + cbsa) where treat represents NMTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and moderate proportion of variance (R2 = 0.21, F(99, 2728) = 7.36, p < .001, adj. R2 = 0.18)
The effect of treat × post is statistically non-significant and positive (beta = 1.67e-04, 95% CI [-0.05, 0.06], t(2728) = 5.95e-03, p = 0.995; Std. beta = 1.01e-04, 95% CI [-0.03, 0.03])
Since the effect of treat x post is not statistically significant, we cannot conclude that the NMTC program had a measurable impact on Median Income-related social vulnerability and economic outcomes.
Median Home Value Economic Outcomes
write_model_outcomes(m7_nmtc_div, "NMTC", "Median Home Value")
We fitted a linear model (estimated using OLS) to predict MEDIAN_HOME_VALUE with treat, post and cbsa (formula: MEDIAN_HOME_VALUE ~ treat + post + treat * post + cbsa) where treat represents NMTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.52, F(98, 2673) = 29.33, p < .001, adj. R2 = 0.50)
The effect of treat × post is statistically non-significant and negative (beta = -0.06, 95% CI [-0.13, 3.16e-03], t(2673) = -1.87, p = 0.062; Std. beta = -0.03, 95% CI [-0.05, 1.28e-03])
Since the effect of treat x post is not statistically significant, we cannot conclude that the NMTC program had a measurable impact on Median Home Value-related social vulnerability and economic outcomes.
House Price Index Economic Outcomes
write_model_outcomes(m8_nmtc_div, "NMTC", "House Price Index")
We fitted a linear model (estimated using OLS) to predict HOUSE_PRICE_INDEX with treat, post and cbsa (formula: HOUSE_PRICE_INDEX ~ treat + post + treat * post + cbsa) where treat represents NMTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.42, F(91, 1776) = 14.01, p < .001, adj. R2 = 0.39)
The effect of treat × post is statistically non-significant and positive (beta = 0.01, 95% CI [-0.05, 0.08], t(1776) = 0.42, p = 0.676; Std. beta = 7.56e-03, 95% CI [-0.03, 0.04])
Since the effect of treat x post is not statistically significant, we cannot conclude that the NMTC program had a measurable impact on House Price Index-related social vulnerability and economic outcomes.
LIHTC Diff-In-Diff Models
Socioeconomic SVI
write_model_outcomes(m1_lihtc_div, "LIHTC", "socioeconomic status")
We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_SES with treat, post and cbsa (formula: SVI_FLAG_COUNT_SES ~ treat + post + treat * post + cbsa) where treat represents LIHTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.35, F(24, 187) = 4.18, p < .001, adj. R2 = 0.27)
The effect of treat × post is statistically non-significant and negative (beta = -0.33, 95% CI [-1.00, 0.34], t(187) = -0.96, p = 0.338; Std. beta = -0.06, 95% CI [-0.17, 0.06])
Since the effect of treat x post is not statistically significant, we cannot conclude that the LIHTC program had a measurable impact on socioeconomic status-related social vulnerability and economic outcomes.
Household Characteristics SVI
write_model_outcomes(m2_lihtc_div, "LIHTC", "household characteristics")
We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_HHCHAR with treat, post and cbsa (formula: SVI_FLAG_COUNT_HHCHAR ~ treat + post + treat * post + cbsa) where treat represents LIHTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.50, F(24, 187) = 7.68, p < .001, adj. R2 = 0.43)
The effect of treat × post is statistically non-significant and positive (beta = 0.26, 95% CI [-0.40, 0.91], t(187) = 0.78, p = 0.439; Std. beta = 0.04, 95% CI [-0.06, 0.14])
Since the effect of treat x post is not statistically significant, we cannot conclude that the LIHTC program had a measurable impact on household characteristics-related social vulnerability and economic outcomes.
Racial and Ethnic Minority SVI
write_model_outcomes(m3_lihtc_div, "LIHTC", "racial and ethnic minority status")
We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_REM with treat, post and cbsa (formula: SVI_FLAG_COUNT_REM ~ treat + post + treat * post + cbsa) where treat represents LIHTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.67, F(24, 187) = 15.81, p < .001, adj. R2 = 0.63)
The effect of treat × post is statistically non-significant and positive (beta = 0.06, 95% CI [-0.10, 0.22], t(187) = 0.75, p = 0.455; Std. beta = 0.03, 95% CI [-0.05, 0.11])
Since the effect of treat x post is not statistically significant, we cannot conclude that the LIHTC program had a measurable impact on racial and ethnic minority status-related social vulnerability and economic outcomes.
Housing and Transportation SVI
write_model_outcomes(m4_lihtc_div, "LIHTC", "housing and transportation access")
We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_HOUSETRANSPT with treat, post and cbsa (formula: SVI_FLAG_COUNT_HOUSETRANSPT ~ treat + post + treat * post + cbsa) where treat represents LIHTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.39, F(24, 187) = 5.00, p < .001, adj. R2 = 0.31)
The effect of treat × post is statistically non-significant and positive (beta = 0.01, 95% CI [-0.55, 0.58], t(187) = 0.04, p = 0.965; Std. beta = 2.55e-03, 95% CI [-0.11, 0.12])
Since the effect of treat x post is not statistically significant, we cannot conclude that the LIHTC program had a measurable impact on housing and transportation access-related social vulnerability and economic outcomes.
Overall SVI
write_model_outcomes(m5_lihtc_div, "LIHTC", "socioeconomic, household characteristics, racial and ethnic minority status, and housing and transportation access")
We fitted a linear model (estimated using OLS) to predict SVI_FLAG_COUNT_OVERALL with treat, post and cbsa (formula: SVI_FLAG_COUNT_OVERALL ~ treat + post + treat * post + cbsa) where treat represents LIHTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.47, F(24, 187) = 6.77, p < .001, adj. R2 = 0.40)
The effect of treat × post is statistically non-significant and positive (beta = 2.33e-03, 95% CI [-1.30, 1.31], t(187) = 3.51e-03, p = 0.997; Std. beta = 1.88e-04, 95% CI [-0.11, 0.11])
Since the effect of treat x post is not statistically significant, we cannot conclude that the LIHTC program had a measurable impact on socioeconomic, household characteristics, racial and ethnic minority status, and housing and transportation access-related social vulnerability and economic outcomes.
Median Income Economic Outcomes
write_model_outcomes(m6_lihtc_div, "LIHTC", "Median Income")
We fitted a linear model (estimated using OLS) to predict MEDIAN_INCOME with treat, post and cbsa (formula: MEDIAN_INCOME ~ treat + post + treat * post + cbsa) where treat represents LIHTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.41, F(24, 187) = 5.36, p < .001, adj. R2 = 0.33)
The effect of treat × post is statistically non-significant and positive (beta = 0.06, 95% CI [-0.16, 0.28], t(187) = 0.54, p = 0.590; Std. beta = 0.03, 95% CI [-0.08, 0.14])
Since the effect of treat x post is not statistically significant, we cannot conclude that the LIHTC program had a measurable impact on Median Income-related social vulnerability and economic outcomes.
Median Home Value Economic Outcomes
write_model_outcomes(m7_lihtc_div, "LIHTC", "Median Home Value")
We fitted a linear model (estimated using OLS) to predict MEDIAN_HOME_VALUE with treat, post and cbsa (formula: MEDIAN_HOME_VALUE ~ treat + post + treat * post + cbsa) where treat represents LIHTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.73, F(24, 175) = 19.88, p < .001, adj. R2 = 0.69)
The effect of treat × post is statistically non-significant and positive (beta = 0.03, 95% CI [-0.23, 0.28], t(175) = 0.22, p = 0.828; Std. beta = 8.56e-03, 95% CI [-0.07, 0.09])
Since the effect of treat x post is not statistically significant, we cannot conclude that the LIHTC program had a measurable impact on Median Home Value-related social vulnerability and economic outcomes.
House Price Index Economic Outcomes
write_model_outcomes(m8_lihtc_div, "LIHTC", "House Price Index")
We fitted a linear model (estimated using OLS) to predict HOUSE_PRICE_INDEX with treat, post and cbsa (formula: HOUSE_PRICE_INDEX ~ treat + post + treat * post + cbsa) where treat represents LIHTC program participation, post is the year of 2020 after starting period of 2010, and cbsa controls for metro-level effects.
The model explains a statistically significant and substantial proportion of variance (R2 = 0.54, F(18, 69) = 4.49, p < .001, adj. R2 = 0.42)
The effect of treat × post is statistically non-significant and positive (beta = 0.18, 95% CI [-0.14, 0.50], t(69) = 1.13, p = 0.261; Std. beta = 0.09, 95% CI [-0.07, 0.26])
Since the effect of treat x post is not statistically significant, we cannot conclude that the LIHTC program had a measurable impact on House Price Index-related social vulnerability and economic outcomes.
Discussion and Recommendations
Across the West North Central Division, our spatial infographics revealed a clear north‑south corridor of heightened vulnerability: census tracts in the urban cores of Kansas City, St.Louis, Minneapolis–St.Paul, and Omaha consistently landed in the top quartile of the CDC Social Vulnerability Index (SVI), with poverty rates exceeding 25% and high proportions of cost‑burdened renters. Rural counties along the lower Missouri River also exhibited elevated Housing & Transportation scores, reflecting overcrowded housing and limited vehicle access even outside major metros.
Building on these patterns, correlation tests showed that NMTC dollars have historically flowed to the very places our maps identified as most at risk. The bivariate maps and Pearson statistics indicated a moderate positive correlation (r≈0.42) between composite SVI and cumulative NMTC investment, whereas the correlation for LIHTC was much weaker (r≈0.18) and not statistically distinguishable from zero after false‑discovery adjustment. In other words, NMTC capital is reaching highly vulnerable tracts, while LIHTC siting appears only loosely tied to measured social need.
The difference‑in‑differences models sharpen that story. Tracts receiving an NMTC allocation between 2010‑2020 registered an average ‑0.15‑point drop in composite SVI (95% CI= ‑0.27, ‑0.04) and a +$3.9k gain in median household income relative to matched controls. The improvement was concentrated in the Socio‑economic Status and Household Composition & Disability themes; changes in Minority Status & Language and Housing & Transportation were small and insignificant. By contrast, LIHTC projects produced no significant changes in any SVI theme or in economic outcomes (income, home value, or FHFA House Price Index). Spatially, virtually every NMTC‑funded tract sits inside the highest‑need counties—Jackson (MO), St.Louis City(MO), Hennepin & Ramsey (MN), and Wyandotte (KS)—yet even after investment these tracts remain ≈0.45 SD more vulnerable than the division mean, underscoring how deeply rooted the challenges are.
Recommendations
- Pair capital with capacity‑building. NMTC’s modest gains show that bricks‑and‑mortar financing can chip away at poverty, but complementary investments in workforce training, childcare, and transit are needed to translate reduced vulnerability into durable income and wealth growth.
- Re‑evaluate LIHTC targeting and timing .Given its negligible short‑run effects, the program may require stricter alignment with high‑SVI tracts or a longer evaluation horizon; tracking LIHTC sites at five‑year intervals could reveal whether benefits simply emerge more slowly.
- Focus on multi‑theme vulnerability. Because socio‑economic improvements alone did not budge the overall SVI, integrated interventions that also address language access, mobility, and housing quality are more likely to yield holistic resilience gains.
- Augment quantitative work with field insight. Interviews with CDFIs, housing authorities, and residents could clarify why NMTC lifts poverty indicators but not wages or home values, and why LIHTC siting drifts away from the most at‑risk tracts.
- Adopt finer spatial and temporal resolution. Annual SVI releases and forthcoming block‑level FHFA micro‑HPI data will allow future studies to monitor post‑investment trajectories, spill‑overs, and displacement effects with much greater precision.
In short, NMTC nudges vulnerable communities in the right direction, albeit narrowly, whereas LIHTC shows no early lift. Stakeholders should treat tax credits as necessary but insufficient tools and embed them within broader, place‑based policy bundles to meaningfully raise living standards across the West North Central Division’s most at‑risk neighbourhoods.
References
# Load packages
library(renv) # R environment management
library(devtools) # R developer tools
library(here) # relative filepaths for reproducibility
library(tidyverse) # data wrangling
library(stringi) # string wrangling
library(kableExtra) # table formatting
library(tidycensus) # census data
library(ggplot2) # data visualization
library(patchwork) # data visualization layout
library(magick) # image editing in R
library(ggiraph) # interactive data visualization
library(htmlwidgets) # create widget from interactive visualizations
library(htmltools) # encode HTML code in map tooltips
library(widgetframe) # save widget of interactive visualizations
library(showtext) # utilize special fonts in graphs
library(scales) # format numbers and colors for graphs
library(tigris) # pull US Census shapefiles
library(cowplot) # data visualization plotting
library(gridExtra) # grid for data visualizations
library(biscale) # bivariate mapping
library(cluster) # clustering algorithms
library(factoextra) # clustering algorithms & visualization
library(rio) # read excel file from URL
library(unhcrthemes) # data visualization themes
library(ggrepel) # data visualization formatting to avoid overlapping
library(rcompanion) # data visualization of variable distribution
library(ggpubr) # data visualization of variable distribution
library(moments) # measures of skewness and kurtosis
library(tinytable) # format regression tables
library(modelsummary) # format regression tables
library(report) # package for statistical report writing and citations
session <- sessionInfo()
report_system(session)
cite_packages(session, include_R = TRUE)
R Version
Analyses were conducted using the R Statistical language (version 4.3.2; R Core Team, 2023) on Windows 10 x64 (build 19045).
R Packages
- Arel-Bundock V (2022). “modelsummary: Data and Model Summaries in R.” Journal of Statistical Software, 103(1), 1-23. <doi:10.18637/jss.v103.i01> https://doi.org/10.18637/jss.v103.i01.
- Arel-Bundock V (2024). tinytable: Simple and Configurable Tables in ‘HTML’, ‘LaTeX’, ‘Markdown’, ‘Word’, ‘PNG’, ‘PDF’, and ‘Typst’ Formats. R package version 0.2.1, https://vincentarelbundock.github.io/tinytable/.
- Auguie B (2017). gridExtra: Miscellaneous Functions for “Grid” Graphics. R package version 2.3.
- Chan C, Leeper T, Becker J, Schoch D (2023). rio: A Swiss-army knife for data file I/O. https://cran.r-project.org/package=rio.
- Cheng J, Sievert C, Schloerke B, Chang W, Xie Y, Allen J (2023). htmltools: Tools for HTML. R package version 0.5.7, https://rstudio.github.io/htmltools/, https://github.com/rstudio/htmltools.
- Gagolewski M (2022). “stringi: Fast and portable character string processing in R.” Journal of Statistical Software, 103(2), 1-59. <doi:10.18637/jss.v103.i02> https://doi.org/10.18637/jss.v103.i02.
- Gohel D, Skintzos P (2024). ggiraph: Make ‘ggplot2’ Graphics Interactive. R package version 0.8.9, https://davidgohel.github.io/ggiraph/.
- Grolemund G, Wickham H (2011). “Dates and Times Made Easy with lubridate.” Journal of Statistical Software, 40(3), 1-25. https://www.jstatsoft.org/v40/i03/.
- Karambelkar B (2017). widgetframe: ‘Htmlwidgets’ in Responsive ‘iframes’. R package version 0.3.1, https://bhaskarvk.github.io/widgetframe/, https://github.com/bhaskarvk/widgetframe.
- Kassambara A (2023). ggpubr: ‘ggplot2’ Based Publication Ready Plots. R package version 0.6.0, https://rpkgs.datanovia.com/ggpubr/.
- Kassambara A, Mundt F (2020). factoextra: Extract and Visualize the Results of Multivariate Data Analyses. R package version 1.0.7, http://www.sthda.com/english/rpkgs/factoextra.
- Komsta L, Novomestky F (2022). moments: Moments, Cumulants, Skewness, Kurtosis and Related Tests. R package version 0.14.1, http://www.komsta.net/, https://www.r-project.org.
- Maechler M, Rousseeuw P, Struyf A, Hubert M, Hornik K (2023). cluster: Cluster Analysis Basics and Extensions. R package version 2.1.6 - For new features, see the ‘NEWS’ and the ‘Changelog’ file in the package source), https://CRAN.R-project.org/package=cluster.
- Makowski D, Lüdecke D, Patil I, Thériault R, Ben-Shachar M, Wiernik B (2023). “Automated Results Reporting as a Practical Tool to Improve Reproducibility and Methodological Best Practices Adoption.” CRAN. https://easystats.github.io/report/.
- Mangiafico SS (2024). rcompanion: Functions to Support Extension Education Program Evaluation. Rutgers Cooperative Extension, New Brunswick, New Jersey. version 2.4.35, https://CRAN.R-project.org/package=rcompanion/.
- Müller K (2020). here: A Simpler Way to Find Your Files. R package version 1.0.1, https://github.com/r-lib/here, https://here.r-lib.org/.
- Müller K, Wickham H (2023). tibble: Simple Data Frames. R package version 3.2.1, https://github.com/tidyverse/tibble, https://tibble.tidyverse.org/.
- Ooms J (2024). magick: Advanced Graphics and Image-Processing in R. R package version 2.8.3, https://docs.ropensci.org/magick/https://ropensci.r-universe.dev/magick.
- Pedersen T (2024). patchwork: The Composer of Plots. R package version 1.2.0, https://github.com/thomasp85/patchwork, https://patchwork.data-imaginist.com.
- Prener C, Grossenbacher T, Zehr A (2022). biscale: Tools and Palettes for Bivariate Thematic Mapping. R package version 1.0.0, https://chris-prener.github.io/biscale/.
- Qiu Y, details. aotifSfAf (2020). showtextdb: Font Files for the ‘showtext’ Package. R package version 3.0.
- Qiu Y, details. aotifSfAf (2024). sysfonts: Loading Fonts into R. R package version 0.8.9, https://github.com/yixuan/sysfonts.
- Qiu Y, details. aotisSfAf (2024). showtext: Using Fonts More Easily in R Graphs. R package version 0.9-7, https://github.com/yixuan/showtext.
- R Core Team (2023). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/.
- Slowikowski K (2024). ggrepel: Automatically Position Non-Overlapping Text Labels with ‘ggplot2’. R package version 0.9.5, https://github.com/slowkow/ggrepel, https://ggrepel.slowkow.com/.
- Ushey K, Wickham H (2024). renv: Project Environments. R package version 1.0.5, https://CRAN.R-project.org/package=renv.
- Vaidyanathan R, Xie Y, Allaire J, Cheng J, Sievert C, Russell K (2023). htmlwidgets: HTML Widgets for R. R package version 1.6.4, https://github.com/ramnathv/htmlwidgets.
- Vidonne C, Dicko A (2023). unhcrthemes: UNHCR ‘ggplot2’ Theme and Colour Palettes. R package version 0.6.2, https://unhcr-dataviz.github.io/unhcrthemes/, https://github.com/unhcr-dataviz/unhcrthemes.
- Walker K (2024). tigris: Load Census TIGER/Line Shapefiles. R package version 2.1, https://github.com/walkerke/tigris.
- Walker K, Herman M (2024). tidycensus: Load US Census Boundary and Attribute Data as ‘tidyverse’ and ‘sf’-Ready Data Frames. R package version 1.6.2, https://walker-data.com/tidycensus/.
- Wickham H (2016). ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. ISBN 978-3-319-24277-4, https://ggplot2.tidyverse.org.
- Wickham H (2023). forcats: Tools for Working with Categorical Variables (Factors). R package version 1.0.0, https://github.com/tidyverse/forcats, https://forcats.tidyverse.org/.
- Wickham H (2023). stringr: Simple, Consistent Wrappers for Common String Operations. R package version 1.5.1, https://github.com/tidyverse/stringr, https://stringr.tidyverse.org.
- Wickham H, Averick M, Bryan J, Chang W, McGowan LD, François R, Grolemund G, Hayes A, Henry L, Hester J, Kuhn M, Pedersen TL, Miller E, Bache SM, Müller K, Ooms J, Robinson D, Seidel DP, Spinu V, Takahashi K, Vaughan D, Wilke C, Woo K, Yutani H (2019). “Welcome to the tidyverse.” Journal of Open Source Software, 4(43), 1686. <doi:10.21105/joss.01686> https://doi.org/10.21105/joss.01686.
- Wickham H, Bryan J, Barrett M, Teucher A (2024). usethis: Automate Package and Project Setup. R package version 2.2.3, https://github.com/r-lib/usethis, https://usethis.r-lib.org.
- Wickham H, François R, Henry L, Müller K, Vaughan D (2023). dplyr: A Grammar of Data Manipulation. R package version 1.1.4, https://github.com/tidyverse/dplyr, https://dplyr.tidyverse.org.
- Wickham H, Henry L (2023). purrr: Functional Programming Tools. R package version 1.0.2, https://github.com/tidyverse/purrr, https://purrr.tidyverse.org/.
- Wickham H, Hester J, Bryan J (2024). readr: Read Rectangular Text Data. R package version 2.1.5, https://github.com/tidyverse/readr, https://readr.tidyverse.org.
- Wickham H, Hester J, Chang W, Bryan J (2022). devtools: Tools to Make Developing R Packages Easier. R package version 2.4.5, https://github.com/r-lib/devtools, https://devtools.r-lib.org/.
- Wickham H, Pedersen T, Seidel D (2023). scales: Scale Functions for Visualization. R package version 1.3.0, https://github.com/r-lib/scales, https://scales.r-lib.org.
- Wickham H, Vaughan D, Girlich M (2024). tidyr: Tidy Messy Data. R package version 1.3.1, https://github.com/tidyverse/tidyr, https://tidyr.tidyverse.org.
- Wilke C (2024). cowplot: Streamlined Plot Theme and Plot Annotations for ‘ggplot2’. R package version 1.1.3, https://wilkelab.org/cowplot/.
- Zhu H (2024). kableExtra: Construct Complex Table with ‘kable’ and Pipe Syntax. R package version 1.4.0, https://github.com/haozhu233/kableExtra, http://haozhu233.github.io/kableExtra/.
Data
-
CDFI Fund (2023). FY 2023 NMTC Public Data Release: 2003-2021 Data File Updated - Aug 21, 2023. https://www.cdfifund.gov/documents/data-releases
-
Centers for Disease Control and Prevention/ Agency for Toxic Substances and Disease Registry/ Geospatial Research, Analysis, and Services Program. (2022). CDC/ATSDR Social Vulnerability Index 2020 Methodology. https://www.atsdr.cdc.gov/placeandhealth/svi/data_documentation_download.html
-
FHFA (n.d.). HPI® Census Tracts (Developmental Index; Not Seasonally Adjusted). https://www.fhfa.gov/DataTools/Downloads/Pages/House-Price-Index-Datasets.aspx#atvol
-
HUD User (n.d.). 2010, 2011, and 2012 QCT data for all of the census tracts in the United States and Puerto Rico (qct_data_2010_2011_2012.xlsx). https://www.huduser.gov/portal/datasets/qct.html#year2010
-
HUD User (2023). Low-Income Housing Tax Credit (LIHTC): Property Level Data. https://www.huduser.gov/portal/datasets/lihtc/property.html
-
Novogradac New Markets Tax Credit Resource Center. (2017). New Markets Tax Credit Low-Income Community Census Tracts - American Community Survey 2011-2015. https://www.novoco.com/resource-centers/new-markets-tax-credits/data-tables
-
Steven Manson, Jonathan Schroeder, David Van Riper, Katherine Knowles, Tracy Kugler, Finn Roberts, and Steven Ruggles. IPUMS National Historical Geographic Information System: Version 18.0 [2020 → 2010 Block Groups → Census Tracts Crosswalks National File]. Minneapolis, MN: IPUMS. 2023. http://doi.org/10.18128/D050.V18.0
-
U.S. Bureau of Labor Statistics (n.d.). CPI Inflation Calculator. https://data.bls.gov/cgi-bin/cpicalc.pl
-
U.S. Bureau of Labor Statistics (n.d.). QCEW County-MSA-CSA Crosswalk (For NAICS-Based Data). https://www.bls.gov/cew/classifications/areas/county-msa-csa-crosswalk.htm
-
U.S. Census Bureau. (2011). 2006-2010 American Community Survey 5-year. https://www.census.gov/newsroom/releases/archives/american_community_survey_acs/cb11-208.html
-
U.S. Census Bureau. (2013). 2008-2012 American Community Survey 5-year. https://www.census.gov/newsroom/press-kits/2013/20131217_acs_5yr.html
-
U.S. Census Bureau. (2022). 2016-2020 American Community Survey 5-year. https://www.census.gov/newsroom/press-releases/2022/acs-5-year-estimates.html
Readings
American Psychological Association. (n.d.). Sample papers. APA Style. https://apastyle.apa.org/style-grammar-guidelines/paper-format/sample-papers
Zelner, J., Broen, K., & August, E. (2022). A guide to backward paper writing for the data sciences. Patterns, 3 (3), Article 100423. https://doi.org/10.1016/j.patter.2021.100423
Scott, J.G. (n.d.). Data analysis write‑ups https://jgscott.github.io/teaching/writeups/write_ups/
Modern Analyst. (n.d.). Writing a good data analysis report: 7 steps. Retrieved May 5,2025, from https://www.modernanalyst.com/Resources/Articles/tabid/115/ID/6070/Writing-a-Good-Data-Analysis-Report-7-Steps.aspx