---
title: "Political Party Affiliation and Zero-Sum Beliefs: Does Subjective Social Status Matter?"
format:
  html:
    toc: true
    code-fold: true
    code-summary: "Show the code"
author:
  - name: Aashia Khan
    corresponding: true
    affiliations:
      - Binghamton University
  - name: Zihan Hei
    orcid: 0009-0007-1617-2666
    affiliations:
      - Binghamton University
  - name: Jeff John
    affiliations:
      - Binghamton University
  - name: Shane McCarty
    orcid: 0000-0001-8930-7049
    corresponding: true
    affiliations:
      - Binghamton University
     
keywords:
  - zero sum beliefs
  - social identities
  - political affiliation
  - racial identity
abstract: |
    Democrats and Republicans perceive the opposite party's policies as dangerous to the future of the nation, viewing political elections as a zero-sum game. Zero-sum thinking is the psychological belief held to various degrees among the voting public that as one group gains another group must inherently lose, which may increase political polarization. The primary objective of the study is to examine whether zero-sum beliefs about numerous social identities, such as racial groups (White vs. Black), gender groups (Men vs. Women), and disability status (People without vs. with Disabilities) differ based on political party. A quota sample by gender, racialized identity, and political affiliation was recruited online using Prolific in April 2025. A final sample of 116 participants reported their zero-sum beliefs, social identities, political ideology, and Presidential voting in the 2024 election. Eleven two-way Analyses of Covariance (ANCOVA) tests were conducted, examining a zero-sum belief item as a function of subjective social status and political party affiliation (Democrat, Republican, Independent), including their interaction. Republican party membership was associated with significantly higher zero-sum social identity beliefs compared to Democrats across multiple items, with intercept differences ranging from b = 2.488 to b = 5.409. Subjective social status emerged as a significant positive predictor for several tests (b = 0.430 to 0.502, p < .01), indicating that higher perceived social standing was associated with greater endorsement of zero-sum beliefs among Democrats. Significant SSS x Political Party interactions were observed for four items, wealth inequality (ZEROSUM_3), gender-based sexism (ZEROSUM_4), transgender opportunity (ZEROSUM_6), and LGBTQ+ rights (ZEROSUM_9) with overall model fit ranging from R² = .157 - .247, p = .002 - .001, indicating that the relationship between social status and zero-sum thinking differed meaningfully across political groups. In this case, Republicans reported higher zero-sum beliefs than Independents or Democrats, and higher social status was associated with greater endorsement of zero-sum beliefs. Future research should examine zero-sum beliefs as a potential mechanism to reduce political polarization. 
    
bibliography: references.bib
csl: apa.csl
---

# Introduction

Zero-sum beliefs – the subjective view that as one person gains, others inevitably lose – have been linked to numerous beneficial and harmful social, political, and psychological outcomes (@andrews-fearonStatusZerosumGame2023). A zero-sum mindset can be conceptualized as a specific type of competitive belief regarding the relative distribution of limited resources (e.g., physical resources and social status) between two (or more) groups (e.g., racial groups). Although the origin of this mindset can be traced to inter-generational scarcity and high-competition environments for resources, other important factors may partially explain the adoption and centrality of zero-sum beliefs in the current U.S. political discourse.

In a seminal article, @nortonWhitesSeeRacism2011b demonstrates that White respondents' perceptions of anti-Black bias has decreased markedly since the 1950s while their perception of anti-White bias has increased significantly during that same period. A decade later, @rasmussenWhiteNotBlack2022 provide a conceptual replication of these findings and find that "Whites now believe that anti-White bias is more prevalent than anti-Black bias" (p. 1806). The line of research and related studies have led to the modern-day conception of zero-sum racial beliefs, which has been measured frequently using this item: "Less discrimination against minorities means more discrimination against Whites" (@davidaiPoliticsZerosumThinking2019b). @chinoyZerosumThinkingRoots2023 argue that zero-sum thinking is the root of political differences, demonstrating zero-sum beliefs partially explain a range of social and political views: pro-redistribution policy support, racial attitudes, gender attitudes, and anti-immigration attitudes beyond traditional sociodemographic measures of age, gender, race, income, and state of residence.

Zero-sum racial beliefs are a domain-specific belief about social groups, which differ from zero-sum economic beliefs. For example, people may hold beliefs that policies aimed at reducing income inequality unfairly disadvantage the wealthy, or that initiatives promoting equity give disadvantaged communities an ‘unearned’ advantage over advantaged individuals (@brownIfYouRise2022). A plethora of research lines show zero-sum domain-specific beliefs about economic groups and social groups, such as ethnic, citizenship, trade, and income (@chinoyZerosumThinkingRoots2023), as well as perceived competition between immigrants and native-born individuals (@essesImmigrationDilemmaRole2001). Though domain-specific beliefs can emerge across many areas, they are often most potent when tied to social identities, when political and interpersonal behavior is strongly influenced by perceived group competition.

