Rationale

Media priming theory suggests that being exposed to certain forms of media can momentarily influence thoughts, feelings, or actions for a short period of time. When these forms of media fall under the umbrella of being aggressive, such as an action movie or a “shooter” video game, the person is more likely to have some sort of an aggressive response in behaviors that follow the exposure. The theory does suggest that the effects from this exposure are typically short-lived while relying on the availability of related cognitive associations.

In this study, the participants (135 fifth-grade students) were randomly divided into three groups of 45 students each. The groups were each given a different activity before recess: playing a violent math game, a nonviolent math game, or completing an art project. The media priming theory suggests that the students assigned to the group with the violent game, which is aggresive content, should experience an increase seen as relevant when it comes to aggressive thoughts and behaviors while at recess compared to the other groups.

Hypothesis

Fifth-grade students who complete the violent math game (Exponent Fighter) will display more aggressive behavior while at recess in comparison to students who complete the nonviolent math game (Exponent Builder) or the art project.

Variables & method

The independent variable in this study are categorical, while it is based on the three groups that the fifth graders were split into. This includes the violent game, the nonviolent game, and the art project. It is denoted as group in the code.

The continuous dependent variable was the total minutes engaged in aggressive behaviors during recess. It is denoted as value in the code.

The method of this analysis began with the 135 fifth graders who were split into three groups of 45 students. Each were assigned to a different group that participated in one of three separate projects as the independent variable. After working on the projects for 30 minutes, all of the students were sent to recess. During the 30 minute recess, researchers watched the students and recorded the amount of time each student engaged in an aggressive act. This data was used to conduct a one-way ANOVA to see if the mean aggression value differed between the groups.

Results & Discussion

The box plot shows that students who played the violent game showed much greater times of engaging and exhibiting aggressive behavior at recess compared to the students who did the nonviolent game or the art project. The one-way ANOVA also showed a statistically significant difference between the groups as p < .05. The Tukey HSD test displays the violent game group with a significantly greater aggression value compared to the other two groups. There was not a statistically significant difference between those two other groups, the nonviolent game and the art project. 

These findings support the media priming theory along with the hypothesis above, with exposure to violent media leading to an increase in aggression immediately after the exposure.

Descriptive Statistics by Group
IV count mean sd min max
Art project 45 4.96 1.04 2.3 7.3
Nonviolent game 45 5.86 1.06 3.6 8.4
Violent game 45 10.75 1.00 8.5 12.8
Shapiro-Wilk Normality Test by Group
IV W_statistic p_value
Art project 0.99 0.923
Nonviolent game 0.98 0.594
Violent game 0.98 0.699
Note. If any p-value figures are 0.05 or less, if one or more group distributions appear non-normal, and any group sizes are less than 40, consider using the Kruskal-Wallis and Post-hoc Dunn’s Test results instead of the ANOVA and Tukey HSD Post-hoc results.
ANOVA Test Results
Statistic df df_resid p_value
420.86 2 87.94717 < .001
Tukey HSD Post-hoc Results
Comparison diff lwr upr p adj
Nonviolent game-Art project 0.90 0.38 1.42 < .001
Violent game-Art project 5.79 5.27 6.30 < .001
Violent game-Nonviolent game 4.89 4.37 5.40 < .001
Kruskal-Wallis Test Results
Statistic df p_value
95.23 2 < .001
Post-hoc Dunn’s Test Results
Comparison Z P.unadj P.adj
Art project - Nonviolent game -2.42 0.016 0.047
Art project - Violent game -9.40 < .001 < .001
Nonviolent game - Violent game -6.98 < .001 < .001

Code

# ============================================================
#  Setup: Install and Load Required Packages
# ============================================================
if (!require("tidyverse")) install.packages("tidyverse")
if (!require("gt")) install.packages("gt")
if (!require("gtExtras")) install.packages("gtExtras")
if (!require("FSA")) install.packages("FSA")
if (!require("plotly")) install.packages("plotly")

library(tidyverse)
library(gt)
library(gtExtras)
library(FSA)
library(plotly)

options(scipen = 999) # suppress scientific notation

# ============================================================
#  Step 1: Load Data
# ============================================================
mydata <- read.csv("Priming.csv") # <-- Edit YOURFILENAME.csv

# Specify DV and IV (edit column names here)
mydata$DV <- mydata$Value
mydata$IV <- mydata$Group

# ============================================================
#  Step 2: Visualize Group Distributions (Interactive)
# ============================================================
# Compute group means
group_means <- mydata %>%
  group_by(IV) %>%
  summarise(mean_value = mean(DV), .groups = "drop")

