Background
The purpose of this wave is to recruit participants for the
longitudinal study. To be eligible as swing voters, they had to check
two of these four criteria:
1. Their vote choices between 2020 vote recall, the 2024 two-way ballot,
and the 2024 six-way ballot are not consistent.
2. Their vote choices between the 2024 two-way ballot, the 2024 six-way
ballot, and generic congressional ballot are not all consistent.
3. They report similar ratings for Harris favorability and Trump
favorability.*
4. They say they are considering at least two options in 2024 (Harris,
Trump, third-party, not voting).
Full sample
First, let’s check the demographics and responses of the full
sample
Demographics
Race
df_cbzs %>%
group_by(race) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
race
|
N
|
Perc
|
White
|
3083
|
65.48
|
Black or African American
|
678
|
14.40
|
Asian
|
357
|
7.58
|
multiracial
|
313
|
6.65
|
Hispanic, Latino, or Spanish origin
|
195
|
4.14
|
Other (please specify)
|
23
|
0.49
|
NA
|
22
|
0.47
|
American Indian or Alaska Native
|
20
|
0.42
|
Middle Eastern or North African
|
11
|
0.23
|
Native Hawaiian or Other Pacific Islander
|
6
|
0.13
|
Gender
df_cbzs %>%
mutate(gender = ifelse(is.na(gender) | gender == "","other",gender)) %>%
group_by(gender) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
gender
|
N
|
Perc
|
woman
|
2422
|
51.44
|
man
|
2203
|
46.79
|
other
|
83
|
1.76
|
Age
df_cbzs %>%
summarise(age_mean = round(mean(age,na.rm = T),2),
age_sd = round(sd(age,na.rm = T),2)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
age_mean
|
age_sd
|
40.2
|
12.61
|
Education
df_cbzs %>%
group_by(edu) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
edu
|
N
|
Perc
|
noHS
|
30
|
0.64
|
GED
|
1305
|
27.72
|
2yearColl
|
603
|
12.81
|
4yearColl
|
1895
|
40.25
|
MA
|
671
|
14.25
|
PHD
|
169
|
3.59
|
NA
|
35
|
0.74
|
Subjective SES
df_cbzs %>%
group_by(ses) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
ses
|
N
|
Perc
|
Lower Class
|
568
|
12.06
|
Lower Middle Class
|
1421
|
30.18
|
Middle Class
|
2145
|
45.56
|
Upper Middle Class
|
526
|
11.17
|
Upper Class
|
30
|
0.64
|
NA
|
18
|
0.38
|
Income
df_cbzs %>%
ggplot(aes(x = income)) +
geom_bar() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.ticks = element_blank(),
axis.line = element_line(color = "grey66"),
axis.text.y = element_text(color = "black"),
axis.text.x = element_text(color = "black",
face = "bold"),
axis.title.x = element_blank(),
axis.title.y = element_blank()) +
coord_flip()

Ideology
Participants were asked about the extent to which they subscribe to
the following ideologies on a scale of 1-7 (select NA if unfamiliar):
Conservatism, Liberalism, Democratic Socialism, Libertarianism,
Progressivism.
means <- df_cbzs %>%
dplyr::select(PID,ideo_con:ideo_prog) %>%
pivot_longer(-PID,
names_to = "ideo",
values_to = "score") %>%
filter(!is.na(score)) %>%
group_by(ideo) %>%
summarise(score = mean(score)) %>%
ungroup()
df_cbzs %>%
dplyr::select(PID,ideo_con:ideo_prog) %>%
pivot_longer(-PID,
names_to = "ideo",
values_to = "score") %>%
filter(!is.na(score)) %>%
ggplot() +
geom_histogram(aes(x = score),
fill = "lightblue",
binwidth = 1) +
scale_x_continuous(limits = c(0,8),
breaks = seq(1,7,1)) +
geom_vline(data = means,mapping = aes(xintercept = score),
color = "black",
linetype = "dashed",
size = 1.1) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.ticks = element_blank(),
axis.line = element_line(color = "grey66"),
axis.text.y = element_text(color = "black"),
axis.text.x = element_text(color = "black",
face = "bold")) +
facet_wrap(~ideo,nrow = 2)