## **Zero-Sum Social Identity Beliefs**

Many domain-specific zero-sum beliefs focus on social identity. For example, @wongLinkMensZerosum2017a found that men with zero-sum gender beliefs have poorer mental health outcomes, worse romantic relationships, and a more polarized view of domestic chores. On the other hand, according to @bolandZerosumBeliefsAvoidance2024a, zero-sum political beliefs can lead to a disinterest in political discussion because they lead individuals to antagonize other political ideologies and reduce openness to different ideas, leading to less cross-grup discussion and more polarization. In addition to examining one's actual standing as a member of a social group, understanding beliefs about one's own and other social groups may be key for addressing bias and assumptions about resource distribution.

## **Zero-Sum Economic Beliefs**

Zero-sum thinking takes on a unique form when viewed through a more hierarchical lens such as economics. @andrews-fearonStatusZerosumGame2023 posits that individuals who view the United States as more economically unequal were more likely to hold economic zero-sum beliefs. These individuals were therefore more likely to view the world as unjust. This falls in line with the aforementioned argument that zero-sum ideology often leads to prioritizing dominance and competition. On a more global scale, @hornborgCornucopiaZeroSumGame2003 explains dependency theory, a zero-sum economic framework that acknowledges how certain nations benefit at others expense. This theory claims that some nations exploit the resources of others, leading to the prosperity of the former while the latter suffers. Although economic zero-sum beliefs are much like other types of zero-sum thinking, they differ in that individuals belonging to one's own group are also thought of as competition. Both on a global and individual scale, the less wealthy are left competing with one another, rather than with the wealthy individuals or groups that oppress them.

## **Political Party Affiliation**

Political party affiliation is a key determinant of voter preference in elections. Several models aim to expain party affiliation and voting based on sociodemographics. For example, @nadeemChangingPartisanCoalitions2024 found that young people, women, and Black and Hispanic voters tend to be more Democratic leaning. Alternatively, White voters without 4 year degrees tend to lean Republican. However, this methodology struggles in that the social dynamics that determine the relationship between sociodemographics and political affiliation are subject to change. For example, a report by Pew Research Center ([2025](https://www.pewresearch.org/politics/2025/06/26/voting-patterns-in-the-2024-election/)) examines voting pattern shifts across the 2016, 2020, and 2024 Presidential elections by sociodemographic groups. While some groups tend to be more reliably associated with certain political parties at certain times, these relationships can change meaningfully in a few election cycles. In fact, such drastic shifts have led journalists and academics to speculate on whether a political realignment has taken shape in U.S. politics based on race, class, gender, education and their intersections [@barberCrucialRoleRace2024; @meyerDemocratsEmbraceDealignment2025]. However, many prior models have failed to capture the complex arrangements of sociodemographic variables and beliefs influencing voter preference. A report by Pew Research Center ([2021](https://www.pewresearch.org/politics/2021/11/09/beyond-red-vs-blue-the-political-typology/%5D)) provides evidence of 9 different typology groups making up the Republican and Democrat coalitions in 2020. The 6 typology groups within the Republican coalition and 5 typology groups within the Democrat coalition hold very different views on racial bias and social groups, economics, climate change, and health, among others. Prior research demonstrates that zero-sum belief scores differ by political party affiliation, but there is significant variation *within* political parties (@davisZeroSumThinkingRoots2024), suggesting zero-sum beliefs might explain overall differences between parties and identification with specific factions within the Republican and Democrat coalition.

## Study Aims

The objective of the study is to: 1) examine domain-specific zero-sum beliefs: zero-sum economic beliefs and zero-sum social identity beliefs, 2) test whether zero-sum beliefs differ based on political party and subjective social status, and 3) test whether subjective social status moderates the effect of political party on zero-sum beliefs.

# Methods

## Participants and Sampling

More than fifty-five thousand people who are active on the Prolific platform were eligible to complete a 45-minute health beliefs survey with measures on various beliefs associated with politics and health. Using a quota sample by gender (50% Man/ 50% Woman), political affiliation (33% Republican, 33% Democrat, and 34% Independent), and race/RACIALIDENTITY.4 (White 40%, Black 20%, Asian 20%, Mixed 10%, and Other 10%), Prolific recruited one hundred and twenty-five people to complete the survey.

