Rationale

In framing theory, a consumer’s response to media messages such as opinions, actions, or judgement is from a particular set of cues or from a particular media producer. The cue from this media prompts the consumer to apply a certain frame, therefore leading to the response.

Based on what the framing theory says, cues embedded shown on certain news broadcasts could influence how much value the consumer places on certain issues or topics compared to others.

Hypothesis

The proportion of participating consumers judging the topic immigration as their “Top issue” will differ depending on what news channel they watch.

Variables & Method

A total of 600 participants were labeled into groups based on what news channel they were usual viewers of. One group (n=300) were viewers of Fox News, while the second group (n=300) were viewers of CNN. After identifying what news channel they most frequently watched, participants were asked, “What is the most important problem facing the U.S. right now?” Participants were either labeled “Top Issue” or “Not top issue” based on their response.

The dependent variable in the analysis was a categorical measure of whether the participants labeled immigration as either their “Top issue” or “Not top issue”. The independent variable was measured as the news channel the participant watched, either “Fox News” or “CNN”. It was also a categorical variable.

A chi-square test of independence was conducted to examine the association between preferred/ more frequently watched news sources and the ranking of immigration as a top issue or not top issue, and whether it was statistically significant.

Results & discussion

The graph and crosstabulation table below summarize the association between the dependent and independent variables. The chi-square test results are shown as well.

Crosstabulation of DV by IV
Counts and (Column Percentages)
CNN Fox
1 Top issue 35 (11.7%) 115 (38.3%)
2 Not top issue 265 (88.3%) 185 (61.7%)
Chi-squared Test Results
Test of Independence between DV and IV
Test Chi-squared Statistic Degrees of Freedom p-value
Chi-squared Test of Independence 55.476 1 0.000

The results supported the hypothesis. While majorities of both groups didn’t have immigration as their “Top issue”, 38.3% of the Fox News viewers labeled it as their “Top issue” compared to 11.1% of CNN viewers believing it to the “Top issue”. The chi-square test found it the association to be statistically significant.

Code

# ------------------------------
# Setup: Install and load packages
# ------------------------------
if (!require("tidyverse")) install.packages("tidyverse")   # Data wrangling & plotting
if (!require("gmodels")) install.packages("gmodels")       # Crosstabs
if (!require("gt")) install.packages("gt")                 # Table formatting

library(tidyverse)
library(gmodels)
library(gt)

# ------------------------------
# Load the data
# ------------------------------
# Replace "YOURFILENAME.csv" with your dataset name
mydata <- read.csv("TopIssue.csv") #Edit

# ------------------------------
# Define Dependent (DV) and Independent (IV) variables
# ------------------------------
# Replace YOURDVNAME and YOURIVNAME with actual column names in your data
mydata$DV <- mydata$Immigration #Edit
mydata$IV <- mydata$PreferredNetwork #Edit

# ------------------------------
# Visualization: Stacked bar chart of IV by DV
# ------------------------------
graph <- ggplot(mydata, aes(x = IV, fill = DV)) +
  geom_bar(colour = "black") +
  scale_fill_brewer(palette = "Paired") +
  labs(
    title = "Distribution of DV by IV",
    x = "Independent Variable",
    y = "Count",
    fill = "Dependent Variable"
  )

#Show the graph
graph

# ------------------------------
# Crosstabulation of DV by IV (DV = rows, IV = columns)
# ------------------------------

crosstab <- mydata %>%
  count(DV, IV) %>%
  group_by(IV) %>%
  mutate(RowPct = 100 * n / sum(n)) %>%
  ungroup() %>%
  mutate(Cell = paste0(n, "\n(", round(RowPct, 1), "%)")) %>%
  select(DV, IV, Cell) %>%
  pivot_wider(names_from = IV, values_from = Cell)

# Format into gt table
crosstab_table <- crosstab %>%
  gt(rowname_col = "DV") %>%
  tab_header(
    title = "Crosstabulation of DV by IV",
    subtitle = "Counts and (Column Percentages)"
  ) %>%
  cols_label(
    DV = "Dependent Variable"
  )

# Show the polished crosstab table
crosstab_table

# ------------------------------
# Chi-squared test of independence
# ------------------------------
options(scipen = 999)  # Prevents scientific notation
chitestresults <- chisq.test(mydata$DV, mydata$IV)

# ------------------------------
# Format Chi-squared test results into a table
# ------------------------------
chitest_summary <- tibble(
  Test   = "Chi-squared Test of Independence",
  Chi_sq = chitestresults$statistic,
  df     = chitestresults$parameter,
  p      = chitestresults$p.value
)

chitest_table <- chitest_summary %>%
  gt() %>%
  # Round χ² and p-value to 3 decimals, df to integer
  fmt_number(columns = c(Chi_sq, p), decimals = 3) %>%
  fmt_number(columns = df, decimals = 0) %>%
  tab_header(
    title = "Chi-squared Test Results",
    subtitle = "Test of Independence between DV and IV"
  ) %>%
  cols_label(
    Test   = "Test",
    Chi_sq = "Chi-squared Statistic",
    df     = "Degrees of Freedom",
    p      = "p-value"
  )

# Show the formatted results table
chitest_table