Can we predict rising unmet health need?

learning
Authors
Affiliations

Felix G. (Researcher)

University of Kansas - Community Data Labs

Pradeep Kumar (Project Sponsor)

Industry Advisory Board

William Duncan (Project Advisor)

University of Kansas, KDSC

Published

May 15, 2026

Modified

May 18, 2026

Introduction

Sponsored by Pradeep Kumar of the Industry Advisory Board, this project asks, “can we predict the rise of unmet health needs in adults with disabilities?” Adults with disabilities struggle with access to healthcare services more than the general populace, including geographic isolation, socioeconomic challenges, and systemic inequities. In order to reduce the risk of widening disparities of unmet health need, poor health outcomes, and vulnerability to chronic conditions, we utilized machine learning to predict which states across the country were expected to have an increase in unmet health needs across the disabled adult population using publicly available health survey data from the Behavioral Risk Factor Surveillance System (BRFSS) dataset.

I was inundated with unknowns as I faced this question. This was my first time designing a project around machine learning and I had a period of adjustment as I navigated what that would require. I started by building my dataset, a process that expanded as I iterated through harmonization methods. The Long Term Ecological Research Project (LTER) has a package that provides a useful framework for data harmonization, which I used extensively in the early stages of this project as I iterated on the workflow. I chose to combine data from 2017 to 2024. After initial harmonization, I continued to iterate on the overall research design. With much gratitude to guidance from course mentors, I settled on a feature set could codify observations based on disability status, poor health status, and access to healthcare. These were in turn used to create our final proxy after aggregation to a state-year panel that tracked the percentage of the disable adult population in each state that had unmet health needs. I obtained a dataset from the University of Kentucky Center for Poverty Research that contained state-level socioeconomic demographics and policy data. These would become my predictors in the upcoming classification task.

The final analysis took the form of a model evaluation comparison between five machine learning algorithms: a baseline pooled OLS regression with state-clustered SEs, a ridge and a lasso penalized logistic regression, a decision tree, and a random forest model. I intended to use this framework to ensure that I would capture a signal and could gain key insights like which states had the highest proportion of vulnerable adults, and which states were expected to increase. I also wanted to determine which predictors were the most plausible predictors that could inform future research through variable importance.

Data

Data collection occurred in two stages. The first centered on developing our predictor variable from data from The Behavioral Risk Factor Surveillance System (BRFSS), the second concerned obtaining our state-level predictors from the University of Kentucky Center for Poverty Research (UKCPR).

The BRFSS is an annual phone survey conducted by the Centers for Disease Control and Prevention (CDC) and covers demographic and socioeconomic information, health status, and health behaviors. As previously mentioned, I first harmonized data from 2017-2024. As the online database contains data in XPT format for SAS, I first wrote a script to batch convert the data files from XPT to CSV for analysis in R. I selected data back to 2017 for convenience and in anticipation of computational limitations. The current iteration of BRFSS methodology is compatible as far back as the 2011 survey year, and the harmonization methods I utilized could extend that far as well. The BRFSS dataset is quite extensive, including raw survey responses and calculated and imputed values. When possible, I deferred to calculated variables to match existing methodological standards. Feature selection was an iterative process as I became familiar with and accustomed to the BRFSS documentation. In the end, I included survey weighting and design variables, demographic information, health status indicators, and health behavior indicators. After finalizing harmonization and generating my final dataset, I had 50 variables and nearly 3.5 million observations. This would reduce as I narrowed the scope and refined my research design. For a full list of the included variables, see supplement Final_panel_dict.csv. *Supplement 2.6 - BRFSS Data Wrangling Automation R file availble on request.**

Before analysis, the dataset was extensively cleaned and features were converted to factors. BRFSS data has multiple forms of missing data indicators, with different indicators for unsure responses, refusal to respond, and simply missing or unrecorded responses. The calculated variables from the BRFSS dataset largely did not have this issue, with such responses already collapsed to a single missing code. However, key engineered features would rely on majority raw data, so missing codes were manually converted for all features that needed it. As all non-design variables were categorical or binary, they were also factored and labeled accordingly at this stage.