A total of 135 individuals were recruited through Prolific, and 10 were excluded due to incomplete responses, yielding a final analytic sample of 125 participants. The final sample was roughly balanced in terms of gender (50.4% male), racial identity (White: 39.2%, Black: 22.4%, Asian: 18.4%, Mixed/Other: 17.6%), and political affiliation (Democrats: 34.4%, Independents: 32.0%, Republicans: 31.2%).

## Measures

### Subjective Social Status

Respondents reported their subjective social status using MacArthur's Ladder with the following options: 1 (lowest) to 10 (highest).

### Political Beliefs

Respondents reported their political beliefs using the following options: far left/leftist, very liberal, liberal, moderate, conservative, very conservative, alt-right/far-right.

### Political Party Affiliation

Respondents reported their political party affiliation to Prolific for the quota sampling: Democratic Party, Republican Party, or Independent.

### Zero-Sum Beliefs

Respondents were asked to report their level of agreement using a 7-point Likert scale (1: Strongly Disbelieve, 2: Disbelieve, 3: Somewhat Disbelieve, 4: Neither, 5: Somewhat Believe, 6: Believe, 7: Strongly Believe) with .

Respondents were asked to report their level of agreement to 11 zero-sum belief statements using items from two measures and unvalidated, self-generated statements on a 7-point Likert scale (1: Strongly Disbelieve, 2: Disbelieve, 3: Somewhat Disbelieve, 4: Neither Believe Nor Disbelieve, 5: Somewhat Believe, 6: Believe, 7: Strongly Believe). The first three items were selected from the *Belief in a Zero Sum Game* (BZSG) scale: 1) "Life is so devised that when somebody gains, others have to lose"; 2) "When some people are getting poorer, it means that other people are getting richer"; and 3) "The wealth of a few is acquired at the expense of many" ([@wojciszkeWiaraZycieJako2009; @rozycka-tranBeliefZeroSumGame2015]). An additional item was selected from a validated measure capturing beliefs about social identities: 4) "As women face less sexism, men end up facing more sexism" (@wilkinsYouCanWin2015). Using this sentence construction to examine a gain and loss for two specific groups, seven additional statement were created by the lead author with input from co-authors.

### Sociodemographics

Several other sociodemographic variables were collected: gender identity, racial identity, education, and 2024 voter behavior.

### Data Analysis Plan

Data was exported from the qualtrics platform in numerical format and imported into Posit Cloud. R code provided in the data science workflow (@wickhamWholeGameData2016) was modified to install R packages (see `install.R`), *import* data (`alldata.csv`) using `readr`, *transform* sociodemographic variables, such as gender identity (`GENDER`) to a binary variable (`GENDER_MAN`) using `dplyr`, *visualize* data in a raincloud plot using `ggplot2`.

We analyzed 11 zero-sum belief items (`ZEROSUM_`), covering both economic and social identity dimensions. Our primary goal was to assess differences across political affiliation (`POLITICALPARTY`) as a function of subjective social status (`SOCIALSTATUS`).