Vote 2020
df_cbzs %>%
group_by(vote_2020) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
vote_2020
|
N
|
Perc
|
Joe Biden (Democratic Party)
|
2589
|
54.99
|
Donald Trump (Republican Party)
|
1356
|
28.80
|
I did not vote
|
621
|
13.19
|
Jo Jorgensen (Libertarian Party)
|
90
|
1.91
|
Howie Hawkins (Green Party)
|
33
|
0.70
|
|
19
|
0.40
|
Consider 2024
Which of the following options are you considering to vote for
president in 2024? Select ALL that apply.
Trump
df_cbzs %>%
mutate(consider_trump = ifelse(consider_trump == 1,"Trump",""),
consider_harris = ifelse(consider_harris == 1,"Harris","")) %>%
group_by(consider_trump) %>%
summarise(n = n()) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
consider_trump
|
n
|
|
2919
|
Trump
|
1789
|
Harris
df_cbzs %>%
mutate(consider_trump = ifelse(consider_trump == 1,"Trump",""),
consider_harris = ifelse(consider_harris == 1,"Harris","")) %>%
group_by(consider_harris) %>%
summarise(n = n()) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
consider_harris
|
n
|
|
1828
|
Harris
|
2880
|
Third party
df_cbzs %>%
mutate(consider_trump = ifelse(consider_trump == 1,"Trump",""),
consider_harris = ifelse(consider_harris == 1,"Harris","")) %>%
group_by(consider_third) %>%
summarise(n = n()) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
consider_third
|
n
|
|
4056
|
A third party candidate
|
652
|
No vote
df_cbzs %>%
mutate(consider_trump = ifelse(consider_trump == 1,"Trump",""),
consider_harris = ifelse(consider_harris == 1,"Harris","")) %>%
group_by(consider_novote) %>%
summarise(n = n()) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
consider_novote
|
n
|
|
4378
|
Not voting in 2024
|
330
|
Vote 2024: All
df_cbzs %>%
group_by(vote_2024_all) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
vote_2024_all
|
N
|
Perc
|
Kamala Harris (Democratic Party)
|
2567
|
54.52
|
Donald Trump (Republican Party)
|
1497
|
31.80
|
Not sure
|
221
|
4.69
|
Robert F. Kennedy Jr. (Independent)
|
175
|
3.72
|
I will not vote
|
110
|
2.34
|
Jill Stein (Green Party)
|
53
|
1.13
|
Cornel West (Independent)
|
38
|
0.81
|
Chase Oliver (Libertarian Party)
|
30
|
0.64
|
|
17
|
0.36
|
Vote 2024: Just two
df_cbzs %>%
group_by(vote_2024_justtwo) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
vote_2024_justtwo
|
N
|
Perc
|
Kamala Harris (Democratic Party)
|
2710
|
57.56
|
Donald Trump (Republican Party)
|
1626
|
34.54
|
Not sure
|
183
|
3.89
|
I will not vote
|
172
|
3.65
|
|
17
|
0.36
|
Vote 2024: Congress
df_cbzs %>%
group_by(congress_2024) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
congress_2024
|
N
|
Perc
|
The Democrat
|
2587
|
54.95
|
The Republican
|
1581
|
33.58
|
Don’t know
|
522
|
11.09
|
|
18
|
0.38
|
Favorability
means <- df_cbzs %>%
dplyr::select(PID,favor_trump,favor_harris) %>%
pivot_longer(-PID,
names_to = "candidate",
values_to = "score") %>%
filter(!is.na(score)) %>%
group_by(candidate) %>%
summarise(score = mean(score)) %>%
ungroup()
df_cbzs %>%
dplyr::select(PID,favor_trump,favor_harris) %>%
pivot_longer(-PID,
names_to = "candidate",
values_to = "score") %>%
filter(!is.na(score)) %>%
ggplot() +
geom_histogram(aes(x = score),
fill = "lightblue",
binwidth = 1) +
scale_x_continuous(limits = c(0,5),
breaks = seq(1,4,1)) +
geom_vline(data = means,mapping = aes(xintercept = score),
color = "black",
linetype = "dashed",
size = 1.1) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.ticks = element_blank(),
axis.line = element_line(color = "grey66"),
axis.text.y = element_text(color = "black"),
axis.text.x = element_text(color = "black",
face = "bold")) +
facet_wrap(~candidate,nrow = 1)

