Background

We described five policy issues in random order: minimum wage, housing, healthcare, education, and climate. Within the housing policy, participants saw one of two messages: neutral description (similar to the other ones) and zero-sum description.

See materials here

Participants indicated their support for each policy and the extent to which they see the issue as zero-sum.

Then, they gave their priorities for the policies in percentages (must sum 100). We’d expect to see greater priority for housing in the zero-sum condition over the control condition.

Demographics

Race

df_cbzs_elg %>% 
  group_by(race) %>% 
  summarise(N = n()) %>% 
  ungroup() %>% 
  mutate(Perc = round(100*(N/sum(N)),2)) %>% 
  ungroup() %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
race N Perc
Asian 11 5.5
Black or African American 37 18.5
Hispanic, Latino, or Spanish origin 7 3.5
Middle Eastern or North African 1 0.5
Native Hawaiian or Other Pacific Islander 1 0.5
White 132 66.0
multiracial 10 5.0
NA 1 0.5

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() %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
gender N Perc
man 105 52.5
other 2 1.0
woman 93 46.5

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.72 12.41

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 1 0.5
GED 47 23.5
2yearColl 22 11.0
4yearColl 96 48.0
MA 23 11.5
PHD 11 5.5

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 15 7.5
Lower Middle Class 50 25.0
Middle Class 104 52.0
Upper Middle Class 29 14.5
Upper Class 2 1.0

Working Class

Do you see yourself as part of the working class?

df_cbzs_elg %>% 
  group_by(wrkclass) %>% 
  summarise(N = n()) %>% 
  ungroup() %>% 
  mutate(Perc = round(100*(N/sum(N)),2)) %>% 
  ungroup() %>% 
  arrange(desc(N)) %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
wrkclass N Perc
Yes 139 69.5
No 34 17.0
Not sure 26 13.0
1 0.5

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()

Politics

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_density(aes(x = score), fill = "lightblue") +
  scale_x_continuous(limits = c(1,7),
                     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)

Party ID

df_cbzs_elg %>% 
  group_by(party_id) %>% 
  summarise(N = n()) %>% 
  ungroup() %>% 
  mutate(Perc = round(100*(N/sum(N)),2)) %>% 
  ungroup() %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
party_id N Perc
Democrat 65 32.5
Independent 63 31.5
Republican 72 36.0

Vote in 2020

df_cbzs_elg %>% 
  group_by(vote_2020) %>% 
  summarise(N = n()) %>% 
  ungroup() %>% 
  mutate(Perc = round(100*(N/sum(N)),2)) %>% 
  ungroup() %>% 
  arrange(desc(N)) %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
vote_2020 N Perc
Joe Biden 86 43
Donald Trump 70 35
I did not vote 38 19
Third-party candidate 6 3

Vote in 2024

df_cbzs_elg %>% 
  group_by(vote_2024) %>% 
  summarise(N = n()) %>% 
  ungroup() %>% 
  mutate(Perc = round(100*(N/sum(N)),2)) %>% 
  ungroup() %>% 
  arrange(desc(N)) %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
vote_2024 N Perc
Joe Biden 76 38.0
Donald Trump 75 37.5
I will not vote 26 13.0
Other 10 5.0
Robert F. Kennedy Jr.  9 4.5
Cornel West 2 1.0
Jill Stein 2 1.0

Measures

Support

To what extent do you oppose or support this policy? (1 = Strongly Oppose to 7 = Strongly Support)

means <- df_cbzs_elg %>%
  dplyr::select(PID,minwage_support,housing_support,health_support,edu_support,climate_support) %>% 
  pivot_longer(-PID,
               names_to = "issue",
               values_to = "support") %>% 
  filter(!is.na(support)) %>% 
  separate(issue,into = c("issue","temp"),sep = "_") %>% 
  select(-temp) %>% 
  group_by(issue) %>% 
  summarise(score = mean(support)) %>% 
  ungroup()

