Analysis of Bomb Threats in Selected Pennsylvania Precincts

Author

Tessa Jones

Introduction

Might election-day bomb threats, often resulting in temporary closures of polling places, negatively affect voter turnout? Or do election administration procedures maintain a high resiliency when faced with security disruptions? Furthermore, how do rates of vote type, such as mail ballot, impact the intensity voter disruption? These questions have perhaps never been more pressing, as the Brennan Center 2024 Election Bomb Tracker (n.d.) has confirmed at least 227 bomb threats during the 2024 general election across the country. This research will distinguish between participation and composition effects, and examine voter data to interpret whether the presence of election-day bomb threats reflect statistically significant citizen mobilization or substitution.

Through Difference-in-Difference analysis, this paper concludes the threat group did not experience a differential change in voter turnout, use of mail ballots experienced an additional relative decline, and there was no differential change in party-vote shares over time. Election officials work tirelessly to ensure election security, and in the face of targeted attacks they moved swiftly to provide voting alternatives and reestablish control of the crises to uphold democracy.

My research design, which analyzes variation across 23 precincts within 3 counties of Pennsylvania during the 2024 presidential election, allows us to assess the effect of a specific locality and type of threat in the context of a heavily contested swing state. Of the 227 threats reported, Pennsylvania received 32, with 10 occurring in Philadelphia County alone. While all of these events thankfully did not result in bombings, multiple polling locations, election offices, and tabulation centers were temporarily closed for police investigation.

This study is important for 3 reasons. First, it allows us to evaluate the effectiveness of current election administration crises response in confronting unexpected security dilemmas, even if none of the threats resulted in a physical crime scene. Second, by analyzing vote type we can shed a light on the possible increased resiliency of mail ballot (MB) voting compared to at-polls (AP). Finally, in a key swing state, won by just over 100,000 total votes, any reasonable democracy should be alarmed at attempts of possible election interference. It has been revealed the emails originated from Russian email domains, and an analysis of voter party registration may illuminate any concentrated effort to compromise not only Pennsylvania’s election, but the chief executive of the United States as well.

Why Pennsylvania?

Unlike some states, Pennsylvania does not offer early voting, and thus any election day disruptions would be felt severely by all voters not using a mail or absentee ballot. I have selected 3 counties for examination due to the available documentation of local periodicals: Chester, Centre, and Philadelphia. These counties all together received 23 of the nations bomb threats. Philadelphia alone, a highly populated county of just over 1.5 million residents, experienced 20 of these threats across 2 wards. Centre County received one threat which resulted in evacuating their Willowbank polling site (located in Bellefonte) for 1 hour as the police conducted investigation. The election staff was readmitted into the building at 8:20pm, and County Administrator, John Franek, Jr., stated, “the Elections Office and ballots were under constant supervision while the building was swept” in a Centre County Board of Commissioners Press Release (2024). Chester county received threats across two precincts early in the morning that evacuated a site in West Chester and a Government Services Center location early in the morning for K9 bomb sweeps, reported Fox 29 Philadelphia (2024). To reduce any disruption, officials had voters rerouted to cast their votes in nearby counties and received judicial permission to extended election hours until 10pm. Voters who were supposed to cast ballots at West Goshen S-2 and West Goshen S-4 (Precincts 280 and 286, respectively) were redirected to Precincts 275 (West Goshen S-1) and Precinct 285 (West Goshen S-3). Specifically, the alternate sites were located at West Chester 7th Day Adventist Church and Glen Acres Elementary School.

threat_precincts <- c(
  "0201","0202","0203","0204","0206","0209",
  "0211","0212","0213","0214","0215","0216",
  "0217","0219","0220","0221","0224","0226",
  "3311","3312","280", "286", "05"
  )

