Who Bears the Brunt? Visualizing the Areas Most Impacted by Trump’s Grant Cuts

Proposal

This project examines trends in National Science Foundation research grants terminated under the Trump Administration in 2025 adopting a data visualization approach through the creation and interpretation of unique plots.
Author
Affiliation

Nathaniel Cross

School of Government and Public Policy, University of Arizona

# install and load packages
if(!require(pacman))
  install.packages("pacman")

pacman::p_load(tidyverse,
               janitor)

devtools::install_github("tidyverse/dsbox")

Dataset

# Read in dataset
raw_terminations <- read_csv("data/nsf_terminations_airtable.csv")

# Clean data (code sourced from TidyTuesday)
terminations <- raw_terminations |> 
  janitor::clean_names() |> 
  mutate(usaspending_obligated = stringi::stri_replace_first_fixed(usaspending_obligated, "$", "") |> 
           readr::parse_number()) |> 
  mutate(in_cruz_list = !is.na(in_cruz_list)) |> 
  mutate(grant_number = as.character(grant_number)) 

# Preview data
terminations |>
  glimpse()
Rows: 1,653
Columns: 22
$ grant_number            <chr> "2301180", "2347423", "2238071", "2327447", "2…
$ project_title           <chr> "Cognitive Mechanisms of Guided Instruction in…
$ termination_letter_date <date> 2025-05-15, 2025-05-15, 2025-05-15, 2025-05-1…
$ org_name                <chr> "Harvard University", "Harvard University", "H…
$ org_city                <chr> "CAMBRIDGE", "CAMBRIDGE", "CAMBRIDGE", "CAMBRI…
$ org_state               <chr> "MA", "MA", "MA", "MA", "MA", "MA", "MA", "MA"…
$ org_district            <chr> "MA05", "MA05", "MA05", "MA05", "MA05", "MA05"…
$ nsf_total_budget        <chr> "$1500000", "$350000", "$1361007", "$338170", …
$ usaspending_obligated   <dbl> 1031634, 350000, 925967, 338170, 342550, 50055…
$ award_type              <chr> "Continuing Grant", "Standard Grant", "Continu…
$ directorate_abbrev      <chr> "EDU", "ENG", "BIO", "EDU", "SBE", "BIO", "CIS…
$ directorate             <chr> "STEM Education", "Engineering", "Biological S…
$ division                <chr> "Research on Learning in Formal and Informal S…
$ nsf_program_name        <chr> "ECR-EDU Core Research", "FD-Fluid Dynamics", …
$ nsf_url                 <chr> "https://www.nsf.gov/awardsearch/showAward?AWD…
$ usaspending_url         <chr> "https://www.usaspending.gov/award/ASST_NON_23…
$ nsf_startdate           <date> 2023-08-01, 2024-03-01, 2023-03-01, 2023-09-1…
$ nsf_expected_end_date   <date> 2028-07-31, 2027-02-28, 2028-02-29, 2025-08-3…
$ org_zip                 <chr> "021385366", "021385366", "021385366", "021385…
$ org_uei                 <chr> "LN53LCFJFL45", "LN53LCFJFL45", "LN53LCFJFL45"…
$ abstract                <chr> "The purpose of this study is to compare the r…
$ in_cruz_list            <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS…
dim(terminations)
[1] 1653   22
colnames(terminations)
 [1] "grant_number"            "project_title"          
 [3] "termination_letter_date" "org_name"               
 [5] "org_city"                "org_state"              
 [7] "org_district"            "nsf_total_budget"       
 [9] "usaspending_obligated"   "award_type"             
[11] "directorate_abbrev"      "directorate"            
[13] "division"                "nsf_program_name"       
[15] "nsf_url"                 "usaspending_url"        
[17] "nsf_startdate"           "nsf_expected_end_date"  
[19] "org_zip"                 "org_uei"                
[21] "abstract"                "in_cruz_list"           
terminations$directorate |>
  unique()
 [1] "STEM Education"                                  
 [2] "Engineering"                                     
 [3] "Biological Sciences"                             
 [4] "\"Social, Behavioral and Economic Sciences\""    
 [5] "Computer and Information Science and Engineering"
 [6] "\"Technology, Innovation and Partnerships\""     
 [7] "Mathematical and Physical Sciences"              
 [8] "Geosciences"                                     
 [9] "Office of the Director"                          
[10] NA                                                
# Missings report
sapply(terminations, function(x) sum(is.na(x)))
           grant_number           project_title termination_letter_date 
                      0                       0                       4 
               org_name                org_city               org_state 
                      0                       0                       0 
           org_district        nsf_total_budget   usaspending_obligated 
                      0                       0                       2 
             award_type      directorate_abbrev             directorate 
                      0                       2                       2 
               division        nsf_program_name                 nsf_url 
                      2                       1                       0 
        usaspending_url           nsf_startdate   nsf_expected_end_date 
                      0                       0                       0 
                org_zip                 org_uei                abstract 
                      0                       1                       2 
           in_cruz_list 
                      0 

The above dataset yields from Grant Watch, an independent project whose goal is to track the termination of scientific research grants under the Trump Administration’s second term (beginning in 2025). It is led by Noam Ross, a computational researcher and Executive Director of rOpenSci, and Scott Delaney, a research scientist at Harvard University’s Department of Environmental Health. Although Grant Watch collects data on grants allocated by both the National Institutes of Health and the National Science Foundation (NSF), the scope of this project is reduced to grants terminated under the NSF largely due to the accessibility of this data from TidyTuesday.

The NSF Grant Terminations dataset is sourced largely by submissions from affected investigators and researchers at institutions across the United States, as well as from user-submitted lists of terminated grants, all of which are corroborated via the NSF’s Award Search function and USAspending.gov. No centralized government database exists for tracking terminated grants.

