Header

Rationale

If you’ve ever exited a sad movie and felt melancholy in the hours that follow, or an action movie leaves you amped, you’ve experienced the idea behind Media Priming Theory. Exposure to media can temporarily shape how we feel and act afterward.

But instead of focusing on melancholy moods, researchers have long been infatuated with the link between violence in media — video games, in particular, have been under scrutiny — and increased aggressive behavior. Priming Theory suggest that yes, interaction with positive and negative stimuli does have an effect on behavior, albeit on the short-term.

In this study, 135 fifth graders were randomly divided into three groups of 45 students. Thirty minutes prior to recess, teachers assigned each group to complete a different task. Once on the playground, students were observed and results tallied based on instances of aggressive behavior.

Group 1 did a math lesson with a game called “Exponent Fighter.” A correct answer let the on-screen character punch a computer opponent. A wrong answer meant the player got punched. The goal was to land more punches than the opponent.

Group 2 did a math lesson with “Exponent Builder.” Each correct answer earned a block to add to a structure leading up to a platform. The goal was to collect enough blocks to reach it.

Group 3 had an art lesson. They used a color wheel to pick a color scheme for an abstract design made with paint and pre-cut stencils.

Hypothesis

Students who consumed the violent media before recess — either punching or being punched — will spend more minutes in aggressive behavior than students in the other two groups.

Variables & Method

The independent variable (IV) in the study is the type of activity students completed before recess. Group 1 consumed a violent game; Group 2 played a nonviolent game; and Group 3 completed an art project. The dependent variable (DV) is the number of minutes each student spent on engaging in aggressive behavior during the recess period.

A One-way Analysis of Variance (ANOVA) test was used for this study to contrast the three groups in one single test, giving a more accurate view of results instead of running multiple tests on the data set. There is one categorial independent variable and the three groups contain one continuous (numerical) dependent variable.

Results & Discussion

The interactive box plot shows a clear difference in aggressive behavior, and the Descriptive Statistics Table breaks the numbers down. The dependent variable is represented on the Y-axis (minutes of aggression) and the X-axis represents the independent variable (group). The art group spent the least time being aggressive (M = 4.96 minutes, range 2.3 to 7.3). The nonviolent game group was a bit higher (M = 5.85, range 3.6 to 8.4). The violent game group was much higher (M = 10.75, range 8.5 to 12.8), which is about a third of a 30-minute recess.

Shapiro-Wilk Normality Test p-values were above .05, so there’s no evidence of departure from normality. Students who played the violent game spent 5.79 more minutes being aggressive than the art group and 4.89 more minutes than the nonviolent game group, supporting the assumption that students who played the violent game showed the highest levels of aggressive behavior.

The One-way ANOVA Test showed that students’ time spent being aggressive during recess was significantly different across the three groups, with the p-value rounded up to <.001.

Tukey’s Honestly Significant Difference Test showed every pair of groups was significantly different and p-values for all groups were < .001. The violent game group was aggressive for 5.79 more minutes than the art group and about 4.89 more than the nonviolent game group. That supports the hypothesis.

Since I wasn’t sure the normality assumption held perfectly, I also ran a Kruskal-Wallis Test. It agreed with the ANOVA (p < .001). Dunn’s post-hoc test found significant differences between every pair (p < .05).

The results supported the hypothesis. Students who played the violent game spent about five more minutes being aggressive than either other group, while the nonviolent game and art groups were much closer together. This aligns with Media Priming Theory, which says recent exposure to violent content makes aggressive thoughts and responses easier to access, shaping behavior shortly afterward.



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

Here is the R script code used to produce the results.

# ============================================================
#  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

Asset code

# Read the data from the web
FetchedData <- read.csv("https://github.com/drkblake/Data/raw/refs/heads/main/Priming.csv")
# Save the data on your computer
write.csv(FetchedData, "Priming.csv", row.names=FALSE)
# remove the data from the environment
rm (FetchedData)