These cases highlight some of the various deescalation methods Election Offices engaged in, collaborating with law enforcement and the judicial system for a dynamic response. Officials from each of the three counties assert that election results were not impacted from these events. Unfortunately, we are not privy to the details of ongoing local, state, and FBI investigations into this matter, but James Barnacle, Deputy Assistant Director of the FBI’s Criminal Division, confirmed “foreign malign influence operations” and “some attempted cyber attacks” in a FBI Election Command Post Interview (2024) on November 4, 2024. While the specific details of certain precinct’s responses remain unclear, multiple news sources claim the threats had “little impact” or election day remained “mostly orderly” across the country. This paper focuses on a specific, localized sample of threats to examine American election security.

Pennsylvania flipped from blue to red between 2020 and 2024. This leads to a particular interest in the party percentages of targeted precincts to investigate possibilities of a concentrated effort to silence certain voter demographics. Additionally, while not an initial cause for selection, these counties account for 33% of the 9 Pennsylvania counties that went blue in 2024- a continued trend from the 2020 general election, where Chester, Centre, and Philadelphia were also won by the Democrats. Furthermore, it is not lost that the location of Donald Trump’s alleged attempted assassination in July, 2024, was in Butler, Pennsylvania (which may have sparked increased activism in local Republican voters).

2024 Presidential Election Results via Politico

Data and Methods

This study uses a series of models to estimate whether the presence of bomb threats on election day affected turnout in the 2024 general election, accounting for vote type, vote party, and party registration percentages to analyze if the targeted precincts were systematically different from other precincts of the same counties. For the purposes of this analysis, the “treatment” is to be considered the presence of a bomb threat on November 4, 2024, at an active public polling location. Our treatment must assume that these individuals did not self-select, or that residents do not chose where to live based on the possibility of future election bomb threats, as this is a highly improbable cause for deciding where to live one’s daily life.

This data set includes 1.52 million registered voters from combined Chester, Centre, and Philadelphia County voter exports the time of the 2024 general election. Using a voter file from September 22, 2025, we first must mutate registration date format and filter to remove citizens who registered after November 3, 2020 to recreate the 2020 voter file.

Further organizing our data, we will group by precinct and label vote type and party by year, as well as calculate the total number of active and registered voters.

X27_2020 <- fve_2020 %>%
  group_by(X27) %>%
  summarise(
    D_2020 = sum(vparty_2020 == "D", na.rm = TRUE),
    R_2020 = sum(vparty_2020 == "R", na.rm = TRUE),
    AP_2020 = sum(vtype_2020 == "AP", na.rm = TRUE),
    MB_2020 = sum(vtype_2020 == "MB", na.rm = TRUE),
    voters_2020 = n()
  ) %>%
  mutate(year = 2020)

X27_2024 <- fve_2024 %>%
  group_by(X27) %>%
  summarise(
    D_2024 = sum(vparty_2024 == "D", na.rm = TRUE),
    R_2024 = sum(vparty_2024 == "R", na.rm = TRUE),
    AP_2024 = sum(vtype_2024 == "AP", na.rm = TRUE),
    MB_2024 = sum(vtype_2024 == "MB", na.rm = TRUE),
    voters_2024 = n()
  ) %>%
  mutate(year = 2024)

We will then convert both data sets to a long format with matching column names and combine 2020 and 2024 precinct data into one data set.

Empirical Strategy

Turnout percentage = ((AP+ MB) / voters) * 100

Proportion of mail ballot votes was calculated by dividing the MB counts with total votes cast.

Proportion of Republican votes was calculated by dividing R precinct sums with total votes cast.

This study uses baseline DiD specifications:

Outcome = β0 + β1 Treat + β2 Time + β3 (Treat × Time) + ε

After adding DiD variables, we will begin with the DiD for turnout percentages.

X27_combined <- X27_combined %>%
  mutate(
    treat = if_else(X27 %in% threat_precincts, 1, 0),
    time  = if_else(year == 2024, 1, 0)
  )

X27_combined <- X27_combined %>%
  mutate(
    turnout_pct = ((AP + MB) / voters) * 100
  )

model <- lm(turnout_pct ~ treat + time + treat*time, data = X27_combined)
summary(model)

Call:
lm(formula = turnout_pct ~ treat + time + treat * time, data = X27_combined)