Analyses were conducted in R using series of two-way analysis of covariance (ANCOVA) models. Each model evaluated one zero-sum belief item as the outcome variable with subjective social status (SSS) as a continuous predictor and political party (Democrat, Republican, Independent) as a categorical predictor, along with their interaction term: $$\text{ZEROSUM}_i ~ \text{SOCIALSTATUS} \times \text{POLITICALPARTY}$$ {#eq-ANCOVA analysis equation}

ANCOVA was selected over ANOVA for the `SOCIALSTATUS` predictor because SSS is measured on a continuous scale. Treating SSS as continuous in a regression framework allows estimation of whether the linear relationship between SSS and zero-sum beliefs differs across political party groups. `POLITICALPARTY` was coded as a categorical factor with Democrat as the reference group, allowing for direct comparisons between Republicans and Independents relative to Democrats.

Models were estimated in R using the general linear model `lm()`. The F-statistic and model R-squared for each ANCOVA are reported to characterize overall model fit along with p-values to test main effects and interactions.

We used the `ggeffects` package to predicted marginal means plots to visualize and interpret significant interaction patterns.

# Results

```{r}
#| label: run-install
#| echo: false
#| output: false
#| warning: false
#| error: false
#| results: false

source("install.R")
```

```{r}
#| label: run-cleaning
#| echo: false
#| output: false
#| warning: false
#| error: false
#| results: false

source("clean.R")
```

```{r}
#| label: load-libraries
#| echo: false
#| output: false
#| warning: false
#| error: false
#| results: false

library(ggplot2)
library(dplyr)
library(tidyr)
library(ggdist)
library(patchwork)
library(knitr)
library(kableExtra)
library(ggeffects)
```

```{r}
#| label: import-data
#| warning: false
#| error: true

alldata    <- read.csv("data/alldata.csv")
select_data <- read.csv("data/select_data.csv")
```

```{r}
#| label: data-preprocessing
#| echo: true
#| warning: false

# Factor composites
select_data <- select_data %>%
  mutate(
    ZEROSUM_ECONOMIC = (ZEROSUM_2 + ZEROSUM_3) / 2,
    ZEROSUM_IDENTITY = (ZEROSUM_4 + ZEROSUM_5 + ZEROSUM_6 + ZEROSUM_7 +
                          ZEROSUM_8 + ZEROSUM_9 + ZEROSUM_10 + ZEROSUM_11) / 8
  )

# Party color palette 
party_colors <- c(
  "Democrat"    = "#0015BC",
  "Republican"  = "#E9141D",
  "Independent" = "#732C7B"
)

# Reorder party factor (Democrat as reference)
select_data <- select_data %>%
  mutate(POLITICALPARTY = factor(POLITICALPARTY,
                                  levels = c("Democrat", "Independent", "Republican")))
```




## Factor Analysis

### Factor Analysis of Zero-Sum Beliefs

The output below displays the **correlation matrix** of the *Zero-Sum Beliefs* items. Each cell represents the Pearson correlation between pairs of items. **ZEROSUM_1** is moderately positively correlated with most of the other zero-sum items (r = .092 - .462), suggesting a **general** zero-sum thinking. **ZEROSUM_2** and **ZEROSUM_3** also show a moderate positive correlation with each other (r = .479). Most notably, **ZEROSUM_4** through **ZEROSUM_11** are consistently and positively correlated, with moderately positive correlations (ranging from **0.46 to 0.68**), indicating a strong internal consistency among these items. This pattern supports the idea that these items are likely capturing a common latent construct.

```{r}
#| label: factor-analysis
#| fig.width: 6
#| fig.height: 4

library(psych)
# create data frame of ZEROSUM variables for factor analysis
df.ZEROSUM <- select_data[, c("ZEROSUM_1", "ZEROSUM_2", "ZEROSUM_3", "ZEROSUM_4", 
                                  "ZEROSUM_5", "ZEROSUM_6", "ZEROSUM_7", "ZEROSUM_8", 
                                  "ZEROSUM_9", "ZEROSUM_10", "ZEROSUM_11")]

# Or using dplyr to select variables
# zerosum_vars <- select_data %>% select(ZEROSUM_1:ZEROSUM_11)

# Check the correlation matrix first
cor_matrix <- cor(df.ZEROSUM, use = "complete.obs")

kable(
  round(cor_matrix, 2),
  caption = "Table 27. Correlation Matrix of Zero-Sum Belief Items",
  booktabs = TRUE
) %>%
  kable_styling(
    latex_options = c("hold_position", "scale_down"),
    full_width = FALSE
  )

# Determine number of factors using scree plot and parallel analysis
scree(df.ZEROSUM)
wrapped_fa_parallel <- paste(strwrap(capture.output(fa.parallel(df.ZEROSUM, fa = "fa")), width = 80), collapse = "\n")
cat(wrapped_fa_parallel, "\n")

# Run 2-factor factor analysis (adjust nfactors based on scree plot/parallel analysis)
fa_result <- fa(df.ZEROSUM, 
                nfactors = 2,  # adjust this number based on your analysis
                rotate = "promax",
                fm = "ml")  # maximum likelihood

# View results
print(fa_result)
fa_result$loadings

# Get factor scores
factor_scores <- fa_result$scores
```

The results of the factor analysis – an unsupervised machine learning technique – support a two factor model with a promax rotation. The first item loads equally on each factor and will not be included in the composite construction. Based on the items, we named the first factor as `ZEROSUM_ECONOMIC` and the second factor as `ZEROSUM_IDENTITY` to correspond with the two different referents of economic (e.g., wealth vs. poor) and social identity (e.g., racial minorities vs. white people), respectively. The IDENTITY factor showed high reliability, with a Cronbach’s alpha of 0.91. This means the items in the `ZEROSUM_IDENTITY` scale consistently measure the same social identity concept.

```{r}
#| label: factor-composite

select_data <- select_data %>%
  mutate(
    ZEROSUM_ECONOMIC = (ZEROSUM_2 + ZEROSUM_3)/2,
    ZEROSUM_IDENTITY = (ZEROSUM_4 + ZEROSUM_5 + ZEROSUM_6 + ZEROSUM_7 + ZEROSUM_8 + ZEROSUM_9 + ZEROSUM_10 + ZEROSUM_11)/8
  )
```

### Reliability of Zero Sum Social Identity Beliefs

```{r}
#| label: alpha-identity-tables
#| results: asis
#| echo: false

library(psych)
library(knitr)

alpha_identity <- psych::alpha(
  select_data[, c(
    "ZEROSUM_4", "ZEROSUM_5", "ZEROSUM_6",
    "ZEROSUM_7", "ZEROSUM_8", "ZEROSUM_9",
    "ZEROSUM_10", "ZEROSUM_11"
  )]
)

kable(
    as.data.frame(alpha_identity$total),
    caption = "Table 4. Overall Reliability Statistics (Cronbach’s Alpha)",
    digits = 3
)

ci_df <- data.frame(
  Method = "Feldt",
  Lower = alpha_identity$feldt$lower.ci$raw_alpha,
  Alpha = alpha_identity$feldt$alpha$raw_alpha,
  Upper = alpha_identity$feldt$upper.ci$raw_alpha
)

kable(
  ci_df,
  caption = "Table 5. 95% confidence boundaries",
  digits = 2,
  booktabs = TRUE
)


kable(
    alpha_identity$alpha.drop,
    caption = "Table 6. Reliability if an item is dropped",
    digits = 2
)

kable(
    alpha_identity$item.stats,
    caption = "Table 7. Item Statistics",
    digits = 2
)


kable(as.data.frame.matrix(alpha_identity$response.freq),
      digits = 2,
      caption = "Table 8. Non missing response frequency for each item")

```

### Reliability of Zero Sum Economic Beliefs

```{r}
#| label: alpha-economic-table

library(psych)

# Alpha for ZEROSUM_ECONOMIC (2 items)
alpha_economic <- psych::alpha(select_data[, c("ZEROSUM_2", "ZEROSUM_3")])

kable(
    as.data.frame(alpha_economic$total),
    caption = "Table 9. Overall Reliability Statistics (Cronbach’s Alpha)",
    digits = 3
)


ci_df_eco <- data.frame(
  Method = "Feldt",
  Lower = alpha_economic$feldt$lower.ci$raw_alpha,
  Alpha = alpha_economic$feldt$alpha$raw_alpha,
  Upper = alpha_economic$feldt$upper.ci$raw_alpha
)

kable(
  ci_df_eco,
  caption = "Table 10. 95% confidence boundaries",
  digits = 2,
  booktabs = TRUE
)


kable(
    alpha_economic$alpha.drop,
    caption = "Table 11. Reliability if an item is dropped",
    digits = 2
)

kable(
    alpha_economic$item.stats,
    caption = "Table 12. Item Statistics",
    digits = 2
)


kable(as.data.frame.matrix(alpha_economic$response.freq),
      digits = 2,
      caption = "Table 13. Non missing response frequency for each item")
```

The **zero-sum economic beliefs** factor showed lower reliability, with a Cronbach’s alpha of 0.65. A lower reliability is expected in a two-item measure.


# Zero Sum Beliefs by Political Party

## ZEROSUM_1: Life is so devised that when somebody gains, others have to lose.

```{r}
#| label: raincloud-zerosum1
#| fig-cap: "Distribution of agreement with 'Life is so devised that when somebody gains, others have to lose' by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum1_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_1), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_1,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "Life is so devised that when somebody gains, others have to lose.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum1_raincloud
```

## ZEROSUM_2: When some people are getting poorer, it means that other people are getting richer.

```{r}
#| label: raincloud-zerosum2
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum2_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_2), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_2,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "When some people are getting poorer,\nit means that other people are getting richer.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum2_raincloud
```

## ZEROSUM_3: The wealth of a few is acquired at the expense of many.

```{r}
#| label: raincloud-zerosum3
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum3_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_3), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_3,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "The wealth of a few is acquired at the expense of many.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum3_raincloud
```

## ZEROSUM_4: As women face less sexism, men end up facing more sexism.

```{r}
#| label: raincloud-zerosum4
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum4_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_4), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_4,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "As women face less sexism, men end up facing more sexism.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum4_raincloud
```

## ZEROSUM_5: Less discrimination against minorities means more discrimination against whites.

```{r}
#| label: raincloud-zerosum5
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum5_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_5), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_5,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "Less discrimination against minorities means\nmore discrimination against whites.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum5_raincloud
```

## ZEROSUM_6: More opportunity for transwomen means less opportunity for people assigned female at birth.

```{r}
#| label: raincloud-zerosum6
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum6_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_6), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_6,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "More opportunity for transwomen means less opportunity\nfor people who are assigned female at birth.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum6_raincloud
```

## ZEROSUM_7: More healthcare access for undocumented immigrants means less access for U.S. citizens.

```{r}
#| label: raincloud-zerosum7
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum7_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_7), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_7,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "More healthcare access for undocumented immigrants\nmeans less access for U.S. citizens.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum7_raincloud
```

## ZEROSUM_8: If there is equal pay for women, men will get lower wages.

```{r}
#| label: raincloud-zerosum8
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum8_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_8), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_8,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "If there is equal pay for women, men will get lower wages.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum8_raincloud
```

## ZEROSUM_9: LGBTQ+ rights mean less freedom for religious groups.

```{r}
#| label: raincloud-zerosum9
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum9_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_9), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_9,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "LGBTQ+ rights mean less freedom for religious groups.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum9_raincloud
```

## ZEROSUM_10: Accessible healthcare for people with disabilities means longer wait times for non-disabled patients.

```{r}
#| label: raincloud-zerosum10
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum10_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_10), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_10,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "Accessible healthcare for people with disabilities means\nlonger wait times for non-disabled patients.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum10_raincloud
```

## ZEROSUM_11: Universal healthcare means worse healthcare for those who can afford private insurance.

```{r}
#| label: raincloud-zerosum11
#| fig-cap: "Distribution by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.zerosum11_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_11), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_11,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "Universal healthcare means worse healthcare\nfor those who can afford private insurance.",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.zerosum11_raincloud
```

------------------------------------------------------------------------

# Zero Sum Beliefs by Political Party and Subjective Social Status

Each model: `ZEROSUM_i ~ SOCIALSTATUS * POLITICALPARTY`\
Democrat = reference group.

## ZEROSUM_1

```{r}
#| label: ancova-zerosum1

zerosum1_social <- lm(ZEROSUM_1 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum1_social)
```

```{r}
#| label: ancova-plot-zerosum1
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum1_social_plot <- ggpredict(zerosum1_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum1_social_plot$group <- factor(zerosum1_social_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum1_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "Life is so devised that when somebody gains, others have to lose.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_2

```{r}
#| label: ancova-zerosum2

zerosum2_social <- lm(ZEROSUM_2 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum2_social)
```

```{r}
#| label: ancova-plot-zerosum2
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum2_social_plot <- ggpredict(zerosum2_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum2_social_plot$group <- factor(zerosum2_social_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum2_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "When some people are getting poorer,\nit means that other people are getting richer.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_3

```{r}
#| label: ancova-zerosum3

zerosum3_social <- lm(ZEROSUM_3 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum3_social)
```

```{r}
#| label: ancova-plot-zerosum3
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum3_social_plot <- ggpredict(zerosum3_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum3_social_plot$group <- factor(zerosum3_social_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum3_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "The wealth of a few is acquired at the expense of many.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_4

```{r}
#| label: ancova-zerosum4

zerosum4_social <- lm(ZEROSUM_4 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum4_social)
```

```{r}
#| label: ancova-plot-zerosum4
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum4_social_plot <- ggpredict(zerosum4_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum4_social_plot$group <- factor(zerosum4_social_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum4_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "As women face less sexism, men end up facing more sexism.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_5

```{r}
#| label: ancova-zerosum5

zerosum5_social <- lm(ZEROSUM_5 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum5_social)
```

```{r}
#| label: ancova-plot-zerosum5
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum5_social_plot <- ggpredict(zerosum5_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum5_social_plot$group <- factor(zerosum5_social_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum5_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "Less discrimination against minorities\nmeans more discrimination against whites.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_6

```{r}
#| label: ancova-zerosum6

zerosum6_social <- lm(ZEROSUM_6 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum6_social)
```

```{r}
#| label: ancova-plot-zerosum6
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum6_social_plot <- ggpredict(zerosum6_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum6_social_plot$group <- factor(zerosum6_social_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum6_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "More opportunity for transwomen means less opportunity\nfor people who are assigned female at birth.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_7

```{r}
#| label: ancova-zerosum7

zerosum7_social <- lm(ZEROSUM_7 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum7_social)
```

```{r}
#| label: ancova-plot-zerosum7
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum7_social_plot <- ggpredict(zerosum7_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum7_social_plot$group <- factor(zerosum7_social_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum7_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "More healthcare access for undocumented immigrants\nmeans less access for U.S. citizens.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_8

```{r}
#| label: ancova-zerosum8

zerosum8_social <- lm(ZEROSUM_8 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum8_social)
```

```{r}
#| label: ancova-plot-zerosum8
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum8_social_plot <- ggpredict(zerosum8_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum8_social_plot$group <- factor(zerosum8_social_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum8_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "If there is equal pay for women, men will get lower wages.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_9

```{r}
#| label: ancova-zerosum9

zerosum9_social <- lm(ZEROSUM_9 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum9_social)
```

```{r}
#| label: ancova-plot-zerosum9
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum9_social_plot <- ggpredict(zerosum9_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum9_social_plot$group <- factor(zerosum9_social_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum9_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "LGBTQ+ rights mean less freedom for religious groups.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_10

```{r}
#| label: ancova-zerosum10

zerosum10_social <- lm(ZEROSUM_10 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum10_social)
```

```{r}
#| label: ancova-plot-zerosum10
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum10_social_plot <- ggpredict(zerosum10_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum10_social_plot$group <- factor(zerosum10_social_plot$group,
                                       levels = c("Democrat", "Independent", "Republican"))

plot(zerosum10_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "Accessible healthcare for people with disabilities\nmeans longer wait times for others.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## ZEROSUM_11

```{r}
#| label: ancova-zerosum11

zerosum11_social <- lm(ZEROSUM_11 ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum11_social)
```

```{r}
#| label: ancova-plot-zerosum11
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum11_social_plot <- ggpredict(zerosum11_social, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum11_social_plot$group <- factor(zerosum11_social_plot$group,
                                       levels = c("Democrat", "Independent", "Republican"))

plot(zerosum11_social_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "Universal healthcare means worse healthcare\nfor those who can afford private insurance.",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

## Aggregate Zero-Sum Beliefs

### Zero-Sum Social Identity Beliefs by Political Party

```{r}
#| label: raincloud-zerosum-socialcomp
#| fig-cap: "Zero-Sum Social Identity Beliefs by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.ZEROSUM_IDENTITY_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_IDENTITY), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_IDENTITY,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "Zero-Sum Social Identity Beliefs and Political Party",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.ZEROSUM_IDENTITY_raincloud
```

### Zero-Sum Economic Identity Beliefs by Political Party

```{r}
#| label: raincloud-zerosum-econcomp
#| fig-cap: "Zero-Sum Economic Identity Beliefs by political affiliation. White dots = means; colored dots = individual responses."
#| fig-align: center
#| warning: false

plot.ZEROSUM_ECONOMIC_raincloud <- select_data %>%
  filter(!is.na(ZEROSUM_ECONOMIC), !is.na(POLITICALPARTY)) %>%
  ggplot(aes(x = POLITICALPARTY, y = ZEROSUM_ECONOMIC,
             fill = POLITICALPARTY, color = POLITICALPARTY)) +
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0,
               justification = -0.2, point_colour = NA, alpha = 0.7) +
  geom_boxplot(width = 0.15, outlier.shape = NA, alpha = 0.5) +
  geom_point(size = 1.3, alpha = 0.3,
             position = position_jitter(seed = 1, width = 0.1)) +
  stat_summary(fun = mean, geom = "point", size = 3,
               color = "white", stroke = 1.5, shape = 21) +
  scale_fill_manual(values = party_colors) +
  scale_color_manual(values = party_colors) +
  theme_bw() +
  labs(title = "Zero-Sum Economic Beliefs and Political Party",
       x = "Political Affiliation", y = "Level of Agreement",
       caption = "White dots = means; colored dots = individual responses") +
  theme(plot.title   = element_text(size = 12, face = "bold", hjust = 0.5),
        plot.caption = element_text(size = 9,  color = "gray40", hjust = 0.5),
        axis.title   = element_text(size = 12, face = "bold"),
        axis.text    = element_text(size = 10),
        legend.position = "none",
        panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3)) +
  scale_y_continuous(breaks = 1:7,
    labels = c("1: Strongly Disbelieve","2: Disbelieve","3: Somewhat Disbelieve",
               "4: Neither","5: Somewhat Believe","6: Believe","7: Strongly Believe"),
    limits = c(1, 7))

plot.ZEROSUM_ECONOMIC_raincloud
```


### Zero-Sum Social Identity Beliefs by Political Party and Subjective Social Status

```{r}
#| label: ancova-zerosum-identity

zerosum_social_identity <- lm(ZEROSUM_IDENTITY ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum_social_identity)
```


```{r}
#| label: ancova-plot-Zero-Sum Social Identity
#| fig-width: 7
#| fig-height: 5
#| dpi: 300
#| warning: false

zerosum_social_identity_plot <- ggpredict(zerosum_social_identity, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum_social_identity_plot$group <- factor(zerosum_social_identity_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum_social_identity_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "Zero-Sum Social Identity Beliefs by \n Political Party and Subjective Social Status",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

### Zero-Sum Economic Identity Beliefs by Political Party and Subjective Social Status

```{r}
#| label: ancova-zerosum-economic

zerosum_economic <- lm(ZEROSUM_ECONOMIC ~ SOCIALSTATUS * POLITICALPARTY, data = select_data)
summary(zerosum_economic)
```

```{r}
#| label: ancova-plot-Zero-Sum-Economic
#| fig-width: 6
#| fig-height: 3
#| dpi: 300
#| warning: false

zerosum_economic_plot <- ggpredict(zerosum_economic, terms = c("SOCIALSTATUS", "POLITICALPARTY"))
zerosum_economic_plot$group <- factor(zerosum_economic_plot$group,
                                      levels = c("Democrat", "Independent", "Republican"))

plot(zerosum_economic_plot) +
  scale_color_manual(values = party_colors) +
  scale_fill_manual(values = party_colors) +
  scale_x_continuous(breaks = 1:10, limits = c(1, 10)) +
  scale_y_continuous(breaks = 1:7) +
  coord_cartesian(xlim = c(1, 10), ylim = c(1, 7)) +
  labs(title = "Zero-Sum Economic Beliefs and \n Political Party x Subjective Social Status",
       x = "Subjective Social Status", y = "Level of Agreement Score",
       color = "Political Affiliation") +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        axis.title.x  = element_text(face = "bold"),
        axis.title.y  = element_text(face = "bold"))
```

# Discussion

  In the modern era, political scientists and mainstream media have pointed to a political party realignment and class dealignment to explain the shifting political landscape. Given the range of political typologies (PEW, 2021) beyond the liberal-conservative spectrum, a range of actors – from politicians to campaigns and influencers – have used zero-sum message framing to reach the base and attract new voters. The current study examines voters’ beliefs about social identity and economics. 
  
  In contrast to decades of existing research demonstrating that social identities explain political party alignment, our findings suggest that a person’s beliefs about social identity groups—specifically zero-sum social identity beliefs—may matter more than a person’s social identity. A series of eleven ANCOVAs revealed that zero-sum beliefs differed systematically by political party affiliation across multiple domains, with Republicans reporting consistently higher endorsement of zero-sum social identity beliefs compared to Independents and Democrats. These intercept differences were largest for transgender opportunity beliefs (b = 5.409, p < .001) and gender-based sexism beliefs (b = 4.284, p < .001). For transgender opportunity beliefs, the intercept for Republicans was 5.41. This indicates that at the lowest level of subjective social status, Republicans scored 5.409 points higher than Democrats on the belief that “More opportunity for transwomen means less opportunity for people who are assigned female at birth,” almost reaching the upper limit of a 7-point scale. Similarly, for gender-based sexist beliefs, the intercept for Republicans was b = 4.284. This indicates that among the lowest-ranking groups, Republicans scored 4.284 points higher than Democrats on the belief that “As women face less sexism, men end up facing more sexism.” These findings suggest that zero-sum thinking represents the most pronounced political division in our sample within the domain of gender and identity.
  
  The current study also advances understanding of how subjective social status moderates zero-sum thinking differently across political groups. The study found significant subjective social status × party affiliation interactions in four areas: wealth inequality (F= 4.064, p = .002), gender-based sexism (F = 3.831, p = .003), transgender opportunities (F = 7.143, p < .001), and LGBTQ+ rights (F = 6.857, p < .001). Notably, in all four areas, higher subjective social status was associated with a higher level of identification with zero-sum thinking among Democrats. However, the positive correlation between perceived subjective social status and zero-sum thinking weakened or even reversed for Republicans and independents. For example, regarding gender-based sexist beliefs, the interaction between social status and Republicans was significant (b = −0.574, p = .007), while the interaction between social status and independents was significant (b = −0.444, p = .045). This difference suggests that perceived subjective social status may vary based on political identity, which requires further investigation.
These findings indicate that zero-sum and social identity beliefs are one dimension of political polarization in contemporary America. These beliefs do not reflect simple partisan divisions but appear to be constructed from the intersection of political orientation and perceived social status. Future research should examine the causal relationship between perceived social status and zero-sum thinking within political groups and explore whether interventions targeting zero-sum and social identity beliefs can effectively reduce political polarization.