Rationale

Agenda-setting theory proposes that news media influence which public issues audiences consider important by giving some issues more frequent or prominent attention than others. The theory does not necessarily claim that media tell people what opinion to hold. Instead, repeated attention can increase an issue’s salience, making it more likely to come to mind when people are asked about the country’s most important problem.

An analysis of coverage during the months before this September 2023 survey found that Fox News consistently devoted more coverage to immigration than CNN did. If agenda-setting theory applies here, frequent Fox News viewers should therefore be more likely than frequent CNN viewers to name immigration as the most important problem facing the United States.

Hypothesis

The proportion of frequent Fox News viewers who name immigration as the nation’s top issue will be greater than the proportion of frequent CNN viewers who name immigration as the top issue.

Variables & method

The data represent 600 respondents drawn from a larger national survey conducted in September 2023. The independent variable, PreferredNetwork, identifies whether each respondent frequently watched and preferred Fox News or CNN. The dependent variable, Immigration, identifies whether the respondent named immigration (1 Top issue) or another subject (2 Not top issue) when asked, “What is the most important problem facing the U.S. right now?” Both variables are categorical.

A chi-square test of independence was used to determine whether preferred network and naming immigration as the top issue were statistically associated. The test is appropriate because the analysis compares frequencies across two categorical variables. The null hypothesis states that the variables are independent. The research hypothesis predicts that Fox viewers will show greater immigration salience. All expected cell frequencies exceeded five, satisfying the chi-square test’s expected-frequency assumption.

Results & discussion

The graph and crosstabulation summarize the relationship between preferred news network and immigration’s issue salience.

Immigration as the Top Issue by Preferred Network
Counts (column percentages)
Immigration response CNN Fox
Top issue 35 (11.7%) 115 (38.3%)
Not top issue 265 (88.3%) 185 (61.7%)

Among the 300 Fox News viewers, 115 respondents (38.3%) named immigration as the most important problem. Among the 300 CNN viewers, 35 respondents (11.7%) did so. The percentage naming immigration was therefore 26.7 percentage points higher among Fox viewers.

Chi-Square Test Results
Immigration salience and preferred network
Test Chi-square statistic Degrees of freedom p-value Cramer's V
Chi-square test of independence 55.476 1 < .001 0.304

The association between preferred network and naming immigration as the top issue was statistically significant, \(\chi^2\)(1, N = 600) = 55.476, p < .001. The null hypothesis of independence was therefore rejected. Cramer’s V was .304, indicating a moderate association. These results support the hypothesis: frequent Fox News viewers were substantially more likely than frequent CNN viewers to identify immigration as the country’s most important problem.

The pattern is consistent with agenda-setting theory and with the prior finding that Fox devoted more coverage to immigration than CNN. However, this survey comparison was observational rather than a randomized experiment. It demonstrates an association but cannot prove that network exposure caused the difference. Viewers may select a network partly because of concerns they already hold, and other demographic or political differences between the audiences could also contribute to the pattern.

Code

The following is the complete R script used to produce the analysis.

knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE,
                      fig.align = "center")

needed_packages <- c("tidyverse", "gt")
missing_packages <- needed_packages[!needed_packages %in% rownames(installed.packages())]
if (length(missing_packages) > 0) install.packages(missing_packages)

library(tidyverse)
library(gt)
options(scipen = 999)
# Download the data, save a local copy, and create the analysis dataset.
FetchedData <- read.csv(
  "https://drkblake.com/wp-content/uploads/2023/09/TopIssue.csv"
)
write.csv(FetchedData, "TopIssue.csv", row.names = FALSE)
mydata <- FetchedData
rm(FetchedData)

# IV = preferred network; DV = whether immigration was the top issue.
mydata <- mydata %>%
  mutate(
    IV = factor(PreferredNetwork, levels = c("CNN", "Fox")),
    DV = factor(
      Immigration,
      levels = c("1 Top issue", "2 Not top issue"),
      labels = c("Top issue", "Not top issue")
    )
  )

# Stacked proportional column chart.
graph <- ggplot(mydata, aes(x = IV, fill = DV)) +
  geom_bar(position = "fill", colour = "black") +
  scale_y_continuous(labels = scales::percent_format()) +
  scale_fill_brewer(palette = "Paired") +
  labs(
    title = "Immigration's Issue Salience by Preferred News Network",
    subtitle = "Percentage within each network-viewer group",
    x = "Preferred network",
    y = "Percentage of viewers",
    fill = "Immigration"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")

# Crosstabulation with counts and column percentages.
crosstab <- mydata %>%
  count(DV, IV) %>%
  group_by(IV) %>%
  mutate(ColumnPct = 100 * n / sum(n)) %>%
  ungroup() %>%
  mutate(Cell = paste0(n, " (", round(ColumnPct, 1), "%)")) %>%
  select(DV, IV, Cell) %>%
  pivot_wider(names_from = IV, values_from = Cell)

crosstab_table <- crosstab %>%
  gt(rowname_col = "DV") %>%
  tab_header(
    title = "Immigration as the Top Issue by Preferred Network",
    subtitle = "Counts (column percentages)"
  ) %>%
  tab_stubhead(label = "Immigration response")

# Chi-square test of independence.
chitestresults <- chisq.test(mydata$DV, mydata$IV)

# Cramer's V effect size.
n_total <- nrow(mydata)
cramers_v <- sqrt(
  as.numeric(chitestresults$statistic) /
    (n_total * min(nlevels(mydata$DV) - 1, nlevels(mydata$IV) - 1))
)

# Formatted chi-square results table.
chitest_summary <- tibble(
  Test = "Chi-square test of independence",
  Chi_sq = as.numeric(chitestresults$statistic),
  df = as.numeric(chitestresults$parameter),
  p_value = ifelse(chitestresults$p.value < .001, "< .001",
                   sprintf("%.3f", chitestresults$p.value)),
  Cramers_V = cramers_v
)

chitest_table <- chitest_summary %>%
  gt() %>%
  fmt_number(columns = Chi_sq, decimals = 3) %>%
  fmt_number(columns = df, decimals = 0) %>%
  fmt_number(columns = Cramers_V, decimals = 3) %>%
  tab_header(
    title = "Chi-Square Test Results",
    subtitle = "Immigration salience and preferred network"
  ) %>%
  cols_label(
    Test = "Test",
    Chi_sq = "Chi-square statistic",
    df = "Degrees of freedom",
    p_value = "p-value",
    Cramers_V = "Cramer's V"
  )