Residuals:
    Min      1Q  Median      3Q     Max 
-62.258  -5.903   4.898  12.910  31.487 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  56.8914     0.4441 128.096   <2e-16 ***
treat         5.3670     4.1632   1.289    0.197    
time         11.5859     0.6281  18.446   <2e-16 ***
treat:time    0.1990     5.8877   0.034    0.973    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 19.85 on 4038 degrees of freedom
Multiple R-squared:  0.07929,   Adjusted R-squared:  0.07861 
F-statistic: 115.9 on 3 and 4038 DF,  p-value: < 2.2e-16

This model shows turnout increased significantly over time between the two elections, and the threats did not meaningfully affect voter participation levels.

did_means <- X27_combined %>%
  group_by(treat, time) %>%
  summarise(
    mean_turnout = mean(turnout_pct, na.rm = TRUE),
    .groups = "drop"
  )

did_means <- did_means %>%
  mutate(
    group = ifelse(treat == 1, "Treated", "Control"),
    year  = ifelse(time == 1, "2024", "2020")
  )

ggplot(did_means, aes(x = year, y = mean_turnout, group = group)) +
  geom_line(aes(linetype = group), linewidth = 1) +
  geom_point(aes(shape = group), linewidth = 3) +
  labs(
    title = "Difference-in-Differences Plot",
    x = "Election Year",
    y = "Mean Turnout (%)",
    linetype = "Group",
    shape = "Group"
  ) +
  theme_minimal(base_size = 14)
Warning in geom_point(aes(shape = group), linewidth = 3): Ignoring unknown
parameters: `linewidth`

There was a systematic decrease in use of mail ballots between 2020 and 2024. Did threat precincts experience a significant change in vote type distribution?

vt_2020 <- fve_2020 %>%
  group_by(X27) %>%
  summarise(
    MB_2020 = sum(vtype_2020 == "MB", na.rm = TRUE),
    AP_2020 = sum(vtype_2020 == "AP", na.rm = TRUE),
    total_2020 = n()
  ) %>%
  mutate(
    mail_share_2020 = MB_2020 / total_2020,
    year = 2020
  )

vt_2024 <- fve_2024 %>%
  group_by(X27) %>%
  summarise(
    MB_2024 = sum(vtype_2024 == "MB", na.rm = TRUE),
    AP_2024 = sum(vtype_2024 == "AP", na.rm = TRUE),
    total_2024 = n()
  ) %>%
  mutate(
    mail_share_2024 = MB_2024 / total_2024,
    year = 2024
  )

vt_2020 <- vt_2020 %>%
  rename(MB = MB_2020,
         AP = AP_2020,
         total = total_2020,
         mail_share = mail_share_2020)

vt_2024 <- vt_2024 %>%
  rename(MB = MB_2024,
         AP = AP_2024,
         total = total_2024,
         mail_share = mail_share_2024)

vt_combined <- bind_rows(vt_2020, vt_2024)

vt_combined <- vt_combined |>
  group_by(X27) %>%
  filter(sum(total[year == 2020]) > 0) %>%
  ungroup()

vt_combined <- vt_combined %>%
  mutate(
    treat = if_else(X27 %in% threat_precincts, 1, 0),
    time = if_else(year == 2024, 1, 0),
    did = treat * time
  )

model_vt <- lm(mail_share ~ treat + time + treat:time, data = vt_combined)
summary(model_vt)

Call:
lm(formula = mail_share ~ treat + time + treat:time, data = vt_combined)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.37400 -0.05825 -0.00375  0.06804  0.46594 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.258381   0.002582 100.086  < 2e-16 ***
treat        0.115623   0.024200   4.778 1.83e-06 ***
time        -0.076469   0.003651 -20.945  < 2e-16 ***
treat:time  -0.065522   0.034223  -1.915   0.0556 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.1154 on 4038 degrees of freedom
Multiple R-squared:  0.1062,    Adjusted R-squared:  0.1055 
F-statistic: 159.9 on 3 and 4038 DF,  p-value: < 2.2e-16
vt_DDplot <- vt_combined %>%
  group_by(treat, year) %>%
  summarise(
    outcome_mean = mean(mail_share, na.rm = TRUE),
    .groups = "drop"
  )