Eligibility
The number of criteria each participant checked off
df_cbzs %>%
group_by(crit_sum) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
crit_sum
|
N
|
Perc
|
0
|
2646
|
56.20
|
1
|
1024
|
21.75
|
2
|
534
|
11.34
|
3
|
368
|
7.82
|
4
|
136
|
2.89
|
Great. That gives us 1038. Now let’s take a look at our
eligibles.
Swing voters
Demographics
Race
df_cbzs_elg %>%
group_by(race) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
race
|
N
|
Perc
|
White
|
631
|
60.79
|
Black or African American
|
145
|
13.97
|
multiracial
|
95
|
9.15
|
Asian
|
86
|
8.29
|
Hispanic, Latino, or Spanish origin
|
44
|
4.24
|
NA
|
17
|
1.64
|
American Indian or Alaska Native
|
7
|
0.67
|
Other (please specify)
|
7
|
0.67
|
Middle Eastern or North African
|
5
|
0.48
|
Native Hawaiian or Other Pacific Islander
|
1
|
0.10
|
Gender
df_cbzs_elg %>%
mutate(gender = ifelse(is.na(gender) | gender == "","other",gender)) %>%
group_by(gender) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
gender
|
N
|
Perc
|
man
|
561
|
54.05
|
woman
|
439
|
42.29
|
other
|
38
|
3.66
|
Age
df_cbzs_elg %>%
summarise(age_mean = round(mean(age,na.rm = T),2),
age_sd = round(sd(age,na.rm = T),2)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
age_mean
|
age_sd
|
37.82
|
11.62
|
Education
df_cbzs_elg %>%
group_by(edu) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
edu
|
N
|
Perc
|
noHS
|
11
|
1.06
|
GED
|
340
|
32.76
|
2yearColl
|
132
|
12.72
|
4yearColl
|
383
|
36.90
|
MA
|
122
|
11.75
|
PHD
|
27
|
2.60
|
NA
|
23
|
2.22
|
Subjective SES
df_cbzs_elg %>%
group_by(ses) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
ses
|
N
|
Perc
|
Lower Class
|
163
|
15.70
|
Lower Middle Class
|
339
|
32.66
|
Middle Class
|
418
|
40.27
|
Upper Middle Class
|
97
|
9.34
|
Upper Class
|
4
|
0.39
|
NA
|
17
|
1.64
|
Income
df_cbzs_elg %>%
ggplot(aes(x = income)) +
geom_bar() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.ticks = element_blank(),
axis.line = element_line(color = "grey66"),
axis.text.y = element_text(color = "black"),
axis.text.x = element_text(color = "black",
face = "bold"),
axis.title.x = element_blank(),
axis.title.y = element_blank()) +
coord_flip()

Ideology
Participants were asked about the extent to which they subscribe to
the following ideologies on a scale of 1-7 (select NA if unfamiliar):
Conservatism, Liberalism, Democratic Socialism, Libertarianism,
Progressivism.
means <- df_cbzs_elg %>%
dplyr::select(PID,ideo_con:ideo_prog) %>%
pivot_longer(-PID,
names_to = "ideo",
values_to = "score") %>%
filter(!is.na(score)) %>%
group_by(ideo) %>%
summarise(score = mean(score)) %>%
ungroup()
df_cbzs_elg %>%
dplyr::select(PID,ideo_con:ideo_prog) %>%
pivot_longer(-PID,
names_to = "ideo",
values_to = "score") %>%
filter(!is.na(score)) %>%
ggplot() +
geom_histogram(aes(x = score),
fill = "lightblue",
binwidth = 1) +
scale_x_continuous(limits = c(0,8),
breaks = seq(1,7,1)) +
geom_vline(data = means,mapping = aes(xintercept = score),
color = "black",
linetype = "dashed",
size = 1.1) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.ticks = element_blank(),
axis.line = element_line(color = "grey66"),
axis.text.y = element_text(color = "black"),
axis.text.x = element_text(color = "black",
face = "bold")) +
facet_wrap(~ideo,nrow = 2)