After factoring all categorical variables, I designed key indicators that I would use to construct the outcome variable. I aggregated six disability indicators into DIS_ANY (presence of any disability) and eight chronic health condition indicators into CHC_ANY (presence of any chronic health conditions). As these were binary variables, I took the opportunity to use a one-hot coding scheme to impute missing values with missingness indicators. This allowed me to maintain statistical power by losing far fewer observations from dropping rows with missing values. I calculated HLTH_NEED, which is a binary indicator of whether an individual had some form of health need, such as chronic health conditions or reported poor general health. LACK_ACS is another binary feature that denotes a lack of health insurance, no personal doctor, or delayed care due to cost. HLTH_NEED and LACK_ACS then created UNMET_NEED (the presence of any health needs while lacking any form of access to healthcare). I then combined UNMET_NEED with DIS_ANY to show whether an observation was a part of the population that was the target of this research. This feature would allow us to calculate the proportion of the disabled population for each state-year that had unmet health needs relative to those that did not.

With feature engineering completed, I then summarized the data by state and year to get the summary statistics that show us the percentage of the disabled population per state-year that had unmet health needs. To maintain representativeness of the data, I used the BRFSS weighting variable _LLCPWT in the summary calculation. This is part of the raking method that is used in the BRFSS study, which is calculated from existing state demographic data to ensure that studies like this produce results that are representative of the demographic makeup of a given state. Figure 1 demonstrates this by showing the percentage of disabled adults with unmet health needs per state in 2023.

The second stage of data collection involved the UKCPR dataset, which spans 1980 to 2024 and contains information about state socioeconomic status and state policy, such as minimum wage and Supplemental Security Income (SSI) participation (University of Kentucky, 2026). As both datasets were in a compatible state-year panel format, I selected the predictors of interest and joined the data. See Figure 6 for list of features.

Exploratory data analysis uncovered some insights. First, tracking the national average percentage of unmet health needs in the target population shows a significant decrease from 2019 to 2021, from just under 35% of the population to just over 25% experiencing unmet health needs before increasing again through 2024 (Figure 2). This is likely due to the COVID-19 pandemic, and could have resulted from a number of factors, such as shifting healthcare practices and community response, mortality rates among vulnerable populations, or socioeconomic assistance such as stimulus checks. This foreshadowed that national-level shocks would likely have a significant impact on our outcome variable as an unobserved covariate.

A scale and reliability check revealed a quirk of the data – the 2024 year of the BRFSS survey had continued into 2025. As a result, there were 15 states for 2025 that had less than 50 observations before aggregation (Figure 3), which inflated the outcome variable significantly (Figure 4). Additionally, the predictor set pulled from the UKCPR dataset only had records into 2024. 2025 was therefore dropped from the dataset due to being incomplete by design.

In order to facilitate prediction of change across years, I calculated whether each year showed an increase in the proportion of the disabled population with unmet health needs over the prior year as increased_dis_unmet_need. This set up the classification problem that would allow us to predict the rise of unmet health needs across the country.

Supplement 2.7 - BRFSS Feature Engineering and EDA QMD document is available upon request.

Results

Before training models, I conducted a Hausman Test of Consistency to determine whether state fixed effects or random effects would be more appropriate. The Hausman Test failed to reject the null hypothesis of consistency of the random-effects estimator (chi^2(13) = 17.95, p = 0.16), indicating that random effects are consistent and more efficient. However, to maintain methodological consistency with machine learning workflows, state fixed effects will still be used for robustness.

A PLM with state fixed effects was conducted to check for direction, magnitude, and stability of effects within the predictor set. It revealed two primary effects. A state’s unemployment rate showed a minor negative effect with a stable signal (B = -0.09, |t| = 6.06, p < 0.001), indicating that as unemployment rate increases, the chance that a state will increase in unmet health needs decreases. Total supplemental breakfast program (SBP) participation showed a moderate positive effect on the outcome with a stable signal (B = 1.08e-6, |t| = 4.55, p < 0.001). While additional coefficients were not significant, this does not imply a lack of relationship and could be due to lower within-state change over year or between-state interactions like national shocks. Overall, the model shows strong relevance of predictors (F = 16.30, p < 0.001) and moderately meaningful explanatory power for within-state changes across years (r^2 = 0.23).