ggplot(vt_DDplot, aes(x = year, y = outcome_mean, color = factor(treat), group = treat)) +
  geom_line(size = 1.2) +
  geom_point(size = 3) +
  scale_color_manual(
    name = "Treatment",
    values = c("0" = "blue", "1" = "red"),
    labels = c("Control", "Threat")
  ) +
  labs(
    x = "Year",
    y = "Outcome (vote type share / turnout)",
    title = "DD: Mail Ballot Votes in Threat vs Control Precincts"
  ) +
  theme_minimal(base_size = 14)
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.

Treated precincts initially relied more on mail ballot vote type than the control group. The threat precincts experienced a decline of 6.5 percentage points, showing marginally significant results. Overall, bomb threats are associated with a relative shift away from mail ballot voting, though the evidence is borderline.

Similarly, Republican vote share increased systematically over time by +10.6 percentage points.

vp_2020 <- fve_2020 %>%
  group_by(X27) %>%
  summarise(
    R_2020 = sum(vparty_2020 == "R", na.rm = TRUE),
    D_2020 = sum(vparty_2020 == "D", na.rm = TRUE),
    total_2020 = n()
  ) %>%
  mutate(
    R_share_2020 = R_2020 / total_2020,
    year = 2020
  )

vp_2024 <- fve_2024 %>%
  group_by(X27) %>%
  summarise(
    R_2024 = sum(vparty_2024 == "R", na.rm = TRUE),
    D_2024 = sum(vparty_2024 == "D", na.rm = TRUE),
    total_2024 = n()
  ) %>%
  mutate(
    R_share_2024 = R_2024 / total_2024,
    year = 2024
  )


vp_2020 <- vp_2020 %>%
  rename( R_share = R_share_2020)

vp_2024 <- vp_2024 %>%
  rename(R_share = R_share_2024)


vp_combined <- bind_rows(vp_2020, vp_2024)

### remove precintcs that didnt exist in 2020

vp_combined <- vp_combined |>
  group_by(X27) %>%
  filter(sum(total_2020[year == 2020]) > 0) %>%
  ungroup()

vp_combined <- vp_combined %>%
  mutate(
    treat = if_else(X27 %in% threat_precincts, 1, 0),
    time = if_else(year == 2024, 1, 0),
    did = treat * time
  )

model_vp <- lm(R_share ~ treat + time + treat:time, data = vp_combined)
summary(model_vp)

Call:
lm(formula = R_share ~ treat + time + treat:time, data = vp_combined)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.12494 -0.06614 -0.01774  0.01511  0.55392 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.021018   0.002240   9.382   <2e-16 ***
treat       -0.004413   0.020999  -0.210    0.834    
time         0.106121   0.003168  33.497   <2e-16 ***
treat:time  -0.018799   0.029697  -0.633    0.527    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.1001 on 4038 degrees of freedom
Multiple R-squared:  0.2189,    Adjusted R-squared:  0.2183 
F-statistic: 377.2 on 3 and 4038 DF,  p-value: < 2.2e-16

While control precincts initially had very low baseline R vote shares, there was no meaningful pre-treatment partisan difference. Threat precincts in 2024 experienced a -1.9 percent decrease in Republican vote proportion; not statistically significant. In conclusion, the treatment did not measurably affect partisan vote shares.

vp_DDplot <- vp_combined %>%
  group_by(treat, year) %>%
  summarise(
    outcome_mean = mean(R_share, na.rm = TRUE),
    .groups = "drop"
  )

ggplot(vp_DDplot, aes(x = year, y = outcome_mean, color = factor(treat), group = treat)) +
  geom_line(size = 1.2) +
  geom_point(size = 3) +
  scale_color_manual(
    name = "Treatment",
    values = c("0" = "blue", "1" = "red"),
    labels = c("Control", "Threat")
  ) +
  labs(
    x = "Year",
    y = "Outcome (vote type share / turnout)",
    title = "DD: Rep. Vote Proportion in Threat vs Control Precincts"
  ) +
  theme_minimal(base_size = 14)