df_cbzs_elg %>%
  dplyr::select(PID,minwage_support,housing_support,health_support,edu_support,climate_support) %>% 
  pivot_longer(-PID,
               names_to = "issue",
               values_to = "support") %>% 
  filter(!is.na(support)) %>% 
  separate(issue,into = c("issue","temp"),sep = "_") %>% 
  select(-temp) %>%  
  ggplot(aes(x = support)) +
  geom_histogram(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(~issue,nrow = 2)

ok, cool. I think we’ll just have to filter our those who under 4 in support for housing policy.

Zero-sum

The need for this policy is driven by one group gaining at another group’s expense (1 = Strongly Disagree to 7 = Strongly Agree)

means <- df_cbzs_elg %>%
  dplyr::select(PID,minwage_zs,housing_zs,health_zs,edu_zs,climate_zs) %>% 
  pivot_longer(-PID,
               names_to = "issue",
               values_to = "zs") %>% 
  filter(!is.na(zs)) %>% 
  separate(issue,into = c("issue","temp"),sep = "_") %>% 
  select(-temp) %>% 
  group_by(issue) %>% 
  summarise(score = mean(zs)) %>% 
  ungroup()

df_cbzs_elg %>%
  dplyr::select(PID,minwage_zs,housing_zs,health_zs,edu_zs,climate_zs) %>% 
  pivot_longer(-PID,
               names_to = "issue",
               values_to = "zs") %>% 
  filter(!is.na(zs)) %>% 
  separate(issue,into = c("issue","temp"),sep = "_") %>% 
  select(-temp) %>% 
  ggplot(aes(x = zs)) +
  geom_histogram(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(~issue,nrow = 2)

I like it.

Priority

Now, we ask you to indicate how important it is to you that each of the policies gets passed.

To that end, you have a sum of 100 points. Please allocate those points to the five policies described above based on how important they are to you.

For example, if all policies are equally important, each of them would get 20 points. If you think policy X is more important than policy Y, then policy X would get more points than policy Y.

means <- df_cbzs_elg %>%
  dplyr::select(PID,priority_minwage,priority_housing,priority_health,priority_edu,priority_climate) %>% 
  pivot_longer(-PID,
               names_to = "issue",
               values_to = "weight",
               names_prefix = "priority_") %>% 
  filter(!is.na(weight)) %>% 
  group_by(issue) %>% 
  summarise(weight = mean(weight)) %>% 
  ungroup()

means %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
issue weight
climate 16.12
edu 21.35
health 25.23
housing 19.94
minwage 17.36
df_cbzs_elg %>%
  dplyr::select(PID,priority_minwage,priority_housing,priority_health,priority_edu,priority_climate) %>% 
  pivot_longer(-PID,
               names_to = "issue",
               values_to = "weight",
               names_prefix = "priority_") %>% 
  filter(!is.na(weight)) %>% 
  ggplot(aes(x = weight)) +
  geom_histogram(fill = "lightblue",
                 binwidth = 1) +
  scale_x_continuous(limits = c(-1,101),
                     breaks = seq(0,100,20)) +
  geom_vline(data = means,mapping = aes(xintercept = weight),
             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(~issue,nrow = 2)

Analysis

DV: Zero-Sum manipulation check

Descriptives

df_cbzs_elg %>% 
  group_by(cond) %>% 
  summarise(mean = mean(housing_zs,na.rm = T),
            sd = sd(housing_zs,na.rm = T)) %>% 
  ungroup() %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
cond mean sd
ctrl 3.86 1.869587
zs 3.98 1.917385

oh man. what a bummer.

DV: Support for housing

Descriptives

df_cbzs_elg %>% 
  group_by(cond) %>% 
  summarise(mean = mean(housing_support,na.rm = T),
            sd = sd(housing_support,na.rm = T)) %>% 
  ungroup() %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
cond mean sd
ctrl 5.20 1.814643
zs 5.62 1.674406

Stats

m1 <- t_test(housing_support ~ cond,data = df_cbzs_elg)

m1 %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
.y. group1 group2 n1 n2 statistic df p
housing_support ctrl zs 100 100 -1.701009 196.7328 0.0905

Plot

df_cbzs_elg %>%
  ggplot(aes(x = cond,y = housing_support,color = cond,fill = cond)) +
  scale_color_manual(values = c("darkred",
                                "darkblue")) +
  scale_fill_manual(values = c("darkred",
                                "darkblue")) +
  geom_violinhalf(position = position_nudge(0.15),
                  #fill = "gray23",
                  alpha = 0.4,
                  size = 1) +
  geom_jitter(alpha = 0.6,
             size = 1,
             position = position_jitter(0.15)) +
  stat_summary(fun.data = "mean_cl_boot",
               size = 1,
               geom = "linerange",
               color = "#080807",
               position = position_dodge(width = 0.3)) +
  stat_summary(fun = "mean",
               geom = "point",
               size = 3,
               position = position_dodge(width = 0.3)) +
  stat_summary(fun = "mean",
               shape = 1,
               geom = "point",
               size = 3,
               position = position_dodge(width = 0.3),
               color = "black") +
  scale_x_discrete(expand = c(0.4,0.2)) +
  scale_y_continuous(limits = c(1,7)) +
  expand_limits(x = 2) +
  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.x = element_text(color = "black",
                                   face = "bold",
                                   size = 12),
        axis.text.y = element_text(color = "black",
                                   face = "bold",
                                   size = 12),
        axis.title.y = element_text(color = "black",
                                   face = "bold",
                                   size = 12))

Ok.

DV: Priority for housing

Descriptives

df_cbzs_elg %>% 
  group_by(cond) %>% 
  summarise(mean = mean(priority_housing,na.rm = T),
            sd = sd(priority_housing,na.rm = T)) %>% 
  ungroup() %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
cond mean sd
ctrl 20.68 13.61660
zs 19.20 13.08635

Stats

m1 <- t_test(priority_housing ~ cond,data = df_cbzs_elg)

m1 %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
.y. group1 group2 n1 n2 statistic df p
priority_housing ctrl zs 100 100 0.7836677 197.6884 0.434

Plot

df_cbzs_elg %>%
  ggplot(aes(x = cond,y = priority_housing,color = cond,fill = cond)) +
  scale_color_manual(values = c("darkred",
                                "darkblue")) +
  scale_fill_manual(values = c("darkred",
                                "darkblue")) +
  geom_violinhalf(position = position_nudge(0.15),
                  #fill = "gray23",
                  alpha = 0.4,
                  size = 1) +
  geom_jitter(alpha = 0.6,
             size = 1,
             position = position_jitter(0.15)) +
  stat_summary(fun.data = "mean_cl_boot",
               size = 1,
               geom = "linerange",
               color = "#080807",
               position = position_dodge(width = 0.3)) +
  stat_summary(fun = "mean",
               geom = "point",
               size = 3,
               position = position_dodge(width = 0.3)) +
  stat_summary(fun = "mean",
               shape = 1,
               geom = "point",
               size = 3,
               position = position_dodge(width = 0.3),
               color = "black") +
  scale_x_discrete(expand = c(0.4,0.2)) +
  #scale_y_continuous(limits = c(1,7)) +
  expand_limits(x = 2) +
  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.x = element_text(color = "black",
                                   face = "bold",
                                   size = 12),
        axis.text.y = element_text(color = "black",
                                   face = "bold",
                                   size = 12),
        axis.title.y = element_text(color = "black",
                                   face = "bold",
                                   size = 12))

this is a big bummer.

DV: Priority for housing (excluding opposers)

Let’s try to exclude those who don’t support this policy.

Descriptives

df_cbzs_elg_excl <- df_cbzs_elg %>% 
  filter(housing_support > 4)

df_cbzs_elg_excl %>% 
  group_by(cond) %>% 
  summarise(mean = mean(priority_housing,na.rm = T),
            sd = sd(priority_housing,na.rm = T)) %>% 
  ungroup() %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
cond mean sd
ctrl 23.36111 14.35496
zs 20.59259 13.05735

fuckin hell

Stats

m1 <- t_test(priority_housing ~ cond,data = df_cbzs_elg_excl)

m1 %>% 
  kbl() %>% 
  kable_styling(bootstrap_options = "hover",
                full_width = F,
                position = "left")
.y. group1 group2 n1 n2 statistic df p
priority_housing ctrl zs 72 81 1.24224 144.4808 0.216

Plot

df_cbzs_elg_excl %>%
  ggplot(aes(x = cond,y = priority_housing,color = cond,fill = cond)) +
  scale_color_manual(values = c("darkred",
                                "darkblue")) +
  scale_fill_manual(values = c("darkred",
                                "darkblue")) +
  geom_violinhalf(position = position_nudge(0.15),
                  #fill = "gray23",
                  alpha = 0.4,
                  size = 1) +
  geom_jitter(alpha = 0.6,
             size = 1,
             position = position_jitter(0.15)) +
  stat_summary(fun.data = "mean_cl_boot",
               size = 1,
               geom = "linerange",
               color = "#080807",
               position = position_dodge(width = 0.3)) +
  stat_summary(fun = "mean",
               geom = "point",
               size = 3,
               position = position_dodge(width = 0.3)) +
  stat_summary(fun = "mean",
               shape = 1,
               geom = "point",
               size = 3,
               position = position_dodge(width = 0.3),
               color = "black") +
  scale_x_discrete(expand = c(0.4,0.2)) +
  #scale_y_continuous(limits = c(1,7)) +
  expand_limits(x = 2) +
  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.x = element_text(color = "black",
                                   face = "bold",
                                   size = 12),
        axis.text.y = element_text(color = "black",
                                   face = "bold",
                                   size = 12),
        axis.title.y = element_text(color = "black",
                                   face = "bold",
                                   size = 12))

ugh this is so lame.