All models followed the same formula, predicting Increased_dis_unmet_need from 13 state policy and socioeconomic predictors as utilized in the Hausman Test and PLM prior. Before training machine learning models, a train-test split was created by holding out the final year of the data (2024). 5-fold state-grouped cross validation with upsampling and preprocessing (scale, center) was conducted on the training split to reduce the risk of intra-state leakage. Thresholds were tuned on CV probabilities and evaluated using ROC AUC. I used a caret workflow to train and test the models, ensuring consistent methodology between models. The pooled OLS model was conducted outside of the caret framework, and as such required manual preprocessing. While this model was cross validated by the same train/test split as the other models, it did not receive k-fold tuning.

The pooled OLS regression with state-clustered SEs acted as a baseline to compare predictive power against. This model had a sensitivity of 0.72 and a specificity of 0.07 on the hold-out test set. This trade off benefits the goal of predicting the increase of unmet health needs as we want the most opportunities to plan interventions. However, this model performed poorly on balanced accuracy. A balanced accuracy of 0.39 indicates that this model performed poorly. Balanced accuracy below 0.50 is considered to be less effective than random guessing for predicting cases. (Figure 5)

The cross validated ridge model showed an ROC AUC of 0.704 at a threshold of 0.51, which decreased to 0.574 on the held-out test set. Model sensitivity increased from 0.746 on CV to 0.889 on hold-out, suggesting that it selected the positive case more on the final test. Mode specificity decreased significantly from 0.628 to 0.067, suggesting that there were far more false positive flagged by this model in the test than the CV. This is further reflected by balanced accuracy, which dropped from 0.687 in the CV set to 0.478 in the held-out set. The lasso model showed similar trends to the ridge model. At a threshold of 0.49, ROC AUC dropped from 0.703 (CV) to 0.55 (hold-out). Sensitivity inflated more than on the ridge model, jumping from 0.754 on the CV set to 0.917 on the hold-out set. Specificity dropped from 0.581 (CV) to 0.067 (hold-out). Based on balanced accuracy, the lasso model performed worse on the hold-out set (0.492) than on the CV set (0.668). Both penalized regression models show poor predictive performance. Balanced accuracy below 0.50 demonstrates that these models are systematically misclassifying classes. (Figure 5)

At a threshold of 0.38, the ROC AUC of the decision tree model dropped from 0.638 (CV) to 0.496 (hold-out). Sensitivity and specificity showed a more moderate shift between cross validated and hold-out performance on these metrics than the penalized regression models (Sens: CV 0.672 -> Hold-out 0.722; Spec: CV 0.57 -> Hold-out 0.4). This model performed better than the ridge and lasso on balanced accuracy (CV = 0.621, Held-out = 0.561), showing modest improvement over random guessing. The random forest model showed an ROC AUC of 0.701 on the CV set and a 0.656 on the held-out set at a threshold of 0.36. Sensitivity was stable compared to other models, only shifting 0.04 points between 0.821 (CV) and 0.861 (Held-out). Specificity dropped significantly between the CV set (0.5) and held-out set (0.133). The random forest model performed just as poorly on classification as the penalized regression models (Balanced accuracy: CV = 0.66, Held-out = 0.497), showing consistent patterns of a low signal-to-noise ratio or limited explanatory power of the models. (Figure 5)

Supplement 3.2 – BRFSS prediction model comparison QMD file available on request.

Conclusions

While the decision tree model performed the best, it is important to recognize that the benefit in predictive accuracy over random guessing was only marginal at a difference of only 0.061 points. Due to the small sample size of the train and test data splits, it is likely that this marginal improvement could be due to change.

Although the PLM model showed significant effects between limited predictors and the increase of unmet health needs across the country, the magnitude of those effects were marginal. This, combined with the performance of the machine learning models, suggests that the feature set are not plausible predictors on their own, and unobserved within-state and between-state effects are likely introducing noise and obscuring the signal.

I would recommend a few methodological changes to address these concerns. First is handling the computational limitations of aggregating BRFSS data. Instead of aggregating individual level data in bulk through data harmonization, I would recommend aggregating each survey year first, then aggregating it into a state-year panel. This would alleviate restraints introduced by large-scale data and ensure that the full catalogue of available data (2011-present) could be utilized.

Next, I would also recommend expanding selected predictors and performing feature selection through a lasso regression or PCA analysis identify stronger correlates to use as predictors. This alone would improve predictive performance significantly.