Vote 2020
df_cbzs_elg %>%
group_by(vote_2020) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
vote_2020
|
N
|
Perc
|
I did not vote
|
370
|
35.65
|
Joe Biden (Democratic Party)
|
341
|
32.85
|
Donald Trump (Republican Party)
|
208
|
20.04
|
Jo Jorgensen (Libertarian Party)
|
74
|
7.13
|
Howie Hawkins (Green Party)
|
26
|
2.50
|
|
19
|
1.83
|
Consider 2024
Which of the following options are you considering to vote for
president in 2024? Select ALL that apply.
Trump
df_cbzs_elg %>%
mutate(consider_trump = ifelse(consider_trump == 1,"Trump",""),
consider_harris = ifelse(consider_harris == 1,"Harris","")) %>%
group_by(consider_trump) %>%
summarise(n = n()) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
consider_trump
|
n
|
|
551
|
Trump
|
487
|
Harris
df_cbzs_elg %>%
mutate(consider_trump = ifelse(consider_trump == 1,"Trump",""),
consider_harris = ifelse(consider_harris == 1,"Harris","")) %>%
group_by(consider_harris) %>%
summarise(n = n()) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
consider_harris
|
n
|
|
515
|
Harris
|
523
|
Third party
df_cbzs_elg %>%
mutate(consider_trump = ifelse(consider_trump == 1,"Trump",""),
consider_harris = ifelse(consider_harris == 1,"Harris","")) %>%
group_by(consider_third) %>%
summarise(n = n()) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
consider_third
|
n
|
|
587
|
A third party candidate
|
451
|
No vote
df_cbzs_elg %>%
mutate(consider_trump = ifelse(consider_trump == 1,"Trump",""),
consider_harris = ifelse(consider_harris == 1,"Harris","")) %>%
group_by(consider_novote) %>%
summarise(n = n()) %>%
ungroup() %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
consider_novote
|
n
|
|
769
|
Not voting in 2024
|
269
|
Vote 2024: All
df_cbzs_elg %>%
group_by(vote_2024_all) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
vote_2024_all
|
N
|
Perc
|
Kamala Harris (Democratic Party)
|
264
|
25.43
|
Donald Trump (Republican Party)
|
257
|
24.76
|
Not sure
|
190
|
18.30
|
Robert F. Kennedy Jr. (Independent)
|
110
|
10.60
|
I will not vote
|
106
|
10.21
|
Jill Stein (Green Party)
|
38
|
3.66
|
Cornel West (Independent)
|
31
|
2.99
|
Chase Oliver (Libertarian Party)
|
25
|
2.41
|
|
17
|
1.64
|
Vote 2024: Just two
df_cbzs_elg %>%
group_by(vote_2024_justtwo) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
vote_2024_justtwo
|
N
|
Perc
|
Kamala Harris (Democratic Party)
|
334
|
32.18
|
Donald Trump (Republican Party)
|
332
|
31.98
|
Not sure
|
183
|
17.63
|
I will not vote
|
172
|
16.57
|
|
17
|
1.64
|
Vote 2024: Congress
df_cbzs_elg %>%
group_by(congress_2024) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Perc = round(100*(N/sum(N)),2)) %>%
ungroup() %>%
arrange(desc(Perc)) %>%
kbl() %>%
kable_styling(bootstrap_options = "hover",
full_width = F,
position = "left")
congress_2024
|
N
|
Perc
|
Don’t know
|
380
|
36.61
|
The Republican
|
325
|
31.31
|
The Democrat
|
315
|
30.35
|
|
18
|
1.73
|
Favorability
means <- df_cbzs_elg %>%
dplyr::select(PID,favor_trump,favor_harris) %>%
pivot_longer(-PID,
names_to = "candidate",
values_to = "score") %>%
filter(!is.na(score)) %>%
group_by(candidate) %>%
summarise(score = mean(score)) %>%
ungroup()
df_cbzs_elg %>%
dplyr::select(PID,favor_trump,favor_harris) %>%
pivot_longer(-PID,
names_to = "candidate",
values_to = "score") %>%
filter(!is.na(score)) %>%
ggplot() +
geom_histogram(aes(x = score),
fill = "lightblue",
binwidth = 1) +
scale_x_continuous(limits = c(0,5),
breaks = seq(1,4,1)) +
geom_vline(data = means,mapping = aes(xintercept = score),
color = "black",
linetype = "dashed",
size = 1.1) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.ticks = element_blank(),
axis.line = element_line(color = "grey66"),
axis.text.y = element_text(color = "black"),
axis.text.x = element_text(color = "black",
face = "bold")) +
facet_wrap(~candidate,nrow = 1)