This is further confirmed by a look at 2024 precinct vote type and party distributions, which show increased Republican and mail ballot votes in precincts 05, 280, and 286. The trends of increased Republican mail ballot shares and Republican turnout in these cases aligns with expected results from pre-existing election data science literature that mail ballots party shares should reflect overall turnout party shares. This reinforces that vote-type differences reflect behavioral consistency, not artifacts of treatment. It also supports interpretation of vote-type DD results as compositional rather than turnout-driven.

Interpretation and Limitations

Between 2020 and 2024 there were strong time effects and null treatment effects across outcomes. This implies changes were driven by broader electoral dynamics rather than election day bomb threats.

As all outcomes are measured at the precinct level it limits the ability of this study to distinguish changes in individual behavior and confirm matching of residents between years. These results should be interpreted as aggregate behavioral patterns, not individual causal effects.

Furthermore, this analysis relies on one pre-treatment and one post-treatment election, restricting formal testing of parralel trends or further dynamic/delayed effects. Any treatment effect must be interpreted against a backdrop of powerful national or statewide trends. Thus, while pre-treatment differences are small, the parallel trends assumption cannot be directly verified beyond visual inspection.

Finally, while DiD controls for time-invariant differences, it does not account for precinct-level shocks coinciding with treatment or any localized voter mobilization efforts that could bias estimates if correlated with treatment status.

Conclusion

This study examined the effects of election day bomb threats on voter turnout, vote method, and partisan vote share. Across all three outcomes, turnout increased substantially over time, but not differentially in treated precincts. Vote method composition shifted, with treated precincts showing a relative decline in mail ballot voting method. Republican vote share increased overall, but exhibited no treatment-specific change.

Taken together, the results suggest the treatment did not decrease overall voters, nor did it meaningfully alter partisan alignment. Instead, its most noticeable association is with how votes were cast, not whether or for whom. As mail ballots must be cast ahead of election day, further research is needed to determine why certain individuals chose MB over AP voting and if this self-selection had compounded effects.

The supplemental graph reveals mail ballot vote party was consistent with at-polls vote party, confirming that observed vote-type differences are stable behavioral patterns rather than artifacts of the treatment or data construction. Given that Democrats and Republicans can be observed benefiting from MB over AP votes, this research succinctly concludes mail ballot vote type greatly mitigates the effects of election-day security disruptions for voters.Voting method choice reflects enduring precinct-level characteristics.

These findings align with a growing body of research suggesting that institutional or contextual changes often reshape voting logistics without necessarily altering turnout or partisan outcomes. Policies may affect how voters engage with elections, even when they do not change who participates or who wins. This research finds limited evidence of treatment effects on electoral participation or partisan outcomes, but some evidence of shifts in voting behavior. These results highlight the importance of separating mobilization, substitution, and composition when evaluating electoral interventions.

In summary, election officials moved swiftly to detour voters and reopen any closed facilities, ultimately negating a statistically significant decrease in voter turnout from bomb threats. Perhaps the most important steps the election administrators and legislators took in minimizing the effects of security threats was taken years before November 4, 2024, with the passing of Act No. 88 (2022). This bill ensured public funding of elections, established the Pennsylvania Election Integrity Grant Program, and strengthened the powers and duties of county boards in certifying election integrity. New vote counting technologies expedited the tabulation process and swift police intervention allowed operations to continue with minimal disruption. It seems it will take more to compromise American election procedures than some hoax Russian bomb threats.

Further analysis with an increased sample size of counties will be required to advance the claims of this study. Next steps include voter matching, analyzing further Pennsylvania counties, multi-model regression data, and possibly including other states county’s that also experienced bomb threats (such as Fulton, Georgia, which received 32 threats). While these threats took place in an important swing state and focused on above average Democratic precincts, more data is required to determine if these threats produced a negative effect for state-wide election results.