Finally, I would address two concerns on the approach of machine learning. First, I suggest a regression approach rather than a classification approach. While classifying year-over-year increase is a simple and interpretable approach, it would likely be more insightful to predict the degree to which unmet health needs are expected to change. Second, assuming additional survey years are added to future research, I would change the train-test split from an all-but-one approach (train on 2017-2023, test on 2024) to a proportional split. I believe a 70/30 or 80/20 split would be appropriate given the limited set of possible years.

References

Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026]. Available at https://www.cdc.gov/brfss/data_documentation/index.htm

Microsoft. (2026). Microsoft 365 Copilot (GPT‑5–based AI assistant): Aggregate use, February–May 2026 [Large language model]. https://www.microsoft.com/microsoft-365/copilot

University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).

Ethics and Fairness Considerations

This research exists within the public health and policy domains, but intended use of this research remains strictly educational. Results herein do not imply causality between the phenomena examined. Future works should address the methodological and ethical concerns addressed here.

The data sourced for this research is a publicly-available and anonymized dataset hosted by the Centers for Disease Control and Prevention and the University of Kentucky Center for Poverty Research (see references for attribution). Due to data aggregation, there exists no risk for reidentification of participants of neither the BRFSS survey nor data aggregated by the UKCPR.

Microsoft Copilot was used for methodological research, code scaffolding and debugging. Lack of methodological experience introduced a risk of over-reliance on LLM output. This was mitigated by direct code validation and testing by the user as well as cross-reference output with R documentation, course materials, and other sources. No copyrighted material nor identifiable data was input into the AI assistant, and only summary, aggregate, or results data and original code was used in interpretive or debugging tasks.

Appendix

Load resources

The following data is used to generate the following figures and may be modified or abridged for web deployment and demonstration purposes. Original resources, code, or data are available by request.

Show code
# Join us_states with desired information from class_test
min_data <- data %>%
  select(all_of(c("X_STATE", "IYEAR", "pct_DisUnmetNeed", "state_name", "state_abbr"))) %>%
  filter(IYEAR == 2023)

us_states_sf <- sf::st_as_sf(
  maps::map("state", plot = FALSE, fill = TRUE)
)

# Join final dataset to include pct_DisUnmetNeed
us_states_sf <- us_states_sf %>%
  left_join(min_data, by = c("ID" = "state_name"))

# summary(us_states_sf$pct_DisUnmetNeed)

us_states_sf <- sf::st_transform(us_states_sf, crs = 5070)

ne_states <- c("CT","RI","MA","VT","NH","NJ","DE","MD","DC", "WV", "VA", "NC", "SC")

# Create table of labels to overlay onto ggplot
state_labels_sf <- us_states_sf %>%
  filter(!state_abbr %in% ne_states) %>%
  sf::st_centroid() %>%
  mutate(
    label = paste0(
      toupper(state_abbr), "\n",
      round(pct_DisUnmetNeed * 100, 1), "%"
    )
  )

state_labels_crowded <- us_states_sf %>%
  filter(state_abbr %in% ne_states) %>%
  sf::st_point_on_surface() %>%
  mutate(
    label = paste0(
      toupper(state_abbr), "\n",
      round(pct_DisUnmetNeed * 100, 1), "%"
    )
  )

ggplot(us_states_sf) +
  geom_sf(aes(fill = pct_DisUnmetNeed), color = "gray90", size = 0.1) +
  geom_sf_text(
    colour = "white",
    data = state_labels_sf,
    aes(label = label),
    size = 2.5,
    lineheight = 0.95
  ) +
  ggrepel::geom_label_repel(
    color = "black",
    background = "white",
    data = state_labels_crowded,
    aes(label = label, geometry = geom),
    size = 2.4,
    lineheight = 0.9,
    box.padding = 0.02,
    max.overlaps = Inf,
    direction = "both",
    nudge_x = 600000,
    nudge_y = -300000,
    segment.color = "gray70",
    stat = "sf_coordinates"
  ) +
  scale_fill_viridis_c('% Unmet Need', begin = 0.25, end = 0.75) +
  labs(
    title = "Proportion of unmet health needs in disabled adult population",
    subtitle = "Per-state averages for 2023",
    caption = "Data from BRFSS 2023"
  ) +
  theme_void() +
  theme(
    panel.background = element_rect(fill = "gray90"),
    plot.margin = margin_auto(1, unit = "cm"),
    plot.background = element_rect(
      fill = "grey90"
    )
  )