# Interactive plot (boxplot + group means)
box_plot <- plot_ly() %>%
  # Boxplot trace
  add_trace(
    data = mydata,
    x = ~IV, y = ~DV,
    type = "box",
    boxpoints = "outliers",   # only applies here
    marker = list(color = "red", size = 4),  # outlier style
    line = list(color = "black"),
    fillcolor = "royalblue",
    name = ""
  ) %>%
  # Group means (diamonds)
  add_trace(
    data = group_means,
    x = ~IV, y = ~mean_value,
    type = "scatter", mode = "markers",
    marker = list(
      symbol = "diamond", size = 9,
      color = "black", line = list(color = "white", width = 1)
    ),
    text = ~paste0("Mean = ", round(mean_value, 2)),
    hoverinfo = "text",
    name = "Group Mean"
  ) %>%
  layout(
    title = "Interactive Group Distributions with Means",
    xaxis = list(title = "Independent Variable (IV)"),
    yaxis = list(title = "Dependent Variable (DV)"),
    showlegend = FALSE
  )

# ============================================================
#  Step 3: Descriptive Statistics by Group
# ============================================================
desc_stats <- mydata %>%
  group_by(IV) %>%
  summarise(
    count = n(),
    mean = mean(DV, na.rm = TRUE),
    sd   = sd(DV, na.rm = TRUE),
    min  = min(DV, na.rm = TRUE),
    max  = max(DV, na.rm = TRUE)
  )

desc_table <- desc_stats %>%
  mutate(across(where(is.numeric), ~round(.x, 2))) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Descriptive Statistics by Group")

# ============================================================
#  Step 4: Test Normality (Shapiro-Wilk)
# ============================================================
shapiro_results <- mydata %>%
  group_by(IV) %>%
  summarise(
    W_statistic = shapiro.test(DV)$statistic,
    p_value = shapiro.test(DV)$p.value
  )

shapiro_table <- shapiro_results %>%
  mutate(
    W_statistic = round(W_statistic, 2),
    p_value = ifelse(p_value < .001, "< .001", sprintf("%.3f", p_value))
  ) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Shapiro-Wilk Normality Test by Group") %>%
  tab_source_note(
    source_note = "Note. If any p-value figures are 0.05 or less, if one or more group distributions appear non-normal, and any group sizes are less than 40, consider using the Kruskal-Wallis and Post-hoc Dunn’s Test results instead of the ANOVA and Tukey HSD Post-hoc results."
  )

# ============================================================
#  Step 5a: Non-Parametric Test (Kruskal-Wallis + Dunn)
# ============================================================
kruskal_res <- kruskal.test(DV ~ IV, data = mydata)

kruskal_table <- data.frame(
  Statistic = round(kruskal_res$statistic, 2),
  df = kruskal_res$parameter,
  p_value = ifelse(kruskal_res$p.value < .001, "< .001",
                   sprintf("%.3f", kruskal_res$p.value))
) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Kruskal-Wallis Test Results")

dunn_res <- dunnTest(DV ~ IV, data = mydata, method = "bonferroni")$res

dunn_table <- dunn_res %>%
  mutate(
    Z = round(Z, 2),
    P.unadj = ifelse(P.unadj < .001, "< .001", sprintf("%.3f", P.unadj)),
    P.adj   = ifelse(P.adj < .001, "< .001", sprintf("%.3f", P.adj))
  ) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Post-hoc Dunn’s Test Results")

# ============================================================
#  Step 5b: Parametric Test (ANOVA + Tukey)
# ============================================================
anova_res <- oneway.test(DV ~ IV, data = mydata, var.equal = FALSE)

anova_table <- data.frame(
  Statistic = round(anova_res$statistic, 2),
  df = anova_res$parameter[1],
  df_resid = anova_res$parameter[2],
  p_value = ifelse(anova_res$p.value < .001, "< .001",
                   sprintf("%.3f", anova_res$p.value))
) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "ANOVA Test Results")

anova_model <- aov(DV ~ IV, data = mydata)
tukey_res <- TukeyHSD(anova_model)$IV %>% as.data.frame()

tukey_table <- tukey_res %>%
  rownames_to_column("Comparison") %>%
  mutate(
    diff = round(diff, 2),
    lwr = round(lwr, 2),
    upr = round(upr, 2),
    `p adj` = ifelse(`p adj` < .001, "< .001", sprintf("%.3f", `p adj`))
  ) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Tukey HSD Post-hoc Results")

# ============================================================
#  Step 6: Display Key Results
# ============================================================
# Interactive box plot
box_plot

# Tables
desc_table
shapiro_table
anova_table
tukey_table
kruskal_table
dunn_table