Rationale

Media Priming Theory suggests that media exposure can influence thoughts, behaviors and judgments by activating feelings and concepts within one’s mind. Although, this theory is only relevant for a short period of time after exposure.

In this analysis, children interacted with two different types of media material: “violent” video games and “non-violent” video games. We then monitored their behavior at recess immediately after viewing to track levels of aggression.

Hypothesis

The odds that a child will act more aggressive at recess are higher for those who played violent video games than for those who played non-violent video games.

Variables & method

135 fifth-graders were divided into three groups. One group played The Sims, one played a cooking game and the last played Minecraft. While The Sims game was creative and the cooking game involved skill and time pressure, Minecraft was the only game with “violent” aspects (weapons, explosions, etc). Once the kids went out for recess immediately after playing these games, they were individually analyzed by the number of minutes spent being physically or verbally violent during the 30-minute recess period.

In the data set, the dependent variable was the number of minutes each child spent being violent during recess, while the independent variable was the video game group they were in. This was analyzed using a one-way ANOVA, a normality test, Post-hoc tests and a Kruskal-Wallis test.

Results & discussion

The results provided support for our hypothesis, showing that exposure to violent media does increase aggressive behavior in children. Students who played Minecraft were the most aggressive, spending an average of 19.62 out of 30 minutes engaging in this behavior. In comparison, students who played the cooking game averaged 7.98 minutes being aggressive, while students who played The Sims averaged only 5.03 minutes being aggressive during recess. The box plot demonstrated this. The one-way ANOVA and Kruskal-Wallis test confirmed significant differences, and all pair comparisons were statistically significant, shown through the Tukey HSD test. Overall, these findings show strong support for our original hypothesis – brief exposure to violence in media can immediately influence aggressive behavior in kids.

Descriptive Statistics by Group
IV count mean sd min max
Cooking game 45 7.98 1.86 5.0 11.9
Minecraft 45 19.62 2.48 15.4 24.8
Sims 45 5.03 1.85 2.1 9.3
Shapiro-Wilk Normality Test by Group
IV W_statistic p_value
Cooking game 0.95 0.062
Minecraft 0.96 0.136
Sims 0.97 0.294
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
516.05 2 86.69692 < .001
Tukey HSD Post-hoc Results
Comparison diff lwr upr p adj
Minecraft-Cooking game 11.64 10.60 12.68 < .001
Sims-Cooking game -2.95 -3.99 -1.91 < .001
Sims-Minecraft -14.59 -15.63 -13.55 < .001
Kruskal-Wallis Test Results
Statistic df p_value
104.92 2 < .001
Post-hoc Dunn’s Test Results
Comparison Z P.unadj P.adj
Cooking game - Minecraft -6.21 < .001 < .001
Cooking game - Sims 3.95 < .001 < .001
Minecraft - Sims 10.16 < .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