Figure 1: Percentage of disabled adults with unmet health needs per state in 2023

Show code
analysis_data %>%
  group_by(IYEAR) %>%
  summarise(mean_unmet = mean(pct_DisUnmetNeed, na.rm = TRUE)) %>%
  filter(IYEAR != 2025) %>%
  ggplot(aes(IYEAR, mean_unmet)) +
  geom_line() +
  theme_minimal() +
  labs(
    title = "Annual trend of % unmet health need",
    subtitle = "National average",
    caption = "Data from BRFSS",
    x = "Year",
    y = "Percent unmet need"
  )
Figure 2

Show code
analysis_data %>%
  group_by(IYEAR) %>%
  summarise(
    below_50 = sum(n_obs < 50, na.rm = TRUE),
    below_100 = sum(n_obs < 100, na.rm = TRUE),
    below_200 = sum(n_obs < 200, na.rm = TRUE),
    below_1000 = sum(n_obs < 1000, na.rm = TRUE)
  ) %>%
  filter(IYEAR == 2025) %>%
  pivot_longer(
    cols = -IYEAR,
    names_to = "missing_category",
    values_to = "n_states"
  ) %>%
  ggplot(aes(x = missing_category, y = n_states)) +
  geom_col() +
  labs(
    title = "Number of states with low observation count for 2025"
  )
Figure 3: Sample size discrepancies for 2025

Show code
analysis_data %>%
  arrange(desc(pct_DisUnmetNeed)) %>%
  select(X_STATE, IYEAR, pct_DisUnmetNeed, n_obs) %>%
  filter(IYEAR == 2025 & !is.na(pct_DisUnmetNeed)) %>%
  ggplot(aes(x = pct_DisUnmetNeed, y = n_obs)) +
  geom_jitter() +
  labs(
    title = "Number of observations vs. percent population",
    subtitle = "States with low observation count misrepesent population",
    x = "Percentage of disabled population with unmet health needs",
    y = "Number of observations within state"
  )
Figure 4: Low sample size skews descriptive statistics.

Show code
model_comp <- read_csv("model_comp.csv")

tab_mod_comp <- model_comp %>%
  gt() %>%
  
  tab_spanner(
    label = "ROC AUC",
    columns = c(cv_ROC, test_ROC)
  ) %>%
  
  tab_spanner(
    label = "Balanced Accuracy",
    columns = c(cv_BalAcc, test_BalAcc)
  ) %>%
  
  tab_spanner(
    label = "Sensitivity",
    columns = c(cv_sens, test_sens)
  ) %>%
  
  tab_spanner(
    label = "Specificity",
    columns = c(cv_spec, test_spec)
  ) %>%
  
  cols_label(
    cv_ROC = "CV",
    test_ROC = "Test",
    cv_BalAcc = "CV",
    test_BalAcc = "Test",
    cv_sens = "CV",
    test_sens = "Test",
    cv_spec = "CV",
    test_spec = "Test",
    cv_threshold = "Best Threshold"
  ) %>%
  cols_align(align = "center", -model) %>%
  fmt_number(columns = where(is.numeric), decimals = 3)

tab_mod_comp
model
ROC AUC
Best Threshold
Balanced Accuracy
Sensitivity
Specificity
CV Test CV Test CV Test CV Test
Baseline pooled OLS NA 0.485 0.500 NA 0.469 NA 0.806 NA 0.133
Ridge 0.704 0.574 0.510 0.687 0.478 0.746 0.889 0.628 0.067
Lasso 0.703 0.550 0.490 0.668 0.492 0.754 0.917 0.581 0.067
Decision Tree 0.638 0.496 0.380 0.621 0.561 0.672 0.722 0.570 0.400
Random Forest 0.701 0.656 0.360 0.660 0.497 0.821 0.861 0.500 0.133
Figure 5: ML Model performance comparison - key metrics

Show code
final_panel_dict <- read_csv("final_panel_dict.csv")