The dataset includes 1653 rows and 22 columns. Key columns include the project title and abstract for which the grant was awarded, value of the grant, dates of awarding and termination, and details about the organization the grant was allocated to. Both numerical and categorical variables are represented in the dataset, and a more comprehensive breakdown of these variables can be found in the glimpse() above, or in the metadata/readme.

I chose this dataset for two primary reasons: the first is that as a student in the Master of Public Policy program, I find federal policy very interesting. This is especially true given the scope of the changes seen since the beginning of Trump’s second term, including drastic measures like slashing research grants. The other main reason I selected this dataset is due to the contemporary relevance of this issue: the Trump Administration is enacting these terminations live, and this data is both formative and still evolving. Tracking these terminations is critical to documenting these measures aimed at inhibiting scientific research in the United States. And although I am well aware that the plots produced here will hardly rival the research I’m sure is being investigated on these grants, I find it important to increase awareness to both the scope of these terminations as well as the chaos surrounding them, making documentation ever more difficult.

Questions

1. Which scientific domains saw the highest grant termination rates?

This question uses directorates to compare the dollar value of terminated grants over time. NSF directorates are the highest levels of administrative organizations administering grants. Examples include STEM Education and Social, Behavioral, and Economic Sciences.

Hypothesis: I expect directorates relating to STEM research to be most affected at the outset of the cancellations.

2. Were grant terminations clustered by geography or motivated by states’ political leanings?

This question attempts to analyze how the quantity of grants terminated varies by state, and will superimpose state partisanship to understand how heterogeneity in terminated grants is impacted by this variable.

Hypothesis: I expect Democrat-leaning states may have more grants canceled due to the polarized nature of these terminations.

Analysis Plans

Question 1

  1. Data wrangling: select the necessary variables for this plot: directorate, a character categorical column to identify the NSF organization awarding the grant; usaspending_obligated, the dollar value of funding lost by the grant terminations; and termination_letter_date, the date when the organization was informed of the termination of the grant. This variable is used as a proxy for termination date as actual expected end dates of the grants are only estimated and not confirmed. I do not expect to need further wrangling.

  2. Create plot: I envision time-series plots of moving averages of value of grant over time. These plots will be faceted by directorate. Based on what I’ve researched, ggplot has moving average functionality within the geom_ma() function, however if this is not able to capture the variation I want, I can calculate the moving averages by directorate in the data wrangling process.

  3. *Note: as revealed in the above code chunk, there are very few missing observations (four missings from termination_letter_date, two from directorate, and two from usaspending_obligated). Hence, these rows will be dropped when coding this plot.

Question 2

  1. Data wrangling: sum the number of grants terminated by state, collapse the dataset. This will result in two variables: org_state and a new variable, terminations_quant, a double. There will be one row per state. No missing values will be generated as there are no missing org_state observations.
  2. Merge dataset of 2024 presidential Electoral College outcomes by state (i.e. whether the state’s electoral votes were allocated to Kamala Harris or Donald Trump). This will yield the creation of a new binary variable, elect_trump_24, a logic variable equal to 1/TRUE if the state allocated all (or a majority in the cases of Nebraska and Maine) of its electoral votes to Donald Trump in 2024, or 0/FALSE if the votes were allocated to Kamala Harris.
  3. *Note: I have yet to figure out how to encode both of these variables (terminations_quant and elect_trump_24 into the aesthetic mappings of the map plot. I do not know whether I have to encode them both into a single variable (where positive values of quantity of grants terminated represent “red” states and negative values represent “blue” states), or if I can separately map these variables onto fill and intensity aesthetics. Advice would be appreciated.
  4. *Note: I also need to figure out a way to standardize the grant terminations variable. Solely using the quantity of grants terminated will introduce skewness as larger, more populated states will inherently have more grants that can be cancelled, thereby veiling the relationship between a state’s partisanship and the number of grants cancelled. I could do this by using the value of grants terminated divided by the state’s GDP, but I am not sold on this solution. Again, advice would be appreciated.
  5. Create plot: I envision a map plot of states in the United States with each state colored either red or blue by 2024 presidential election result and the number of grants terminated mapped to the intensity of the color). States without a winner-take-all electoral system (i.e. Nebraska and Maine) will be coded by the candidate who won the majority of that state’s electoral votes in 2024 (Trump in Nebraska and Harris in Maine). This behavior will be noted in the write-up and in the plot itself.
  6. The plot will be first introduced by showing a single state coded by its 2024 presidential outcome and quantity of grant terminations. This will help ease the viewer into understanding the chart. Then the whole country will be displayed as well as smaller/regional chunks of areas with smaller/more dense states. This helps ensure that the mapped data is viewable in every state.
  7. A table of the grant terminations by state will be shown in the write-up to allow for more detailed analysis.

Plan of Attack

Task Status Due Priority Summary
Finalize proposal for peer review Completed 2025-06-13 High
Respond to peer reviews Completed 2025-06-18 Medium Amended proposal to address issues, closed issues.
Submit for instructor review Completed 2025-06-18 High
Question 1 plotting Completed 2025-07-02 High Personal deadline: 2025-06-26
Question 2 plotting Completed 2025-07-02 High Personal deadline: 2025-06-26
Write-up In progress 2025-07-02 Low Personal deadline: 2025-06-28
Presentation Not started 2025-07-02 Low Personal deadline: 2025-06-28
Revision Not started 2025-07-02 Low Personal deadline: 2025-06-29
Final .qmd publication Not started 2025-07-02 Low Personal deadline: 2025-06-29