kableExtra::kable(final_panel_dict)
Variable Name Data Type Rows Example Percent Missing Description Source
X integer 432 1 0.00 Row index Automatically generated
state_abbr character 432 AL 5.56 State abbreviation ID Merged from FIPS code crosswalk table
X_STATE numeric 432 1 0.00 State FIPS code ID Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
IYEAR integer 432 2017 0.00 Survey year ID State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
n_obs integer 432 6656 0.93 Number of observations in a given state-year State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
n_disabled numeric 432 1264375.85058943 0.93 Number of disabled adults in a given state-year State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
pct_disabled numeric 432 0.352780164871994 0.93 Percent of total population that is disabled in a given state-year State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
n_lackAccess numeric 432 1310927.67766966 0.93 Number of total population that lacks access to medical care in a given state-year State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
pct_lackAccess numeric 432 0.352597254382074 0.93 Percentage of total population that lacks access to medicare care in a given state-year State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
n_hlthNeed numeric 432 2350251.8209082 0.93 Number of total population that has health needs in a given state-year State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
pct_hlthNeed numeric 432 0.979887463223286 0.93 Percentage of total population that has health needs in a given state-year State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
n_unmetNeed numeric 432 784498.281722188 0.93 Number of total population that has unmet health needs in a given state-year - lackAccess & hlthNeed State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
pct_unmetNeed numeric 432 0.335237323608871 0.93 Percentage of total population that has unmet health needs in a given state-year - lackAccess & hlthNeed State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
n_DisUnmetNeed numeric 432 415974.92867029 0.93 Number of disabled adults with unmet health needs in a given state-year - disabled & unmetNeed State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
pct_DisUnmetNeed numeric 432 0.363192906699961 0.93 Percentage of disabled adult population with unmet health needs in a given state-year - disabled & unmetNeed State-year aggregate from: Centers for Disease Control and Prevention (CDC). Behavioral Risk Factor Surveillance System Survey Data. Atlanta, Georgia: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, [2026].
Population integer 432 4874486 5.56 Population count for a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
Poverty_Rate numeric 432 15 5.56 Poverty rate for a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
Unemployment_rate numeric 432 4.4 5.56 Unemployment rate for a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
Personal_income numeric 432 199999800 5.56 (Median?) Personal income for a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
State_Minimum_Wage numeric 432 7.25 5.56 Minimum wage in a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
Marginally_Food_Insecure numeric 432 24.10363 5.56 Rate of marginal food insecurity in a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
Food_Insecure numeric 432 13.44144 5.56 Rate of moderate food insecurity in a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
Very_Low_Food_Secure numeric 432 5.10377 5.56 Rate of low food insecurity in a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
Food_Stamp_Recipients integer 432 804336 5.56 Number of food stamp recipients for a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
SSI_recipients integer 432 165002 5.56 Number of recipients of supplemental security income for a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
Medicaid_beneficiaries integer 432 1017416 5.56 Number of medicaid beneficiaries for a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
WIC_participation integer 432 123993 5.56 Total participation of Women, Infant, Children special nutrition program for a given state-year University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
SBP_Total_Participation integer 432 271324 5.56 Supplemental Breakfast Program participation - obtained from UKCPR dataset University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
Medicaid_expansion numeric 432 0 5.56 Percent of the year medicaid expansion - obtained from UKCPR dataset University of Kentucky Center for Poverty Research. (2026, Feb). UKCPR National Welfare Data, 1980-2024. Lexington, KY. Available at https://ukcpr.uky.edu/resources/national-welfare-data (accessed March 31, 2026).
state_name character 432 alabama 5.56 State name identifier - spelled out Manually engineered
increased_dis_unmet_need integer 432 1 13.43 Final outcome var - Engineered from BRFSS proxy variables - if (pct_dis_unmet_need > lag(pct_dis_unmet_need) then Increase, else Decrease Final outcome var - Engineered from BRFSS proxy variables - if (pct_dis_unmet_need > lag(pct_dis_unmet_need) then Increase, else Decrease
Figure 6: Data dictionary for final panel. Includes variables, descriptions, example entries, percent missing, and data provenance.

The following supplements are available upon request:

  • Supplement 2.6 – BRFSS Data Wrangling Automation.R: Reproducible code to harmonize BRFSS data
  • Supplement 2.7 – BRFSS Feature Engineering and EDA.qmd: Reproducible code for feature engineering and EDA
  • Supplement 3.2 – BRFSS prediction model comparison.qmd: Reproducible code for ML design and evaluation